【发布时间】:2015-02-06 01:43:00
【问题描述】:
假设这个抽象语法树:
我想象 ANTLR 将使用递归算法遍历这棵树(深度优先遍历)。我将多次评估这棵树(例如,10MM 次。)
代替使用递归算法遍历这棵树,我可以使用迭代(使用我自己的堆栈)。为了提高性能,我认为迭代算法的性能会好得多。 ANTLR 真的使用递归遍历吗?真的是性能问题吗?
谢谢!
【问题讨论】:
标签: recursion antlr depth-first-search
假设这个抽象语法树:
我想象 ANTLR 将使用递归算法遍历这棵树(深度优先遍历)。我将多次评估这棵树(例如,10MM 次。)
代替使用递归算法遍历这棵树,我可以使用迭代(使用我自己的堆栈)。为了提高性能,我认为迭代算法的性能会好得多。 ANTLR 真的使用递归遍历吗?真的是性能问题吗?
谢谢!
【问题讨论】:
标签: recursion antlr depth-first-search
ANTLR 4 访问者默认使用递归遍历。 ANTLR 4 监听器使用walker,而ParseTreeWalker.walk 的当前实现也使用递归遍历。
在高性能场景中,侦听器和访问者的设计目的是在将 ANTLR 4 解析树转换为其他一些执行表示时方便使用,例如自定义字节码解释器(例如 StringTemplate 4)、动态代码生成到 ECMA- 335 或 JVM 字节码,或 JIT/AOT 编译为本机代码。这不是性能问题,因为解析树只被评估了几次。
【讨论】: