Abdulaziz Ghuloum による Compilers: Backend to Frontend (および Back to Front Again) を試しています。フルコース/セミナーで期待されるものから省略されているように見えるので、私は自分で部分を埋めようとしています.
たとえば、DrScheme の R5RS フレーバーで彼のテスト フレームワークを使用しようとしましたが、マクロが気に入らないようです。
src/ghuloum/tests/tests-driver.scm:6:4: read: illegal use of open square bracket
私はコースに関する彼の紹介論文An Incremental Approach to Compiler Constructionを読みました。これは、使用されている手法の概要を示しており、「追加の功績」のために実装したい機能を備えたいくつかのスキームについて言及していますが、彼はそうではありません。彼がコースで使用するスキームについては言及しないでください。
アップデート
私はまだ元の質問を掘り下げています(以下のEliによって提案されたPetit Schemeなどのオプションを調査しています)が、Gholoumの仕事に関連する興味深いリンクを見つけたので、ここに含めます.
[Ikarus スキーム]( http://en.wikipedia.org/wiki/Ikarus_(Scheme_implementation))は Ghuloum のアイデアの実際の実装であり、彼の博士号の一部であったようです。仕事。これは、R6RS の最初の実装の 1 つになるはずです。今Ikarusをインストールしようとしていますが、configure スクリプトは私のシステムのlibgmp.soのインストールを認識したくないので、私の問題はまだ解決されていません。
例
次の例は、Pretty Big を使用して DrEd で実行されている PLT 2.4.2 で動作するようです。
(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 を続けようと思います。
Eli Barzilay の患者の助けに感謝します。