在我的使用案例中,我必须使用访问者(Visitor)在生成的解析树上将数千个小型和独立表达式解析成树形表示。目前每次解析操作都会创建新的流、词法分析器和解析器实例。
我认为这可能不是最优的做法。在这种设置下,哪些对象实例可以被重复利用以利用ANTLR4的预热属性?线程安全如何 - 这些实例中的哪些应该是线程本地的?是否需要某种重置来重复使用词法分析器或解析器实例?
在我的使用案例中,我必须使用访问者(Visitor)在生成的解析树上将数千个小型和独立表达式解析成树形表示。目前每次解析操作都会创建新的流、词法分析器和解析器实例。
我认为这可能不是最优的做法。在这种设置下,哪些对象实例可以被重复利用以利用ANTLR4的预热属性?线程安全如何 - 这些实例中的哪些应该是线程本地的?是否需要某种重置来重复使用词法分析器或解析器实例?
Lexer.setInputStream
或Parser.setInputStream
对于实现良好的性能至关重要。Lexer
和Parser
类的方法不是线程安全的,因此如果您想在多个线程上进行解析,则需要创建多个词法分析器和解析器实例。