8

在我的用例中,我必须使用生成的解析树上的访问者将数千个小的独立表达式解析为树表示。当前为每个解析操作创建新的流、词法分析器和解析器实例。

我认为这可能不是最佳的。哪些对象实例可以在这样的设置中重复使用以利用 ANTLR4 的预热属性?线程安全性如何——这些实例中的哪些应该是线程本地的?重用词法分析器或解析器实例是否需要某种类型的重置?

4

1 回答 1

11

在 ANTLR 4 的早期(在其最初发布之前的几个月),自适应 DFA 缓存是基于每个实例创建的,因此使用Lexer.setInputStreamorParser.setInputStream对于实现良好性能至关重要。

这已不再是这种情况。后台缓存现在在所有解析器实例之间共享并且是线程安全的。Lexer和类的方法Parser不是线程安全的,因此如果要在多个线程上解析,则需要创建词法分析器和解析器的多个实例。

于 2013-03-06T02:40:28.330 回答