Я пытаюсь пройти через Компиляторы: Backend to Frontend (и Back Back Front) Абдулазиз Гулум. Кажется, это сокращено от того, что можно ожидать от полного курса / семинара, поэтому я пытаюсь заполнить фрагменты самостоятельно.
Например, я пытался использовать его среду тестирования в R5RS-версии DrScheme, но, похоже, не нравится макрос:
src/ghuloum/tests/tests-driver.scm:6:4: read: illegal use of open square bracket
Я прочитал его вступительную статью о курсе, Инкрементальный подход к построению компилятора , который дает большой обзор используемых методов и упоминает пару схем с функциями, которые можно реализовать за «дополнительный кредит», но он не упоминает схему, которую он использует в курсе.
Обновление
Я все еще копаюсь в первоначальном вопросе (изучаю варианты, такие как «Пети Схема», предложенный Эли ниже), но нашел интересную ссылку, касающуюся работы Голума, поэтому я включил ее здесь.
[Схема Икаруса] (http://en.wikipedia.org/wiki/Ikarus_(Scheme_implementation)) - это фактическая реализация идей Гулума, и, похоже, это было частью его кандидатской работы. Предполагается, что это одна из первых реализаций R6RS. I ' Я пытаюсь установить Ikarus сейчас, но скрипт настройки не хочет распознавать установку моей системы libgmp.so , поэтому мои проблемы до сих пор не решены.
* * Пример тысячи двадцать-шести * 1 028 *
Кажется, что следующий пример работает в 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")
)
Попытка заменить директиву require схемой # lang приводит к сообщению об ошибке
foo.scm:7:3: expand: unbound identifier in module in: emit
из-за сбоя при загрузке tests-driver.scm . Попытка использовать # lang r6rs отключает REPL, который я действительно хотел бы использовать, поэтому я попытаюсь продолжить работу с Pretty Big.
Спасибо Эли Барзилаю за помощь пациенту.