2010-01-29 3 views
7

Sto cercando di farmi strada attraverso Compilers: Backend to Frontend (and Back to Front Again) di Abdulaziz Ghuloum. Sembra abbreviato da quello che ci si aspetterebbe in un corso completo/seminario, quindi sto cercando di riempire i pezzi da solo.Quale schema utilizza Ghuloum?

Per esempio, ho cercato di usare il suo framework di test nel sapore R5RS di DrScheme, ma non sembra come la roba macro:

src/ghuloum/tests/tests-driver.scm:6:4: read: illegal use of open square bracket 

Ho letto il suo articolo sul intro Ovviamente, An Incremental Approach to Compiler Construction, che offre una grande panoramica delle tecniche utilizzate e menziona un paio di Schemi con caratteristiche che si potrebbero voler implementare per "credito extra", ma non menziona lo Schema che usa nel corso.

Aggiornamento

sto ancora scavando nella domanda iniziale (opzioni come Petit Schema suggerite da Eli sotto indagine), ma ha trovato un link interessante relativa al lavoro di Gholoum, quindi sono inclusi qui.

[Schema Ikarus] (http://en.wikipedia.org/wiki/Ikarus_(Scheme_implementation)) è l'effettiva implementazione delle idee di Ghuloum e sembra aver fatto parte del suo lavoro di dottorato. Dovrebbe essere una delle prime implementazioni di R6RS. Sto provando ad installare Ikarus ora, ma lo script di configurazione non vuole riconoscere il mio sistema di installazione di libgmp.so, così i miei problemi sono ancora irrisolti.

esempio

l'esempio seguente sembra funzionare in PLT 2.4 .2 eseguito in DrEd utilizzando il 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") 
) 

Il tentativo di sostituire il richiedono direttiva con schema #lang risultati nel messaggio di errore

foo.scm:7:3: expand: unbound identifier in module in: emit 

che sembra essere dovuto ad un guasto per caricare test-driver.scm. Tentativo di utilizzare #lang r6rs disattiva REPL, che mi piacerebbe davvero utilizzare, quindi cercherò di continuare con Pretty Big.

Grazie a Eli Barzilay per il suo aiuto paziente.

+0

Inoltre, le nuove versioni di Chez Scheme possono rompere le cose, quindi anche se si utilizza Chez Scheme, le vecchie cose che coinvolgono macro e moduli potrebbero non funzionare. – erjiang

risposta

3

Il linguaggio che usa è molto probabilmente Chez Scheme. Indipendentemente da ciò, il linguaggio R5RS in PLT è una versione piuttosto rigida di R5RS, con estensioni come parentesi quadre che generano errori - e si può ottenere più chilometri utilizzando la lingua predefinita #lang scheme. (Oppure, se fallisce, prova a vedere se riesci a lavorare con Petit - la versione gratuita di Chez.)

+0

Sono [] veramente illegali nella stretta R5RS? Ho pensato che fossero specificati solo come comportarsi in modo identico a(). (successivo) Sì, la sezione 7.2 non fa menzione di [], solo().Quindi immagino che siano illegali. –

+0

Sì, erano sempre riservati per una "futura estensione" e fatti essere uguali a "()" s in R6RS. In ogni caso, diversi schemi hanno una tale estensione, ma la richiesta popolare per il linguaggio PLT R5RS era di renderlo molto severo. –

+0

Eli, grazie per la raccomandazione. Sto esplorando il Petite Scheme, anche se ho problemi di libreria con il mio box Linux. Forse avrò più fortuna con il mio Mac a casa. Qualcuno ha installato con successo Ikarus? Presumo, originario del signor Ghuloum, che tolleri []. –

1

Puoi vedere le istruzioni di configurazione per eseguirlo susu Ubuntu x86.

Il download di installazione per Schema Petite è here.