Ghuloum使用什么方案?

我试图通过编译器:通过Abdulaziz Ghuloum后端到前端(并再次回到正面)。 它看起来可以从一个完整的课程/研讨会期望中缩写出来,所以我试图自己填写这些部分。

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

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

我已经阅读了关于该课程的一篇介绍性文章,“编译器构建的增量式方法”,它对所使用的技术进行了很好的概述,并提到了一些可能想要实现“额外功劳”的功能的方案,但他并没有不提他在课程中使用的计划。

更新

我仍在深入探究原始问题(调查诸如下文Eli提出的Petit Scheme等选项),但发现了一个与Gholoum的工作有关的有趣链接,所以我将它包括在这里。

[Ikarus计划](http://en.wikipedia.org/wiki/Ikarus_(Scheme_implementation))是Ghuloum思想的实际实施,似乎是他的博士学位的一部分。 工作。 它应该是R6RS的第一个实现之一。 我正在尝试安装Ikarus,但配置脚本不想识别我的系统安装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")
  )

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

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

这似乎是由于未能加载tests-driver.scm而导致的。 尝试使用#lang r6rs会禁用我真正喜欢使用的REPL,因此我将尝试继续使用Pretty Big。

感谢Eli Barzilay的耐心帮助。


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


你可以看到在Ubuntu x86上运行它的设置说明。

娇小计划的安装下载在这里。

链接地址: http://www.djcxy.com/p/44351.html

上一篇: What Scheme Does Ghuloum Use?

下一篇: Best way to send an email upon creation of a new model instance in Rails?