以字节码编译语言实现REPL/eval

问题描述:

我正在创建一个编译为字节码并在定制虚拟机上运行的小型语言,该虚拟机的体系结构很大程度上受到我所阅读的内容的影响Python和Lua。有两个堆栈 - 一个存储函数参数,本地变量和临时值的数据堆栈和一个包含每个活动函数调用一个入口的帧堆栈。帧堆栈中的每个条目都包含诸如当前函数,指令指针(当前函数的字节码数组索引)和基指针(指向数据堆栈的索引 - 标记函数的参数/本地开始位置)等信息。以字节码编译语言实现REPL/eval

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

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

检查了这一点:http://www.youtube.com/watch?v=yjflVIKY2gQ (只有拖动一点点)