Estoy tratando de abrirme camino a través de Compilers: Backend to Frontend (and Back to Front Again) por Abdulaziz Ghuloum. Parece abreviado de lo que uno esperaría en un curso/seminario completo, así que estoy tratando de completar las piezas yo mismo.¿Qué esquema usa Ghuloum?
Por ejemplo, me han tratado de usar su marco de pruebas en el sabor de R5RS DrScheme, pero no parece que les gusta la materia macro:
src/ghuloum/tests/tests-driver.scm:6:4: read: illegal use of open square bracket
He leído su artículo de introducción en el Por supuesto, An Incremental Approach to Compiler Construction, que ofrece una gran visión general de las técnicas utilizadas, y menciona un par de Esquemas con características que uno podría querer implementar para 'crédito extra', pero no menciona el Esquema que usa en el curso.
actualización
Todavía estoy cavando en la pregunta original (opciones como Petit esquema sugerido por Eli continuación investigación), pero encontró un enlace interesante en relación con la obra de Gholoum, así que estoy incluyendo aquí.
[Ikarus Scheme] (http://en.wikipedia.org/wiki/Ikarus_(Scheme_implementation))) es la implementación real de las ideas de Ghuloum, y parece haber sido parte de su trabajo de Ph.D. Se supone que es una de las primeras implementaciones de R6RS. Estoy tratando de instalar Ikarus ahora, pero el script de configuración no quiere reconocer de mi sistema de instalación de libgmp.so, por lo que mis problemas siguen sin resolverse.
ejemplo
el siguiente ejemplo se parece funcionar en 2.4 PLT .2 ejecutándose en DrEd con el Pretty Big
(require lang/plt-pretty-big)
(load "/Users/donaldwakefield/ghuloum/tests/tests-driver.scm")
(load "/Users/donaldwakefield/ghuloum/tests/tests-1.1-req.scm")
(define (emit-program x)
(unless (integer? x) (error "---"))
(emit " .text")
(emit " .globl scheme_entry")
(emit " .type scheme_entry, @function")
(emit "scheme_entry:")
(emit " movl $~s, %eax" x)
(emit " ret")
)
El intento de sustituir el requieren Directiva con esquema #lang resultados en el mensaje de error
foo.scm:7:3: expand: unbound identifier in module in: emit
que parece ser debido a un fallo en la carga pruebas-driver.scm. Intentar utilizar #lang r6rs deshabilita el REPL, que realmente me gustaría usar, así que voy a intentar continuar con Pretty Big.
Mi agradecimiento a Eli Barzilay por su ayuda paciente.
Además, las nuevas versiones de Chez Scheme pueden romper las cosas, por lo que incluso si usa Chez Scheme, las cosas viejas que involucran macros y módulos podrían no funcionar. – erjiang