2010-01-29 15 views
7

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.

+0

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

Respuesta

3

El lenguaje que usa es probablemente Chez Scheme. A pesar de todo, el lenguaje R5RS en PLT es una versión bastante estricta de R5RS, con extensiones como corchetes que arrojan errores, y puede obtener más millas utilizando el idioma predeterminado #lang scheme. (O, si eso falla, intente y vea si puede trabajar con Petit - la versión gratuita de Chez.)

+0

¿[] son ​​realmente ilegales en estricto R5RS? Pensé que solo se especificaban como comportamientos idénticos a(). (Más tarde) Sí, la sección 7.2 no hace mención de [], just().Entonces supongo que son ilegales. –

+0

Sí, siempre se reservaron para una "extensión futura", y se hicieron para ser lo mismo que "()" en R6RS. En cualquier caso, varios esquemas tienen tal extensión, pero la solicitud popular del lenguaje PLT R5RS fue para hacerlo muy estricto. –

+0

Eli, gracias por la recomendación. Estoy explorando Petite Scheme, aunque tengo problemas de biblioteca con mi Linux. Tal vez tenga mejor suerte con mi Mac en casa. ¿Alguien ha instalado con éxito Ikarus? Supongo, originado con el Sr. Ghuloum, que tolera []. –

1

Puede ver las instrucciones de configuración para ejecutarlo here en Ubuntu x86.

La descarga de instalación para Petite Scheme es here.