我的Scheme编译器出了什么问题?

时间:2010-02-25 02:55:53

标签: javascript compiler-construction scheme

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

我正在从他的论文http://www.cs.indiana.edu/~dyb/pubs/3imp.pdf第3章实施Dybvig的基于堆的模型。 我是用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")
  4. 很多东西都有用。但是我遇到嵌套函数调用的问题: 这有效并返回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行,其中编译了嵌套调用,或者可能在框架或应用的代码中。 PDF的3.4.2部分是描述样本实现的地方。

    这是一个非常复杂的问题。代码有很多粗糙的边缘 任何意见都表示赞赏。

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

1 个答案:

答案 0 :(得分:0)

事实证明我早早就清理了肋骨。

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