Présentation
Les programmes écrits en PATH occupent une grille bidimensionnelle. Les barres obliques (/) et barres obliques inversées (\) sont utilisées pour diriger le flux du programme vers le haut, le bas, la droite ou la gauche et les « flèches » sont utilisées pour les branchements conditionnels.
Un programme PATH tourne dans un environnement minimal : un tableau illimité d'entiers (cellules de mémoire), une sortie standard et une entrée standard. Le programme peut prendre des valeurs ASCII en entrée et les mettre dans des cellules, renvoyer en sortie la valeur ASCII d'une cellule, incrémenter/décrémenter des cellules, faire des recherches au sein des cellules, et modifier conditionnellement (si le contenu de la cellule courante est différent de 0) sa direction de lecture.
L'interprète PATH commence au premier caractère $ et lit vers la droite chacun des caractères rencontrés (ou symboles d'instruction). L'interprète se comporte différemment selon qu'il rencontre l'un de ces symboles d'instruction :
$ | débute le programme, se dirige vers vers la droite |
# | termine le programme |
+ | incrémente la valeur de la cellule courante |
- | décrémente la valeur de la cellule courante |
} | déplace la tête de lecture/écriture sur la cellule de droite (suivante) |
{ | déplace la tête de lecture/écriture sur la cellule de gauche (précédente) |
, | lit un caractère ASCII depuis l'entrée standard dans la cellule courante |
. | écrit un caractère ASCII sur la sortie standard depuis la cellule courante |
/ | lorsque la direction est : |
|
- la droite, tourne vers le haut
- le bas, tourne vers la gauche
- la gauche, tourne vers le bas
- le haut, tourne vers la droite
|
\ | lorsque la direction est : |
|
- la droite, tourne vers le bas
- le bas, tourne vers la droite
- la gauche, tourne vers le haut
- le haut, tourne vers la gauche
|
^ | si la valeur de la cellule courante n'est pas 0, tourne vers le haut |
< | si la valeur de la cellule courante n'est pas 0, tourne vers la gauche |
> | si la valeur de la cellule courante n'est pas 0, tourne vers la droite |
v | si la valeur de la cellule courante n'est pas 0, tourne vers le bas |
! | saute par-dessus le prochain symbole (en l'ignorant donc) |
Si l'interprète ne connaît pas un symbole, il le passe simplement sans procéder à une action.
Vous aurez sans doute constaté que le langage PATH dérive fortement du langage Brainfuck dont il reprend les concepts en lui rajoutant une seconde dimension. Les structures de branchement conditionnel appartiennent directement au langage et permettent d'écrire des programmes qui ressemblent à de l'art ASCII.
Le but de cette présentation n'est pas de vous apprendre à programmer en PATH, mais de vous fournir un interprète PHP qui vous aidera dans cette tâche. Cet interprète implémente un objet « machine de Turing » comme structure de données interne et simule l'entrée standard par une chaîne de caractères en paramètre.
L'exemple media n'est pas de la programmation à proprement parler, mais utilise l'art ASCII pour encrypter une information (et tester l'interprète par la même occasion).
Code source :
Interprète PATH en PHP
Cette application est domaine public : vous pouvez la télécharger et l'utiliser comme bon vous semble. Si vous y apportez des modifications que vous êtes prêt-e à partager, elles seront ajoutées sur ce site.
Lien :
Le PATH sur SourceForge
|