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.
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