antlr4解析器重用和预热

时间:2013-03-06 00:16:42

标签: antlr4

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

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

1 个答案:

答案 0 :(得分:11)

在ANTLR 4的早期(在其首次发布之前的几个月),自适应DFA缓存是基于每个实例创建的,因此使用Lexer.setInputStreamParser.setInputStream对于取得良好的业绩。

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