- Escaneador: Caracteres a tokens.
- Reconocedor: Tokens a AST.
- Generador: AST a código intermedio (o máquina).
- Ejecución: Código intermedio (o máquina) a valores de resultado.
Llamaremos valor a los posibles resultados de la evaluación de cierto código (código=AST). En principio, sólo podremos evaluar el código aunque existen valores que son código y se evalúan a ellos mismos: los literales como el entero 3 o la cadena "hola". Las celdas de valor entero serán del tipo INT_VAL y las cadenas STRING_VAL.
Es probable que necesitemos alguna celda especial de gestión del propio intérprete y que no será ni código ni valor (por ejemplo, una celda sin usar UNUSED). También (y coincidiendo con el LISP) tomaremos el constructor de lista (CONS_CTOR) como código y valor, aunque no es literal ya que lo evaluaremos. Así que, por ahora lo que tendría sería la siguiente clasificación de tipos de celdas.
enum CELL_TYPE { UNUSED, //Literals INT_VAL, STRING_VAL, //Value constructors //Code constructors //Value and code constructors CONS_CTOR, };
Para terminar de rellenar esta lista de tipos de celda necesitamos saber cómo construir código y eso requiere conocer la sintaxis. Por eso la siguiente entrada de esta serie se dedicará a elegir una sintaxis para nuestro lenguaje script.
0 comentarios:
Publicar un comentario