首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LL_EXACT_AMBIG_DETECTION -迭代

LL_EXACT_AMBIG_DETECTION -迭代
EN

Stack Overflow用户
提问于 2013-02-07 17:42:24
回答 1查看 166关注 0票数 2

使用PredictionMode::LL_EXACT_AMBIG_DETECTION时,我收到以下错误消息:

代码语言:javascript
复制
line 186:7 reportAttemptingFullContext d=30, input='ON REPORT HEAD

我该如何解释d属性。它是否引用了我的语法中的规则,我如何才能找出是哪一个?

根据代码:

代码语言:javascript
复制
@Override
public void reportAttemptingFullContext(@NotNull Parser recognizer,
    @NotNull DFA dfa,
    int startIndex, int stopIndex,
    @NotNull ATNConfigSet configs)
{
        recognizer.notifyErrorListeners("reportAttemptingFullContext d=" +
            dfa.decision + ", input='" +
            recognizer.getTokenStream().getText(Interval.of(startIndex, stopIndex)) + "'");
}

属性d是DFA中的决策。但是我还没有弄清楚如何将这些信息用回语法中的规则。谢谢你的帮助。温馨的问候,沃尔夫冈·哈默

EN

回答 1

Stack Overflow用户

发布于 2013-02-07 22:09:39

以下辅助方法可以将决策编号转换为规则名称。您可以基于DiagnosticErrorListener创建自己的错误侦听器实现,并使用这些方法在每条消息中包含规则的名称。

如果一个规则有多个决策,那么您可以在为语法生成代码时将-atn标志传递给ANTLR。有了规则的名称后,查看ruleName.dot生成的图形(其中ruleName是规则),您将在图形中看到一个标记为d=decisionNumber的节点(其中decisionNumber是您当前看到的数字)。这将为您指出问题发生的确切位置。

请记住,当您更改语法时,规则和决策编号会发生变化,因此当您打开ruleName.dot时,您需要验证每次为您的语法重新生成代码时的实际决策编号。

代码语言:javascript
复制
public static int getDecisionRule(Recognizer<?, ?> recognizer, int decision) {
    if (recognizer == null || decision < 0) {
        return -1;
    }

    if (decision >= recognizer.getATN().decisionToState.size()) {
        return -1;
    }

    return recognizer.getATN().decisionToState.get(decision).ruleIndex;
}

public static String getRuleDisplayName(Recognizer<?, ?> recognizer, int ruleIndex) {
    if (recognizer == null || ruleIndex < 0) {
        return Integer.toString(ruleIndex);
    }

    String[] ruleNames = recognizer.getRuleNames();
    if (ruleIndex < 0 || ruleIndex >= ruleNames.length) {
        return Integer.toString(ruleIndex);
    }

    return ruleNames[ruleIndex];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14747952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档