我正在写一个解释器。我以前做过,但从未尝试过可以使用3 + 4 * 2 / ( 1 − 5 ) ^ 2 ^ 3
.
我的解析过程没有问题,实际上是关于我的虚拟机然后执行代码。
我的目标是一个快速的解释器,所以我决定不使用基于堆栈的 VM,在这种情况下你需要多个指令来进行乘法运算,例如(push、push、mul)
解析器生成的 VM 的“汇编”代码如下所示:
3 + 4 * 2 / ( 1 − 5 ) ^ 2 ^ 3
变成
sub 1 5
pow result 2
pow result 3
div 2 result
mul 4 result
add 3 result
(结果正确)
- 如您所见:每条指令都没有,一两个参数。结果寄存器保存最后一条指令的结果。就是这样。
具有这种结构的语言并且只有一个寄存器的 VM 可以计算每个数学表达式,例如 Python 或 PHP 可以吗?
如果没有堆栈是不可能的,我现在就重新开始!