0

我一直在从头开始实现自己的脚本语言+虚拟机,以进行一个小型实验。脚本阅读器解析脚本并将其转换为运行时引擎将执行的指令流。

一开始我没有考虑它,但现在我想包括流控制(循环、分支等)。我对语言理论并不精通,只是看了一些例子来寻找灵感。

但是 x86 和 java 虚拟机都有大量用于流控制的指令。在 x86 中,有很多指令基于标志的状态和其他指令以一种或另一种方式操纵相关标志的状态进行跳转。在 Java 中似乎有 16 条指令可以进行某种比较和条件跳转。

这可能是有效的或受硬件特定原因的激励,但这不是我想要的。

我正在寻找一种精简、优雅的流控制解决方案,它只需要一些专门的指令,并且实现和维护起来不太复杂。

我非常有信心我可以想出一些可行的方法,但我宁愿提高我的知识而不是重新发明轮子。非常欢迎任何解释或相关材料的链接!

4

1 回答 1

1

通常,流量控制所需的最小原语是

  • 无条件跳转

  • 条件跳转

其中,条件跳转是复杂的,至少它需要原子地支持以下内容:

  • 测试二进制变量/标志

  • 如果设置了标志,则导致指令执行跳转到某个指定位置

  • 如果未设置该标志,则允许指令执行继续不间断

然而,对于这样一个原始的条件跳转,您需要将二进制变量/标志设置为可以在您的语言的流控制结构中使用的每种类型的布尔表达式的适当值。

因此,这将导致需要各种复杂度不同的原语来设置二进制变量/标志,或者需要发出复杂的指令序列以获得所需的效果。

另一种选择是引入更复杂的条件跳转原语。

通常会在每个的数量和复杂性之间进行权衡:条件跳转原语;条件(变量/标志)设置原语;发出指令。

于 2013-01-13T20:55:07.783 回答