2010-01-29 2 views
7

Я пытаюсь проделать свой путь через 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.

Моя благодарность Эли Барзилай за помощь пациента.

+0

Кроме того, новые версии Chez Scheme могут нарушить работу, поэтому, даже если вы используете Chez Scheme, старые вещи, связанные с макросами и модулями, могут не работать. – erjiang

ответ

3

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

+0

Действительно ли [] действительно незаконны в строгом R5RS? Я думал, что они были просто указаны как поведение одинаково с(). (Позже) В разделе 7.2 не упоминается [], just().Поэтому я думаю, что они незаконны. –

+0

Да, они всегда были зарезервированы для «будущего расширения» и были сделаны такими же, как «() в R6RS. В любом случае несколько схем имеют такое расширение, но популярный запрос на язык PLT R5RS должен был сделать его очень строгим. –

+0

Eli, спасибо за рекомендацию. Я изучаю Petite Scheme, хотя у меня проблемы с библиотекой в ​​моем ящике Linux. Может быть, мне повезет с моим Mac дома. Кто-нибудь успешно установил Ikarus? Я полагаю, исходя из г-на Гулума, что он терпит []. –

1

Вы можете увидеть инструкции по его установке here на Ubuntu x86.

Загрузка программы для Petite Scheme here.

Смежные вопросы