Implementa um avaliador para um subconjunto muito simples de Forth.
Forth é uma linguagem de programação baseada em pilha. Implementa um avaliador muito básico para um pequeno subconjunto de Forth.
O teu avaliador tem de suportar as seguintes palavras:
+, -, *, / (aritmética de inteiros)DUP, DROP, SWAP, OVER (manipulação de pilha)O teu avaliador também tem de suportar a definição de novas palavras usando a sintaxe habitual: : word-name definition ;.
Para simplificar, o único tipo de dados que precisas de suportar é o dos inteiros com sinal de, pelo menos, 16 bits.
Deves usar as seguintes regras para a sintaxe: um número é uma sequência de um ou mais algarismos (ASCII), uma palavra é uma sequência de uma ou mais letras, algarismos, símbolos ou pontuação que não seja um número. (O Forth provavelmente usa regras ligeiramente diferentes, mas isto é suficientemente próximo.)
As palavras não distinguem maiúsculas de minúsculas.
Em Forth, as funções chamam-se words e operam sobre uma pilha de dados.
Cada palavra retira o(s) seu(s) parâmetro(s) da pilha e devolve o(s) seu(s) resultado(s) para a pilha.
A documentação de Forth indica sempre o estado da pilha de dados antes de a palavra ser executada e depois de a palavra ser executada da seguinte forma: ( p1 p2 ... pN --- r1 r2 ... rN ).
Os valores p1 a pN representam os parâmetros da palavra na pilha antes da chamada (a pilha pode ter dados adicionais mais acima, aqui não representados) e os valores r1 a rN representam os valores devolvidos pela palavra na pilha depois da chamada.
O separador --- distingue o estado da pilha antes e depois da execução da palavra.
As palavras a implementar são definidas da seguinte forma:
| palavra | estado da pilha | descrição |
|---|---|---|
+ |
( 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 o valor no ToS |
drop |
( a --- ) |
descarta o valor no ToS |
swap |
( a b --- b a ) |
troca os dois valores no ToS |
over |
( a b c --- a b c b ) |
copia o 2.º valor para o ToS |
Se quiseres brincar com um intérprete de Forth online ou saber mais sobre as palavras a implementar, dá uma vista de olhos ao Easy Forth (em particular às secções Adding Some Numbers, Defining Words e Stack Manipulation).
Inscreve-te no Exercism para aprenderes e dominares Odin com 73 exercícios, e mentoria humana real, tudo grátis.