ANTLR4 - 听众比访客更快?

标签 antlr4

我正在尝试使用 ANTLR4 解析 java 文件并遍历解析树以搜索特定的函数调用。

虽然我可以同时使用VisitorListener 方法来实现这一点,但压力测试表明与 Visitors 相比,Listeners 更快,这与普遍的看法相反。

从理论上讲,访问者应该更快,因为他们只会检查特定节点,而听众会检查所有节点。有人知道为什么会这样吗?

最佳答案

在 ANTLR 中,听众应该比访问者更快,尽管性能差异将不容易衡量,如果有的话。

Listeners 在 ParseTreeWalker 中使用 walker 算法.访客使用AbstractParseTreeVisitor中的算法.两者都“考虑”了所有节点。

除了细微的实现差异之外,一个数量上的差异是访问者调用涉及通用返回类型处理的开销。尽管如此,在任何现代 JVM 中对性能的影响应该可以忽略不计。

关于ANTLR4 - 听众比访客更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49775816/

相关文章:

java - 相互左递归 ANTLR 4

java - 对主代码和测试代码使用antlr4-maven-plugin

Antlr4 Python3 目标访问者不可用?

python - 在antlr4 python目标中重用词法分析器对象

c# - Antlr4 C# 应用程序教程/示例

java - Antlr4 - 子句的排序

android - 用于代码生成的 ANTLR Tool 版本 4.5.3 与当前运行时版本 4.7.1 不匹配

antlr4 - 是否可以在不实际匹配 token 的情况下在 ANTLR4 中向前看?

antlr4 - 听众和访客范围 Antlr4 - 设计问题

c++ - antlr4中的ParseTree遍历