Forth

Forth

Médio

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.

Personalizar e lançar exceções

Às vezes é necessário tanto personalizar quanto raise exceções no seu código. Quando você faz isso, deve sempre incluir uma mensagem de erro significativa que indique qual é a origem do erro. Isso deixa o seu código mais legível e ajuda muito na depuração.

Exceções personalizadas podem ser criadas por meio de novas classes de exceção (veja classes para mais detalhes.) que normalmente são subclasses de Exception.

Em situações em que você sabe que a origem do erro será derivada de um certo tipo de exceção, você pode escolher herdar de um dos built in error types sob a classe Exception. Ao lançar o erro, você ainda deve incluir uma mensagem significativa.

Este exercício em particular exige que você crie uma exceção personalizada a ser lançada/"disparada" quando a pilha não estiver suficientemente preenchida. Os testes só vão passar se você personalizar uma exceção adequada, fizer raise dessa exceção e incluir mensagens de erro adequadas.

# subclassing the Exception to create a StackUnderflowError
class StackUnderflowError(Exception):
    """Exception raised when Stack is not full.
       message: explanation of the error.
    """
    def __init__(self, message):
        self.message = message

        
# raising a StackUnderflowError
raise StackUnderflowError("Insufficient number of items in stack")

Além disso, este exercício exige que você lance várias built-in exceptions com mensagens de erro. Para lançar uma built-in exception com uma mensagem, escreva a mensagem como argumento para o tipo exception:

# an example when division by zero is attempted.
raise ZeroDivisionError("divide by zero")

#an example when the operation is undefined.
raise ValueError("undefined operation")
Editar via GitHub O link abre em uma nova janela ou aba
Python Exercism

Tudo pronto para começar Forth?

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