在ast-walking解释器中实现跳转语句

时间:2012-12-20 07:08:01

标签: interpreter abstract-syntax-tree break goto

在一个行走的解释器中,代码是逐个节点地执行的。如何实现goto,break或continue等功能?我停止当前执行并跳转到另一个节点?有没有最好的做法?

1 个答案:

答案 0 :(得分:4)

最佳做法是“不要为具有gotos的语言解释AST。”

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

你可以期待的最好的方法是预先走树并确定实际上在AST中的位置,并将其记录在一个关联的缓存中。然后,当您遇到goto时,只需查阅缓存而不是搜索树。

但这是迈向编译的第一步,例如,在执行之前预先计算你可以做的事情。