8

我正在尝试通过 Abdulaziz Ghuloum 编写的Compilers: Backend to Frontend (and Back to Front Again) 。它似乎是人们对完整课程/研讨会的期望的缩写,所以我正在尝试自己填写这些内容。

例如,我尝试在 DrScheme 的 R5RS 风格中使用他的测试框架,但它似乎不喜欢宏的东西:

src/ghuloum/tests/tests-driver.scm:6:4: read: illegal use of open square bracket

我已经阅读了他在课程上的介绍性论文《编译器构造的增量方法》,它对所使用的技术进行了很好的概述,并提到了一些可能想要实现“额外学分”的方案,但他没有不要提及他在课程中使用的方案。

更新

我仍在深入研究最初的问题(调查以下 Eli 建议的 Petit Scheme 等选项),但发现了一个与 Gholoum 的工作相关的有趣链接,因此我将其包括在此处。

[Ikarus Scheme]( http://en.wikipedia.org/wiki/Ikarus_(Scheme_implementation))是 Ghuloum 想法的实际实现,并且似乎是他的博士学位的一部分。工作。它应该是 R6RS 的首批实现之一。我现在正在尝试安装Ikarus,但配置脚本不想识别我的系统安装的libgmp.so,所以我的问题仍未解决。

例子

以下示例似乎适用于在 DrEd 中使用 Pretty Big 运行的 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")
  )

尝试用#lang 方案替换require指令会导致错误消息

foo.scm:7:3: expand: unbound identifier in module in: emit

这似乎是由于未能加载tests-driver.scm。尝试使用#lang r6rs会禁用 REPL,我真的很想使用它,所以我将尝试继续使用 Pretty Big。

感谢 Eli Barzilay 的耐心帮助。

4

2 回答 2

3

他使用的语言很可能是 Chez Scheme。无论如何,PLT 中的 R5RS 语言是 R5RS 的一个非常严格的版本,带有方括号之类的扩展会引发错误——使用默认#lang scheme语言可能会获得更多的里程。(或者,如果失败了,试试看你是否可以使用 Petit - Chez 的免费版本。)

于 2010-01-29T21:42:23.103 回答
2

您可以在此处查看在 Ubuntu x86 上运行它的设置说明。

Petite Scheme 的安装下载在这里

于 2014-08-02T13:52:48.097 回答