Implemente um avaliador para um subconjunto muito simples de Forth.
Forth é uma linguagem de programação baseada em pilha. Implemente um avaliador bem básico para um pequeno subconjunto de Forth.
Seu avaliador precisa dar suporte às seguintes palavras:
+, -, *, / (aritmética de inteiros)DUP, DROP, SWAP, OVER (manipulação de pilha)Seu avaliador também precisa dar suporte à definição de novas palavras usando a sintaxe habitual: : word-name definition ;.
Para simplificar, o único tipo de dado que você precisa dar suporte é inteiros com sinal de pelo menos 16 bits.
Use as seguintes regras para a sintaxe: um número é uma sequência de um ou mais dígitos (ASCII), e uma palavra é uma sequência de uma ou mais letras, dígitos, símbolos ou sinais de pontuação que não seja um número. (O Forth provavelmente usa regras um pouco diferentes, mas isso é o suficientemente próximo.)
As palavras não diferenciam maiúsculas de minúsculas.
No Forth, as funções são chamadas de words e operam sobre uma pilha de dados.
Cada word pega seus parâmetros da pilha e retorna seus resultados na pilha.
A documentação do Forth sempre contém o estado da pilha de dados antes de a word ser executada e depois de a word ser executada da seguinte forma ( p1 p2 ... pN --- r1 r2 ... rN ).
Os valores p1 a pN representam os parâmetros da word na pilha antes da chamada (a pilha pode ter dados adicionais mais acima, não representados aqui) e os valores r1 a rN representam os valores de retorno da word na pilha depois da chamada.
O separador --- distingue o estado da pilha antes e depois da execução da word.
As words a serem implementadas são definidas assim:
| word | 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 você quiser brincar com um intérprete de Forth online ou aprender mais sobre as words a serem implementadas, experimente o Easy Forth (em especial as seções Adding Some Numbers, Defining Words e Stack Manipulation).
Crie sua conta no Exercism para aprender e dominar Odin com 73 exercícios e mentoria humana de verdade, tudo de graça.