Forth

Forth

Difficile

Istruzioni

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.

Implementazione

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:

  • ToS sta per Top of Stack
  • La cima dello stack è rappresentata dal valore più a destra
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).

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Odin Exercism

Vuoi iniziare Forth?

Iscriviti a Exercism per imparare e padroneggiare Odin con 73 esercizi e il mentoring di persone reali, tutto gratis.