Les vocabulaires en langage FORTH
publication: 26 février 2023 / mis à jour 25 mai 2023
Les vocabulaires
En FORTH, la notion de procédure et de fonction n'existe pas. Les instructions FORTH s'appellent des MOTS. A l'instar d'une langue traditionnelle, FORTH organise les mots qui le composent en VOCABULAIRES, ensemble de mots ayants un trait communs.
Programmer en FORTH consiste à enrichir un vocabulaire existant, ou à en définir un nouveau, relatif à l'application en cours de développement.
Liste des vocabulaires
Un vocabulaire est une liste ordonnée de mots, recherchés du plus récemment créé au moins récemment créé. L'ordre de recherche est une pile de vocabulaires. L'exécution du nom d'un vocabulaire remplace le haut de la pile d'ordre de recherche par ce vocabulaire.
Pour voir la liste des différents vocabulaires disponibles dans FORTH, on va utiliser le mot voclist:
internals voclist
Affiche:
registers internals graphics ansi editor streams tasks windows structures recognizers internalized internals FORTH ok -->
Le principal vocabulaire s'appelle FORTH. Tous les autres vocabulaires sont rattachés au vocabulaire FORTH.
Liste du contenu d'un vocabulaire
Pour voir le contenu d'un vocabulaire, on utilise le mot vlist en ayant préalablement sélectionné le vocabulaire adéquat:
graphics vlist
Sélectionne le vocabulaire graphics et affiche son contenu:
flip poll wait window heart vertical-flip viewport scale translate }g g{
screen>g box color pressed? pixel height width event last-char last-key
mouse-y mouse-x RIGHT-BUTTON MIDDLE-BUTTON LEFT-BUTTON FINISHED TYPED RELEASED
PRESSED MOTION EXPOSED RESIZED IDLE internals
La sélection d'un vocabulaire donne accès aux mots définis dans ce vocabulaire.
Par exemple, le mot voclist n'est pas accessible sans invoquer d'abord le vocabulaire internals.
Utilisation des mots d'un vocabulaire
Pour compiler un mot défini dans un autre vocabulaire que FORTH, il y a deux solutions. La première solution
consiste à appeler simplement ce vocabulaire avant de définir le mot qui va utiliser des mots de ce vocabulaire.
Chainage des vocabulaires
L'ordre de recherche d'un mot dans un vocabulaire peut être très important. En cas de mots ayant un même nom, on lève toute ambiguïté en maitrisant l'ordre de recherche dans les différents vocabulaires qui nous intéressent.
Avant de créer un chaînage de vocabulaires, on restreint l'ordre de recherche avec le mot only.
Créer un nouveau vocabulaire
Pour créer un nouveau vocabulaire, on utilise le mot-clé VOCABULARY:
VOCABULARY OUTILS
Ceci crée le vocabulaire OUTILS.
Pour que Forth cherche les mots dans ce nouveau dictionnaire, il suffit de taper son nom:
OUTILS
Désormais, l'interpréteur cherchera d'abord dans OUTILS, puis dans FORTH.
Pour que les nouveaux mots soient créés dans le vocabulaire OUTILS, on utilise le mot DEFINITIONS:
OUTILS DEFINITIONS
: TEST ( -- )
." Je suis dans OUTILS"
;
On vérifie la présence de notre mot TEST dans OUTILS:
outils vlist TEST
Pour arrêter d'ajouter des mots à OUTILS et revenir au dictionnaire de base:
FORTH DEFINITIONS
: TEST ( -- )
." Je suis dans FORTH"
;
Les vocabulaires ne sont faits seulement pour régler des problèmes de noms identiques.
Revenons sur le vocabulaire windows dans eForth Windows:
page windows vlist
S'affiche immédiatement une quantité impressionnante de mots. Ces mots sont définis dans ce vocabulaire
windows pour éviter l'encombrement du vocabulaire FORTH de base.
Voici un cas pratique pour étendre ce vocabulaire windows:
only forth also windows windows definitions structures \ Appends one string to another z" lstrcatA" 2 Kernel32 lstrcatA ( lpString1 lpString2 -- lpString1|0 ) \ returns the system's time and date z" GetLocalTime" 1 Kernel32 GetLocalTime ( addr -- ) \ structure control for timeouts struct COMMTIMEOUTS i32 field ->ReadIntervalTimeout i32 field ->ReadTotalTimeoutMultiplier i32 field ->ReadTotalTimeoutConstant i32 field ->WriteTotalTimeoutMultiplier i32 field ->WriteTotalTimeoutConstant \ sets the time-out parameters for all read and write operations on a specified communications device z" SetCommTimeouts" 2 Kernel32 SetCommTimeouts ( hSerial timeouts -- fl ) only forth definitions
Expliquons les quatre premières lignes:
only forthrestreint d'abord la recheche au seul vocabulaire FORTHalso windowsrajoute windows dans l'ordre de recherche. Avec cette ligne, l'interpréteur commence par rechercher les mots dans le vocabulairewindowswindows definitionsindique que tous les mots qui vont être définis vont se rajouter à ceux déjà définis dans le vocabulairewindowsstructuresréjoute le vocabulairestructuresdans l'ordre de recherche
Ce petit morceau de code rajoute les mots suivants: lstrcatA GetLocalTime COMMTIMEOUTS ->ReadIntervalTimeout
->ReadTotalTimeoutMultiplier etc....
Legal: site web personnel sans commerce / personal site without seling
