【问题标题】:What Scheme Does Ghuloum Use?Ghuloum 使用什么方案?
【发布时间】:2011-01-11 00:47:26
【问题描述】:

我正在努力通过 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

我已经阅读了他关于课程的介绍性论文An Incremental Approach to Compiler Construction,它对所使用的技术进行了很好的概述,并提到了一些可能想要实现“额外学分”的方案,但他没有'不要提及他在课程中使用的方案。

更新

我仍在深入研究最初的问题(调查以下 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")
  )

尝试将 require 指令替换为 #lang scheme 会导致错误消息

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

这似乎是由于未能加载 tests-driver.scm。尝试使用 #lang r6rs 会禁用我非常想使用的 REPL,因此我将尝试继续使用 Pretty Big。

感谢 Eli Barzilay 的耐心帮助。

【问题讨论】:

  • 另外,新版本的 Chez Scheme 可能会破坏一些东西,所以即使你使用 Chez Scheme,涉及宏和模块的旧东西也可能无法正常工作。

标签: scheme racket


【解决方案1】:

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

Petite Scheme 的安装下载地址为here

【讨论】:

  • 我同意,我已经使用带有 Petite Chez Scheme 的 github 存储库来完成教程,并且测试工作只需很少的修改。
【解决方案2】:

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

【讨论】:

  • 在严格的 R5RS 中 [] 真的是非法的吗?我认为它们只是被指定为与 () 的行为相同。 (后来)是的,第 7.2 节没有提到 [],只是 ()。所以我猜他们是非法的。
  • 是的,它们总是为“未来扩展”保留,并且与 R6RS 中的“()”相同。无论如何,有几个方案都有这样的扩展,但对 PLT R5RS 语言的普遍要求是使其非常严格。
  • Eli,感谢您的推荐。我正在探索 Petite Scheme,尽管我的 Linux 机器存在库问题。也许我在家里的 Mac 会有更好的运气。有人成功安装了Ikarus吗?我认为,源于 Ghuloum 先生,它可以容忍 []。
  • 嗯,是的——使用 Ikarus 可能会更好,但不一定。 (IIRC,他在那之后不久就开始研究 Ikarus。) 至于 []s,它显然会处理它们,因为它是 R6RS。但是,如果您对此感到困惑,那么为什么不尝试 PLT,因为您已经安装了它,而且 []s 是它的 自然 工作模式...
  • 我刚刚在我的家用机器上升级到 PLT 2.4.2(早期版本是 2.1.x),并尝试切换到 Pretty Big:(需要 lang/plt-pretty-big);因为 Module 和 R5RS 的括号都有问题,而且它的表现似乎更好。但是,R6RS 没有菜单选择。
猜你喜欢
  • 2011-01-04
  • 2011-10-12
  • 2016-10-23
  • 1970-01-01
  • 2023-04-02
  • 2012-11-26
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多