Forth

Forth

Difícil

Instrucciones

Implementa un evaluador para un subconjunto muy simple de Forth.

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

Tu evaluador debe admitir las siguientes palabras:

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

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

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

Debes usar las siguientes reglas para la sintaxis: 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 sea un número. (Es probable que Forth use reglas un poco diferentes, pero esto se acerca lo suficiente).

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

Implementación

En Forth, las funciones se llaman words: operan sobre una pila de datos. Cada palabra toma sus parámetros de la pila y devuelve su resultado en la pila.

La documentación de Forth siempre incluye el estado de la pila de datos antes y después de que se ejecute la palabra, de la siguiente manera: ( p1 p2 ... pN --- r1 r2 ... rN ). Los valores p1 a pN representan los parámetros de la palabra que están en la pila antes de la llamada (la pila puede tener datos adicionales más arriba, que no se representan aquí) y los valores r1 a rN representan los valores de retorno de la palabra que quedan en la pila después de la llamada. El separador --- distingue el estado de la pila antes y después de la ejecución de la palabra.

Las palabras que hay que implementar se definen así:

  • ToS significa Top of Stack, la cima de la pila
  • La cima de la pila se representa como el valor que está más a la derecha
palabra estado de la pila descripción
+ ( 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 el valor que está en la cima de la pila
drop ( a --- ) elimina el valor que está en la cima de la pila
swap ( a b --- b a ) intercambia los dos valores que están en la cima de la pila
over ( a b c --- a b c b ) copia el segundo valor a la cima de la pila

Si quieres jugar con un intérprete de Forth en línea o aprender más sobre las palabras que hay que implementar, prueba Easy Forth (en concreto, las secciones Adding Some Numbers, Defining Words y Stack Manipulation).

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Odin Exercism

¿Todo listo para empezar Forth?

Regístrate en Exercism para aprender y dominar Odin con 73 ejercicios y mentoría humana real, todo gratis.