ANTLR4解析器重用和预热

8

在我的使用案例中,我必须使用访问者(Visitor)在生成的解析树上将数千个小型和独立表达式解析成树形表示。目前每次解析操作都会创建新的流、词法分析器和解析器实例。

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

1个回答

11
在ANTLR 4早期(距离其初始发布还有数月),自适应DFA缓存是基于每个实例创建的,因此使用Lexer.setInputStreamParser.setInputStream对于实现良好的性能至关重要。
现在情况已经不同了。后台缓存现在在所有解析器实例之间共享,并且是线程安全的。 LexerParser类的方法不是线程安全的,因此如果您想在多个线程上进行解析,则需要创建多个词法分析器和解析器实例。

这是否包括所有的运行时和目标? - Mr.Zeus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接