The Forth Language #3

Prima di entrare nel dettaglio su come é formata una word vediamo alcune dei costrutti principali del linguaggio. Come scritto nella prima parte Forth fa un utilizzo intensivo dello stack, cioè di una struttura dati LIFO. Possiamo aggiungere elementi allo stack oppure possiamo toglierli, sempre dallo stesso punto. Lo stack funziona come una pila di piatti, possiamo aggiungere piatti in cima alla pila oppure possiamo toglierli, nell’ordine inverso a quello con cui li abbiamo aggiunti. Forth è un linguaggio interpretato, quindi dopo avere lanciato l’interprete ci troviamo di fronte ad un prompt, quello che viene digitato seguito da invio è un comando.

Se digitiamo un numero, per esempio 123, questo viene posto in cima allo stack, se digitiamo un altro numero, per esempio 456, questo prende il posto di 123 in cima allo stack e 123 passa sotto.

123 —

456 123 —

il comando . (punto) estrai il valore in cima allo stack e lo visualizza, se usiamo questo comando dopo i comandi visti prima, la prima volta apparirà 456, la seconda volta apparirà 123, utilizzando il comando una terza volta comparirà un messaggio di errore che ci comunica che lo stack è vuoto!

A cosa serve lo stack? E’ semplicemente la memoria di transito utilizzata per fare i calcoli ma anche per gestire il passaggio di parametri alle funzioni e il ritorno dei valori dalle stesse, in pratica sostituisce i registri di un microprocessore.

Per esempio voglio sommare i valori 123 e 456,

123 [invio]

456 [invio]

+ [invio]

con questi 3 comandi ho inserito i due valori 123 e 456 sullo stack e poi con il comando + ho sommato i due valori più in alto sostituendoli con il risultato dell’operazione.

Per visualizzare il risultato possiamo usare il comando .

Il linguaggio Forth mette a disposizione svariati comandi aritmetici + – * / ed altri che vedremo. Il meccanismo dello stack consente di eseguire il calcolo di qualsiasi espressione senza utilizzare le parentesi, ogni operazione coinvolge uno o due valori presenti sullo stack, e l’ordine di valutazione è dato dalla “profondità” dello stack stesso.

Facciamo un esempio: se devo calcolare l’espressione (3 + 5) * 8 in Forth deve semplicemente scrivere

3 5 + 8 *

cioè l’operatore è sempre postfisso rispetto agli operandi. Questa modalità di esprimere i calcoli si chiama RPN (Reverse Polish Notation), in onore di Jan Łukasiewicz, l’inventore della notazione polacca (non di quella inversa, che fu introdotta dall’australiano Charles Hamblin)

Esistono poi dei comandi per manipolare il contenuto della catasta, i più usati sono DUP, DROP e SWAP.

Il comando DUP duplica l’elemento in cima alla catasta.

Il comando DROP elimina l’elemento in cima alla catasta.

Il comando SWAP scambia i due elementi in cima alla catasta.

Per esempio se devo calcolare il quadrato di 9 è sufficiente il comando

9 DUP *

in cui DUP duplica il valore 9 e * moltiplica i due valori in cima alla catasta, cioè calcola 9*9

 

… Segue ….

Lascia un commento