【发布时间】:2015-06-24 20:53:44
【问题描述】:
在 ast-walking 解释器中,代码是逐个节点执行的。如何实现 goto、break 或 continue 等功能?我停止当前执行并跳转到另一个节点?有什么最佳做法吗?
【问题讨论】:
标签: interpreter abstract-syntax-tree break goto
在 ast-walking 解释器中,代码是逐个节点执行的。如何实现 goto、break 或 continue 等功能?我停止当前执行并跳转到另一个节点?有什么最佳做法吗?
【问题讨论】:
标签: interpreter abstract-syntax-tree break goto
最佳做法是“不要为带有 goto 的语言解释 AST”。
从根本上说,如果语言主要处理标量,则树遍历中的任何类型的不连续都会导致严重的减速。 (如果您的语言主要处理复杂的值,例如数组语言 APL,则无关紧要)。
最好的办法是预先遍历树并确定 goto 在 AST 中的实际位置,并将其记录在旁边的关联缓存中。然后,当您遇到 goto 时,只需查询缓存而不是搜索树。
但这是迈向编译的第一步,例如,在执行之前预先计算你可以做的事情。
【讨论】: