Présentation

Le brainfuck est un langage de programmation de la catégorie des Turing tarpits (Fourre-tout de Turing). Ce type de langage permet d'implémenter en théorie n'importe quel algorithme (on dit alors qu'il est Turing-complet, en référence à Alan Turing, mathématicien britannique et créateur en quelque sorte de l'informatique moderne) en utilisant un nombre très limité d'opérateurs et peu voire pas d'opérandes.


Principe de fonctionnement

Brainfuck fonctionne d'une manière plutôt basique. Une tête de lecture, une sorte de curseur, se positionne selon les ordres de l'utilisateur, incrémente et décrémente des valeurs. Elle dispose d'une fonction d'entrée, qui permet de définir une valeur manuellement à l'un des emplacements de la bande, et d'une fonction de sortie qui permet de renvoyer sur une sortie le contenu de la case sur laquelle elle se trouve.


Opérateurs

Brainfuck utilise 8 opérateurs, qui sont :

  • +, qui incrémente la valeur placée sous la tête de lecture
  • -, qui décrémente la valeur placée sous la tête de lecture
  • <, qui est l'opérateur de décalage de la tête de lecture vers la gauche
  • >, qui est l'opérateur de décalage de la tête de lecture vers la droite
  • [, qui est l'opérateur d'indication de début de boucle
  • ], qui est l'opérateur d'indication de fin de boucle
  • . (le point), qui est l'opérateur de sortie d'un caractère
  • , (la virgule) quant à lui est l'opérateur d'entrée d'un caractère par l'utilisateur

Exemples de programme

,<,>[->+<]>. : ce programme additionne deux nombres et affiche le résultat.


Interet de Brainfuck

Brainfuck est avant tout un jeu intellectuel : implémenter un petit algorithme relève parfois du tour de force. Mais l'intêret principal pour moi, c'est d'écrire un compilateur ou un interpréteur qui fonctionne pour ce langage. Ca apporte beaucoup de plaisir une fois que ça fonctionne. J'ai une ébauche d'interpréteur Brainfuck que vous trouverez sur cette page