gpt4 book ai didi

java - 如何诊断我的 ANTLR4 语法中的歧义?

转载 作者:搜寻专家 更新时间:2023-10-31 20:33:49 25 4
gpt4 key购买 nike

简短版:

我正在使用

parser.addErrorListener(new DiagnosticErrorListener());
parser.getInterpreter().setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);

但是,当我运行解析器时,我没有看到任何受“reportAmbiguity ...”影响的输出,如 ANTLR4 书中所示。如何发现语法中的歧义?

长版:

我目前在 8 核 2.67ghz Xeon E5640 机器上使用 ANTLR4 获得的解析速度约为 90kb/s。词法分析速度约为 5mb/s,这很好。在尝试优化我的解析器时,我发现了两阶段解析,其中第一阶段使用 PredictionMode.SLL 进行解析,如果失败则第二阶段使用 PredictionMode.LL。使用这两种模式是可行的,我看到一些输入在 SLL 上成功的时间比在 LL 上要短。

问题是我希望所有(或大多数)人都能通过 SLL 取得成功。我假设我需要消除语法中的歧义才能完成此操作。我希望 ANTLR4 告诉我任何歧义,以便我可以解决它们。

最佳答案

当我使用 parser.removeErrorListener(); 删除 ConsoleErrorListener 时,我遇到了同样的问题。您可以使用下面的代码检查您的听众

for (ANTLRErrorListener listener : parser.getErrorListeners()) {
System.out.println(listener);
}

关于java - 如何诊断我的 ANTLR4 语法中的歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29441249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com