ParserATNSimulator.getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule

This method is used to improve the localization of error messages by choosing an alternative rather than throwing a {@link NoViableAltException} in particular prediction scenarios where the {@link #ERROR} state was reached during ATN simulation.

<p> The default implementation of this method uses the following algorithm to identify an ATN configuration which successfully parsed the decision entry rule. Choosing such an alternative ensures that the {@link ParserRuleContext} returned by the calling rule will be complete and valid, and the syntax error will be reported later at a more localized location.</p>

<ul> <li>If a syntactically valid path or paths reach the end of the decision rule and they are semantically valid if predicated, return the min associated alt.</li> <li>Else, if a semantically invalid but syntactically valid path exist or paths exist, return the minimum associated alt. </li> <li>Otherwise, return {@link ATN#INVALID_ALT_NUMBER}.</li> </ul>

<p> In some scenarios, the algorithm described above could predict an alternative which will result in a {@link FailedPredicateException} in the parser. Specifically, this could occur if the <em>only</em> configuration capable of successfully parsing to the end of the decision rule is blocked by a semantic predicate. By choosing this alternative within {@link #adaptivePredict} instead of throwing a {@link NoViableAltException}, the resulting {@link FailedPredicateException} in the parser will identify the specific predicate which is preventing the parser from successfully parsing the decision rule, which helps developers identify and correct logic errors in semantic predicates. </p>

@param configs The ATN configurations which were valid immediately before the {@link #ERROR} state was reached @param outerContext The is the \gamma_0 initial parser context from the paper or the parser stack at the instant before prediction commences.

@return The value to return from {@link #adaptivePredict}, or {@link ATN#INVALID_ALT_NUMBER} if a suitable alternative was not identified and {@link #adaptivePredict} should report an error instead.

class ParserATNSimulator
protected
int
getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule

Meta