【问题标题】:What's wrong with my Scheme compiler?我的 Scheme 编译器有什么问题?
【发布时间】:2010-02-25 02:55:52
【问题描述】:

我想知道为什么嵌套函数调用不起作用。

我正在实现 Dybvig 的基于堆的模型,来自他的论文 http://www.cs.indiana.edu/~dyb/pubs/3imp.pdf 第 3 章。
我正在用 JavaScript 做。来源在这里:http://github.com/z5h/zb-lisp
现在几乎所有东西都在 parser.js 中。

要运行,

  1. 使用 Firebug 在 Firefox 中加载 test.html。
  2. Evaluator.newEvaluator().eval("scheme code goes here");
  3. 在代码末尾留一些空格,因为解析器现在有点损坏并且依赖于末尾的空格。 (等待修复)。例如.eval("12 ") 不是 .eval("12")

很多东西都有效。但是我遇到了嵌套函数调用的问题: 这有效并返回5:
(set! i (lambda (x) x)) (set! ii (i i)) (ii 5)
这不起作用:
(set! i (lambda (x) x)) (i (i 5))
这也不是:
(set! i (lambda (x) x)) ((i i) 5)

问题可能在编译嵌套调用的第 577 行附近,或者可能在 frame 或 apply 的代码中。 PDF 的第 3.4.2 节描述了示例实现。

这是一个相当复杂的问题。代码有许多粗糙的边缘。
任何意见表示赞赏。

我很乐意回答我的实施问题。

【问题讨论】:

  • 如果你能把问题缩小一点,人们可能更愿意回答。鼓励有关 SO 的问题“详细而具体”
  • 希望现在更清楚了。我的问题是嵌套函数调用。

标签: javascript compiler-construction scheme


【解决方案1】:

原来我早早地清除了价值肋骨。

改进后的代码可以在我的 github 上找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2014-03-22
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多