ATLR 4 - 迭代与递归

时间:2014-12-08 11:50:21

标签: recursion antlr depth-first-search

假设这个抽象语法树:

enter image description here

我想ANTLR将使用递归算法(深度优先遍历)遍历此树。我将多次评估此树(例如,10MM次)。

使用递归算法遍历此树,我可以使用迭代(使用我自己的堆栈)。对于性能的傀儡,我认为迭代算法会表现得更好。 ANTLR真的使用递归遍历吗?这真的是性能问题吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

ANTLR 4默认情况下,访问者肯定会使用递归遍历。 ANTLR 4监听器使用walker,ParseTreeWalker.walk的当前实现也使用递归遍历。

在高性能场景中,侦听器和访问者的设计是为了方便使用,在ANTLR 4解析树转换为其他执行表示时,例如自定义字节码解释器(例如StringTemplate 4),动态代码生成到ECMA- 335或JVM字节码,或JIT / AOT编译到本机代码。这不是一个性能问题,因为解析树只被评估了几次。