4

在 ast-walking 解释器中,代码是逐个节点执行的。如何实现 goto、break 或 continue 等功能?我停止当前执行并跳转到另一个节点?有没有最佳实践?

4

1 回答 1

4

最佳实践是“不要为带有 goto 的语言解释 AST”。

从根本上说,如果语言主要处理标量,则树遍历中的任何类型的不连续都会导致严重的减速。(如果您的语言主要处理复杂值,例如数组语言 APL,则无关紧要)。

您可以期望的最好的结果是预先遍历树并确定 goto 在 AST 中的实际位置,并将其记录在旁边的关联缓存中。然后,当您遇到 goto 时,只需查询缓存而不是搜索树。

但这是通往编译之路的第一步,例如,在执行之前预先计算您所能做的。

于 2012-12-20T09:16:13.747 回答