我正在努力工作
Compilers: Backend to Frontend (and Back to Front Again)
作者:Abdulaziz Ghulum。它似乎是从一个完整的课程/研讨会的预期中缩写而来,所以我正试着自己来填写这些部分。
例如,我曾尝试在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方案等选项),但发现了一个与Gholoum的工作相关的有趣链接,因此我将其包含在这里。
[伊卡洛斯计划](
http://en.wikipedia.org/wiki/Ikarus_(Scheme_implementation))
是古鲁姆思想的实际实现,似乎是他的博士工作的一部分。它应该是R6R的第一个实现之一,我正在尝试安装
Ikarus
现在,但是配置脚本不想识别系统安装的
因此,LBGMP.
所以我的问题还没有解决。
例子
下面的示例似乎适用于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")
)
正在尝试替换
要求
指令与
γ郎方案
导致错误消息
foo.scm:7:3: expand: unbound identifier in module in: emit
似乎是由于加载失败
测试驱动程序.scm
. 正在尝试使用
朗朗R6RS
禁用repl,这是我真正想使用的,所以我将尝试继续使用相当大的。
我感谢埃利·巴兹利对病人的帮助。