Forth

Forth

Difícil

Instruções

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.

Implementação

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:

  • ToS é a sigla de Top of Stack
  • O topo da pilha é representado como o valor mais à direita
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).

Editar via GitHub O link abre em uma nova janela ou aba
Odin Exercism

Tudo pronto para começar Forth?

Crie sua conta no Exercism para aprender e dominar Odin com 73 exercícios e mentoria humana de verdade, tudo de graça.