Forth

Forth

Media

Instrucciones

Implementa un evaluador para un subconjunto muy sencillo de Forth.

Forth es un lenguaje de programación basado en una pila. Implementa un evaluador muy básico para un pequeño subconjunto de Forth.

Tu evaluador tiene que admitir las siguientes palabras:

  • +, -, *, / (aritmética de enteros)
  • DUP, DROP, SWAP, OVER (manipulación de la pila)

Tu evaluador también tiene que admitir la definición de nuevas palabras con la sintaxis habitual: : word-name definition ;.

Para simplificar, el único tipo de datos que necesitas admitir son los enteros con signo de al menos 16 bits.

Para la sintaxis, debes usar las siguientes reglas: un número es una secuencia de uno o más dígitos (ASCII), y una palabra es una secuencia de una o más letras, dígitos, símbolos o signos de puntuación que no es un número. (Es probable que Forth use reglas ligeramente distintas, pero esto se acerca bastante.)

Las palabras no distinguen entre mayúsculas y minúsculas.

Personalizar y lanzar excepciones

A veces es necesario tanto personalizar excepciones como lanzarlas con raise en tu código. Cuando lo hagas, incluye siempre un mensaje de error significativo que indique cuál es el origen del error. Esto hace que tu código sea más legible y ayuda enormemente con el debug.

Las excepciones personalizadas se pueden crear mediante nuevas clases de excepción (consulta classes para más detalles), que normalmente son subclases de Exception.

En los casos en los que sepas que el origen del error será una derivada de un tipo de excepción concreto, puedes optar por heredar de uno de los built in error types que hay bajo la clase Exception. Cuando lances el error, sigue incluyendo un mensaje significativo.

Este ejercicio en concreto requiere que crees una excepción personalizada que se lance/«se arroje» cuando la pila no esté suficientemente llena. Los tests solo pasarán si personalizas una excepción adecuada, lanzas esa excepción con raise e incluyes los mensajes de error adecuados.

# 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")

Además, este ejercicio requiere que lances varias built-in exceptions con mensajes de error. Para lanzar una built-in exception con un mensaje, escribe el mensaje como argumento del 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 en GitHub El enlace se abre en una ventana o pestaña nueva
Python Exercism

¿Listo para empezar Forth?

Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.