【问题标题】:ATLR 4 - Iterative vs RecursiveATLR 4 - 迭代与递归
【发布时间】:2015-02-06 01:43:00
【问题描述】:

假设这个抽象语法树:

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

代替使用递归算法遍历这棵树,我可以使用迭代(使用我自己的堆栈)。为了提高性能,我认为迭代算法的性能会好得多。 ANTLR 真的使用递归遍历吗?真的是性能问题吗?

谢谢!

【问题讨论】:

    标签: recursion antlr depth-first-search


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复!我想要做的是创建一个能够执行 SQL 语句的引擎。我的第一种方法是多次评估 AST。你知道 SQL 语句使用什么表示法吗?我真的迷路了..
    猜你喜欢
    • 2012-04-26
    • 2018-08-16
    • 2012-08-29
    • 2021-05-26
    • 1970-01-01
    • 2015-07-18
    • 2011-02-08
    • 2018-12-28
    • 2012-10-05
    相关资源
    最近更新 更多