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.
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.
Inscreve-te no Exercism para aprenderes e dominares Haskell com 107 exercícios, e mentoria humana real, tudo grátis.