【问题标题】:Implementation of REPL/eval in a bytecode compiled language在字节码编译语言中实现 REPL/eval
【发布时间】:2013-09-30 10:24:54
【问题描述】:

我正在创建一种小型语言,该语言被编译为字节码并在自定义 VM 上运行,其架构很大程度上受到了我所阅读的有关 Python 和 Lua 的影响。有两个堆栈 - 一个存储函数参数、局部变量和临时值的数据堆栈,以及一个包含每个活动函数调用一个条目的帧堆栈。帧堆栈上的每个条目都包含诸如当前函数、指令指针(当前函数的字节码数组的索引)和基指针(数据堆栈的索引 - 标记函数的 args/locals 开始的位置)等信息。

我遇到困难的地方是实现 REPL,或者更具体地说,是 eval() 的实现。到目前为止的想法是在同一个堆栈框架内不断评估用户输入 - 但我看不到一种干净的方法来允许在 eval() 内创建新的局部变量。因为临时数据总是在堆栈上的本地人之上(堆栈向上增长),所以我能想到的唯一方法是以某种方式注意到eval() 创建了新的本地人,然后使用一些hackery 重新排列堆栈- 但这在一般情况下会产生问题。例如,如果有一个递归函数有条件地使用eval(),我将需要遍历帧堆栈并可能调整每个帧的数据堆栈。

我的虚拟机是否能够支持eval() 的合理实现?如果是,上述方法是否合理?如果不是,需要进行哪些架构更改?

【问题讨论】:

    标签: eval bytecode language-implementation


    【解决方案1】:

    看看这个:http://www.youtube.com/watch?v=yjflVIKY2gQ (只是拖钓一点)

    【讨论】:

      猜你喜欢
      • 2012-05-29
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多