J'ai déjà quelques connaissances en théorie des langages, mes cours ne sont pas trop loin... Je vais réfléchir aux automates à piles, je n'y avais pas pensé.
Le problème auquel je me confronte est un défi personnel plus qu'autre chose.
La réalisation de l'interpréteur en tant que tel n'est pas un problème majeur. Il s'agit d'avoir deux itérateurs bien fichus (pointeur d'instruction et pointeur mémoire) et une liste d'opérateur, puis de répéter "ip.suivant(); ip.eval(mémoire);" jusqu'à terminaison du programme
Le parseur est plus complexe dans mon cas, puisque j'ai des discriminations importantes selon les langages.
D'où l'idée d'une classe de langage pour paramétrer le parseur créé.
J'obtiendrais ainsi les classes suivantes:
- mémoire
- mémoire::iterateur
- langage
- operateur
- des implémentations d'operateurs (plus ou moins parametrables)
- programme
- programme<?>
- programme<?>::iterateur
Parmi les subtilités apparaissant avec les grilles d'instructions (comme dans PATH), il y a les possibilités de parcourir des séquences d'instructions dans les deux sens ou de voir plusieurs séquences partagent une ou plusieurs instructions.
exemple de partage
1 \/\/\/|
2 aaaaaa\
3 bbbbbb/
\/\/\/
en entrant en 1 vers la droite, on a la séquence abba abba abba abba abba abba, en ressortant en 1 vers la gauche
tandis qu'en commencant en 2 vers la droite on réalise aaaaaa bbbbbb en sortant en 3 vers la gauche.
Cela dit, une grille creuse peut aussi servir dans d'autres contexte, tel que des jeux de plateaux.
Partager