Implementa un valutatore per un sottoinsieme molto semplice di Forth.
Forth è un linguaggio di programmazione basato sullo stack. Implementa un valutatore di base per un piccolo sottoinsieme di Forth.
Il valutatore deve supportare le seguenti parole:
+, -, *, / (aritmetica con numeri interi)DUP, DROP, SWAP, OVER (manipolazione dello stack)Il valutatore deve anche supportare la definizione di nuove parole usando la sintassi abituale: : word-name definition ;.
Per mantenere le cose semplici, l'unico tipo di dato che devi supportare sono i numeri interi con segno di almeno 16 bit.
Per la sintassi, usa le seguenti regole: un numero è una sequenza di una o più cifre (ASCII), una parola è una sequenza di una o più lettere, cifre, simboli o segni di punteggiatura che non sia un numero. (Probabilmente Forth usa regole leggermente diverse, ma queste sono abbastanza vicine.)
Le parole non distinguono maiuscole e minuscole.
In Forth le funzioni si chiamano words e operano su uno stack di dati.
Ogni parola prende i suoi parametri dallo stack e restituisce i suoi risultati sullo stack.
La documentazione di Forth contiene sempre lo stato dello stack di dati prima e dopo l'esecuzione della parola, in questa forma: ( p1 p2 ... pN --- r1 r2 ... rN ).
I valori da p1 a pN rappresentano i parametri della parola sullo stack prima della chiamata (lo stack può contenere altri dati più in alto, non rappresentati qui) e i valori da r1 a rN rappresentano i valori restituiti dalla parola sullo stack dopo la chiamata.
Il separatore --- distingue lo stato dello stack prima e dopo l'esecuzione della parola.
Le parole da implementare sono definite come segue:
| parola | stato dello stack | descrizione |
|---|---|---|
+ |
( a b --- sum ) |
sum = a + b |
- |
( a b --- diff ) |
diff = a - b |
* |
( a b --- prod ) |
prod = a * b |
/ |
( a b --- quot ) |
quot = a / b |
dup |
( a --- a a ) |
duplica il valore in cima allo stack |
drop |
( a --- ) |
elimina il valore in cima allo stack |
swap |
( a b --- b a ) |
scambia i due valori in cima allo stack |
over |
( a b c --- a b c b ) |
copia il 2° valore in cima allo stack |
Se vuoi provare un interprete Forth online o saperne di più sulle parole da implementare, dai un'occhiata a Easy Forth (in particolare le sezioni Adding Some Numbers, Defining Words e Stack Manipulation).
Iscriviti a Exercism per imparare e padroneggiare Odin con 73 esercizi e il mentoring di persone reali, tutto gratis.