Я пытаюсь проделать свой путь через Compilers: Backend to Frontend (and Back to Front Again) от Abdulaziz Ghuloum. Кажется сокращенным от того, что можно было бы ожидать в полном курсе/семинаре, поэтому я сам пытаюсь заполнить его.Какая схема использует Ghuloum?
Например, я пытался использовать его рамки тестирования в R5RS вкусе DrScheme, но это, кажется, не нравится макросъемка материал:
src/ghuloum/tests/tests-driver.scm:6:4: read: illegal use of open square bracket
Я прочитал его вводную статью на Конечно, , который дает отличный обзор используемых методов и упоминает пару схем с функциями, которые можно реализовать для «дополнительного кредита», но он не упоминает Схему, которую он использует в ходе курса.
Update
Я все еще копаться в исходный вопрос (исследование вариантов, таких как Пети схеме, предложенные Eli ниже), но нашел интересную ссылку, относящуюся к работе Gholoum, поэтому я включаю его здесь.
[Ikarus Scheme] (http://en.wikipedia.org/wiki/Ikarus_(Scheme_implementation)) является фактической реализацией идей Гулума и, похоже, является частью его работы с Ph.D. Он должен быть одной из первых реализаций R6RS. Я пытаюсь установить Ikarus сейчас, но сценарий настройки не хочет признавать мою система устанавливает libgmp.so, так что мои проблемы все еще не решены.
Пример
следующий пример, кажется, работает в PLT 2.4 .2 работает в DrEd, используя 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")
)
Попытка заменить требуют директивы с схемы #lang результатов в сообщении об ошибке
foo.scm:7:3: expand: unbound identifier in module in: emit
, который, как представляется, из-за невозможности загрузить тесты-driver.scm. Попытка использования #lang r6rs отключает REPL, который я бы очень хотел использовать, поэтому я собираюсь продолжить работу с Pretty Big.
Моя благодарность Эли Барзилай за помощь пациента.
Кроме того, новые версии Chez Scheme могут нарушить работу, поэтому, даже если вы используете Chez Scheme, старые вещи, связанные с макросами и модулями, могут не работать. – erjiang