ANTLR4 - 与访客相比,听众更快?

时间:2018-04-11 12:58:45

标签: antlr4

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

虽然我能够使用 Visitor Listener 方法实现这一目标,但压力测试显示,与访问者相比,听众更快这与普遍的看法相反。

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

1 个答案:

答案 0 :(得分:1)

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

听众在ParseTreeWalker中使用walker算法。访问者使用AbstractParseTreeVisitor中的算法。两者都“考虑”所有节点。

除了轻微的实现差异之外,一个定量差异是访问者调用涉及通用返回类型处理的开销。不过,对任何现代JVM的性能影响应该是微不足道的。