代码之家  ›  专栏  ›  技术社区  ›  Mark Bolusmjak

我的scheme编译器怎么了?

  •  2
  • Mark Bolusmjak  · 技术社区  · 14 年前

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

    我在他的论文中实现了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(“这里是方案代码”);
    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节描述了示例实现。

    这是一个相当复杂的问题。代码有许多粗糙的边。
    欢迎任何意见。

    我很高兴回答任何问题,我的执行。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Mark Bolusmjak    14 年前

    结果发现我很早就在清理价值肋骨。

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