Académique Documents
Professionnel Documents
Culture Documents
22 Forth
22 Forth
Le langage Forth
1 / 45
Historique
Cr par Charles H. Moore en 1968 Noyau extrmement petit (typiquement quelques Ko) Pas de cycle diter/compiler/excuter/dbugger
Le langage Forth
2 / 45
Test interactif
Les mots peuvent tre appels de manire interactive ds quils sont dnis Les mots : et ; commencent et terminent une dnition partir des mots saisir, tourner et lacher, on peut dnir le mot deplacer : : deplacer saisir tourner lacher ; Le mot deplacer est insr dans le dictionnaire. Lorsque lutilisateur tape ce mot, il est recherch dans le dictionnaire et soit appel (mode interprt) soit compil (lors de la dnition dun nouveau mot)
Le langage Forth
4 / 45
Le systme Forth
Mlange un interprteur et un compilateur Chaque nouveau mot (quivalent dune fonction en Forth) est compil immdiatement et devient instantanment disponible Les mots sont spars par un blanc ou un retour la ligne Un dictionnaire contient ladresse du code de chaque mot Une pile de donnes sert passer les paramtres entre les mots
Le langage Forth
5 / 45
Utilisation de la pile
En Forth, chaque mot manipule les objets au sommet de la pile (de donnes) contenant des entiers. Certaines oprations manipulent la pile.
4 4 4 8 12
12 4
12
dup
12
12
swap
drop
dup *
64
4 -
60
Le langage Forth
7 / 45
Exemples
Dnition dun mot carre qui lve au carr : carre dup * ; Dnition dun mot cube qui lve au cube : cube dup carre * ; La phrase suivante ache 27 (le mot . ache (en le consommant) lentier au sommet de la pile) 3 cube . Note : seul le haut de la pile est important
Le langage Forth
9 / 45
Modes
Le langage Forth
10 / 45
Changement de mode
: toto dmarre la gnration du mot toto ; termine la compilation du mot courant : carre dup * ; gnre en mmoire, une adresse libre A, lquivalent de call dup call mult ret et rajoute une entre dans le dictionnaire pour carre pointant sur ladresse A.
Le langage Forth
12 / 45
Avantages du modle
Parseur simplissime (blanc ou retour-chariot) Interprteur simplissime Compilateur simplissime (un systme Forth complet tient typiquement en quelques Ko) Le systme est rexif Code trs compact
La pile de donnes permet de ne pas grer le passage de paramtres Un mot machine par mot appel
Le langage Forth
13 / 45
Commentaires
\ demande au parseur de vider le buer dentre drop dup \ Commentaire ( cherche le caractre ) dans le ux dentre et positionne le parseur aprs drop ( supprime ) dup ( duplique ) On indique souvent leet sur la pile de chaque mot dans des commentaires : calcule ( n -- x ) ... ;
Le langage Forth
15 / 45
Structure de test
if . . .then
if teste le sommet de la pile (et le consomme), et saute aprs le then sil vaut zro Exemple : test if agir then Le sens de then est celui de puis ensuite ( loppos dautres langages ou il signie alors )
if . . .else . . .then
Si le test est ngatif, if saute aprs le else Exemple : test if agir else dormir then
Le langage Forth
17 / 45
Boucles
do . . .loop
Les bornes (suprieure non inclues puis infrieure) sont places sur la pile i permet de rcuprer lindice de boucle le plus interne Exemple : 10 0 do quelquechose loop
do . . .+loop permet de prciser lincrment avant +loop ?do . . .loop permet de ne pas excuter une boucle si les deux bornes sont gales
Le langage Forth
19 / 45
Boucles (2)
begin . . .again
Boucle innie Sortie possible par exit (sort du mot courant)
Le langage Forth
21 / 45
Exemple : PGCD
Algorithme dEuclide pour calculer le PGCD (tuck duplique le sommet de la pile aprs le deuxime lement, par exemple 1 2 3 tuck donne 1 3 2 3) :
: pgcd (a b -- n ) (avec a >= b) begin ( a b ) dup ( a b b ) while ( a b ) tuck ( b a b ) mod ( b (a mod b) ) -> ( a b ) repeat ( a b ) drop ( a ) ;
Le langage Forth
23 / 45
En vrai
Un programmeur Forth lcrirait plutt comme :
: pgcd ( a b -- n ) begin dup while tuck mod repeat drop ;
ou le factoriserait comme
: step ( a b -- b a%b ) tuck mod ; : pgcd ( a b -- n ) begin dup while step repeat drop ;
Manipulation
Le nombre doctets dun entier est appele la taille de cellule (par exemple 4 sur un systme 32 bits) Les mots @ et c@ lisent respectivement une cellule ou un mot ladresse se trouvant sur le sommet de la pile Les mots ! et c! crivent respectivement une cellule ou un mot ladresse se trouvant sur le sommet de la pile Les mots lshift, rshift, and, or, xor et invert permettent de manipuler les bits 5 2 lshift La variable base contient la base courante (de 2 36)
Le langage Forth
27 / 45
Test de priphriques
Les entres/sorties sont gnralement des adresses mmoire Supposons quun ensemble de 8 LEDs soient ladresse 0x1234 et quon souhaite les tester. On peut faire :
hex ff 1234 c! 0 1234 c! aa 1234 c! 55 1234 c! 1234 c@ invert 1234 c! \ \ \ \ \ \ 16 base ! Allume les 8 leds ^^c9teint les 8 leds Une sur deux Allume les autres Inverse les leds
Le langage Forth
29 / 45
hex : led@ ( -- n ) 1234 c@ ; : led! ( n -- ) 1234 c! ; : masque ( n -- 1<<n ) 1 swap lshift ; : allume ( n -- ) masque led@ or led! ; : eteint ( n -- ) masque invert led@ and led! ; : inverse ( n -- ) masque led@ xor led! ; 0 allume 3 eteint 7 inverse \ Allume la led 0 \ Eteint la led 4 \ Inverse la led 7
Le langage Forth
31 / 45
Les blocs
Sur certains systmes sans chiers, des blocs sont utiliss Un bloc fait 1024 octets (16 lignes de 64 caractres) Les blocs encourage la factorisation Les blocs sont rarement utiliss lorsquun systme dexploitation est prsent
Le langage Forth
32 / 45
Elles sont reprsentes par deux cellules : adresse et longeur Le mot type permet dacher une chane. cr passe la ligne suivante. s" cr une chane allant jusquau " suivant. ." ache la chane allant jusquau " suivant. Exemple :
: hello ." Hello world!" cr ;
ou
: msg s" Hello world!" ; : hello msg type cr ;
Le langage Forth
34 / 45
: test s" hElLo WorLd!" 2dup to-upper type cr ; ( 2dup recopie les deux elements au sommet )
Le langage Forth
36 / 45
Forth est un standard international depuis 1994 Linventeur de Forth (Chuck Moore) sen plaint. Selon lui
cela alourdit le langage cela freine linnovation
Beaucoup de Forth ne sont pas conformes au standard (exemple : PicForth) Forth a maintenant de la couleur : ColorForth
Une couleur dnit le rle du mot : dnition, utilisation immdiate, compilation, la base dun nombre (dcimal ou hexadcimal) Plus de : et de immediate
Le langage Forth
38 / 45
Structures simplies
Sur les Forth de Chuck Moore, une partie des structures de contrle nexistent plus else est supprim : il sut de factoriser
: mot test if action1 else action2 then action3 ;
devient
: sous-mot test if action1 exit then action2 ; : mot sous-mot action3 ;
Le langage Forth
40 / 45
devient
: actions action recurse ; : mot xyz actions ;
devient
: mot action condition? if exit then recurse ;
Le langage Forth
42 / 45
Exemple en ColorForth
Bras articul : commande de pince en 0xABCD, commande de moteur en 0x8A00, capteur de position en 0x83FA serrer-pince 1 ABCD ! ; ouvrir-pince 0 ABCD ! ; droite 1 8A00 ! 0 8A00 ! ; position 83FA @ ; positionner dup position = if drop exit then droite positionner ; saisir 1 positionner serrer-pince ; tourner 5 positionner ; lacher ouvrir-pince ; deplacer saisir tourner lacher ;
Le langage Forth
43 / 45
En Forth classique
hex : serrer-pince 1 abcd ! ; : ouvrir-pince 0 abcd ! ; : droite 1 8a00 ! 0 8a00 ! ; : position 83fa @ ; : positionner begin dup position <> while droite repeat drop ; : saisir 1 positionner serrer-pince ; : tourner 5 positionner ; : lacher ouvrir-pince ; : deplacer saisir tourner lacher ;
Samuel Tardieu (ENST) Le langage Forth 45 / 45