antlr4解析器重用和预热

Fre*_*ack 8 antlr4

在我的用例中,我必须使用生成的解析树上的Visitor来将数千个小的独立表达式解析为树表示.目前,为每个解析操作创建了新的流,词法分析器和解析器实例.

我认为这可能不是最佳的.在这样的设置中可以重用哪些对象实例来利用ANTLR4的预热属性?线程安全怎么样 - 这些实例中的哪一个应该是本地线程?重新使用词法分析器或解析器实例需要重置某种类型吗?

Sam*_*ell 11

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

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