Какую схему использует Гулум? - PullRequest
7 голосов
/ 30 января 2010

Я пытаюсь пройти через Компиляторы: 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.

Спасибо Эли Барзилаю за помощь пациенту.

Ответы [ 2 ]

3 голосов
/ 30 января 2010

Язык, который он использует, скорее всего, Chez Scheme. Несмотря на это, язык R5RS в PLT является довольно строгой версией R5RS, с такими расширениями, как ошибки в квадратных скобках - и вы можете получить больше пробега, используя язык по умолчанию #lang scheme. (Или, если это не помогло, попробуйте и посмотрите, можете ли вы работать с Petit - бесплатной версией Chez.)

1 голос
/ 02 августа 2014

Инструкции по настройке для запуска вы можете найти здесь в Ubuntu x86.

Установочная загрузка для Petite Scheme здесь .

...