1 Introduction
1.1 Un mot pour commencer
1.2 Objectif
1.3 Choix du forth
1.4 Portée
1.5 Organisation du document
2 Introduction au langage Forth
2.1 Introduction
2.2 La Pile de données
2.3 Notions de mot et de dictionnaire
2.4 Les variables
3 Définition du Micro-forth
3.1 Simplifications
3.2 Eléments repris du forth
4 Implémentation d’un systeme Micro-forth
4.1 Choix dans l’implémentation
4.2 Eléments d’un interpréteur
4.2.1 Structure du dictionnaire
4.2.2 La pile de données
4.2.3 La pile de retour
4.2.4 Le buffer d’entrée (input buffer)
4.3 Structure de l’interpréteur
4.3.1 Mots immédiats
4.3.2 Registre IP (instruction pointer)
4.3.3 Fonctionnement interne
5 Conclusion
A Bibliographie
B Code Source de Microforth Interpreter
Introduction
Un mot pour commencer
Ce document a été réalisé pour le cours d’approfondissement ”Logique, mathématiques, informatique” dispensé à l’Ecole Centrale Paris par Mr. Pas- cal Laurent en mai-juin 2005.
Vous pouvez l’utiliser ou le distribuer comme vous le souhaitez, mais merci de conserver l’intégralité du document afin qu’il garde son sens. Ce document n’ayant pas été relu par une personne plus compétente, je ne garantis pas la véracité de l’ensemble du document.
L’adresse originale de ce travail est : http ://www.neyric.com/comp/forth/
Vous pouvez me contacter pour toute remarque ou question à propos de ce document à l’adresse suivante : eric.abouaf@student.ecp.fr
Le langage implanté est en grande partie basé sur la définition du langage Forth de l’American National Standard for Information Systems datant du 24 Mars 1994. [1] Particulièrement les sections 1 à 6, (Les sections 7 à 17 définissent des word sets supplémentaires non pris en compte dans micro forth.) même si le jeu de mots est bien plus limité (pour l’instant !).
Objectif
Ce document a pour objectif de se familiariser avec la réalisation d’un interpréteur pour un langage informatique afin de comprendre les concepts de bases d’un compilateur.
Choix du forth
J’ai choisit le langage forth pour plusieurs raisons :
– interpréteur très petit (dictionnaire des core words très succin),
– portabilité du langage (très près du langage machine et pourtant por table sur n’importe quelle ”machine virtuelle” forth),
– simplicité du langage et donc de l’implémentation.
Portée
Ce document définit l’implémentation d’un système forth minimaliste ne répondant pas au format défini par l’ANS. Sa vocation est purement éducative bien que la plupart des éléments présentés peuvent servir de base a la création d’une implémentation complète du langage forth.
Inclusions :
– ce document décrit le langage ”Micro-forth”,
– ce document décrit l’implémentation d’un système Micro-forth capable de décrire le langage Micro-forth. Les deux noms seront confondus par la suite.
– ce document s’intéresse particulièrement au coeur du système forth et au mode d’execution.
Exclusions :
– ce document ne vise pas à implémenter le langage forth tel que définit par l’ANS. Pour plus d’informations, sur le langage forth, je vous dirige vers le site de l’ANS [1],
– pour toutes les exclusions du langage forth dans Micro-forth, je vous invite à vous rendre partie 3.1 pour une lire la simplification du langage.
Organisation du document
Ce document va présenter le cheminement pour parvenir à l’implémentation d’un système forth simplifiée. Le but est de montrer quels éléments du langage permettent d’expliquer les choix réalisés lors de l’implémentation.
Introduction au langage Forth
Si vous etes déjà familiarisé avec le forth, vous pouvez sauter cette partie.
Introduction
Le Forth est un langage avec une syntaxe assez déroutante mais très efficace. C’est un langage fonctionnel qui se base sur une pile de donnée pour passer les arguments aux fonctions. Ainsi, les fonctions sont représentés par des simples mots, tout comme les variables, les constantes ou les opérateurs de structures.
La Pile de données
La pile de données est une pile LIFO (Last Input First Output) qui stocke les paramètres d’appel d’un mot. Exemple :
2 3 + .
Les nombres 2 puis 3 sont empilés puis le mot ’+’ enlève ces deux nombres de la pile de données et place le résultat de l’opération au sommet de la pile.
Le plus effectue l’addition puis le ’.’ affiche le résultat. On utilise généralement une notation bien pratique pour décrire l’action d’un mot sur la pile :
Mot ( before — after )
Pour notre exemple précédent :
+ ( a b — a+b )
Il existe beaucoup de mots de manipulations de la pile. Citons parmi eux :
– DUP : duplique le sommet de la pile
– DROP : enlève l’élément au sommet de la pile
– OVER : duplique l’avant-dernier élément de la pile
– etc…
…..