Te puedo dar una visión general de cómo funciona mi intérprete, tal vez se le puede dar una idea de lo general. Aunque la respuesta es bastante tarde, espero que esto pueda ayudar a alguien más, que ha llegado a este hilo y quiere una idea general.
- Para cada línea de esquema ingresada, se crea un objeto Command. Si el comando es parcial, se almacena su nivel de jerarquía (número de corchetes remanentes restantes para completar la expresión). Si el comando está completo, se crea un objeto de expresión y los evaluadores se activan en este objeto.
- Hay 4 tipos de clases evaluador definidos, cada uno derivados de la Evaluador clase base
a) Define_Evaluator: para definir estados
b) Funcall_Evaluator: para el procesamiento de otras funciones definidas por el usuario
c) Read_Evaluator: para leer una expresión y convertirla en un objeto de esquema
d) Print_Evaluator: imprime el objeto según el tipo de objeto.
e) Eval_Evaluator: realiza el procesamiento real de la expresión.
3 .-> Primero, cada expresión se lee usando el Evaluador de Lectura que creará un objeto de esquema fuera de la expresión. Las expresiones anidadas se calculan recursivamente hasta que la expresión se completa.
-> A continuación, se ejecuta el Eval_Evaluator que procesa el objeto de expresión de esquema formado en el primer paso. esto sucede como
a) si la expresión a evaluar es un símbolo. Devuelve su valor Por lo tanto, la variable blk devolverá el objeto para ese bloque.
b) si la expresión a evaluar es una lista. Imprima la lista.
c) si la expresión que se va a evaluar es una función. Busque la definición de la función que devolverá la evaluación utilizando Funcall_Evaluator.
-> Por último, el evaluador de impresión se activa para imprimir el resultado, esta impresión dependerá del tipo de expresión de salida.
responsabilidad: Esta es la forma en que funciona mi intérprete, no tiene que ser de esa manera.
Después de leer SICP, me parece que obtendrías más de escribir tu intérprete en Scheme (o algún otro dialecto Lisp - Me gusta Clojure) y haciendo algunos de los ejercicios que si no escribes el intérprete en C. – mwd
¿Qué tan lejos estás de SICP? Escribirá un intérprete de Scheme (en realidad más de uno) y un compilador en el transcurso de la lectura de los capítulos 4 y 5. Si termina el libro, encontrará lo que busca: el intérprete metacircular (Scheme in Scheme) está bellamente corto. – spacemanaki