Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在 ast-walking 解释器中,代码是逐个节点执行的。如何实现 goto、break 或 continue 等功能?我停止当前执行并跳转到另一个节点?有没有最佳实践?
最佳实践是“不要为带有 goto 的语言解释 AST”。
从根本上说,如果语言主要处理标量,则树遍历中的任何类型的不连续都会导致严重的减速。(如果您的语言主要处理复杂值,例如数组语言 APL,则无关紧要)。
您可以期望的最好的结果是预先遍历树并确定 goto 在 AST 中的实际位置,并将其记录在旁边的关联缓存中。然后,当您遇到 goto 时,只需查询缓存而不是搜索树。
但这是通往编译之路的第一步,例如,在执行之前预先计算您所能做的。