Forth

Forth

Difícil

Instruções

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.

Dicas

Para completares este exercício, tens de criar o tipo de dados ForthState e implementar as seguintes funções:

  • emptyState devolve um ForthState vazio.
  • evalText avalia um Text de entrada e devolve o novo estado.
  • toList devolve a pilha atual como uma lista, ficando o elemento no topo da pilha na posição mais à direita (a última).

Vais encontrar uma declaração de dados de exemplo e as assinaturas de tipos já no lugar, mas cabe-te a ti definir as funções e criar um tipo de dados, um newtype ou um sinónimo de tipo que faça sentido.

Editar via GitHub A ligação abre numa nova janela ou separador
Haskell Exercism

Estás pronto para começar Forth?

Inscreve-te no Exercism para aprenderes e dominares Haskell com 107 exercícios, e mentoria humana real, tudo grátis.