jon*_*onr 5 java parsing antlr4
精简版:
我在用
parser.addErrorListener(new DiagnosticErrorListener());
parser.getInterpreter().setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);
Run Code Online (Sandbox Code Playgroud)
但是当我运行我的解析器时,我没有看到任何输出到'reportAmbiguity ...'的影响,正如ANTLR4书中所示.我怎么能在语法中看到歧义?
长版:
在8核2.67ghz Xeon E5640机器上,我目前使用ANTLR4获得的解析速度约为90kb/s.lexing速度约为5mb/s,所以很好.在尝试优化我的解析器时,我发现了两个阶段解析,其中第一个阶段使用PredictionMode.SLL进行解析,如果失败,则第二个阶段使用PredictionMode.LL.使用这两种模式是有效的,我看到一些输入使用SLL成功的时间比LL使用的时间短.
问题是我希望所有(或大多数)成功使用SLL.我假设我需要从语法中消除歧义来实现这一目标.我想ANTLR4告诉我任何含糊之处,以便我可以解决它们.
小智 1
ConsoleErrorListener当我删除时,我遇到了同样的问题parser.removeErrorListener();。您可以使用下面的代码检查您的听众
for (ANTLRErrorListener listener : parser.getErrorListeners()) {
System.out.println(listener);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
390 次 |
| 最近记录: |