reportAmbiguity method

  1. @override
void reportAmbiguity(
  1. DFA dfa,
  2. DFAState D,
  3. int startIndex,
  4. int stopIndex,
  5. bool exact,
  6. BitSet? ambigAlts,
  7. ATNConfigSet configs,
)
override

If context sensitive parsing, we know it's ambiguity not conflict */

Implementation

@override
void reportAmbiguity(
  DFA dfa,
  DFAState D,
  int startIndex,
  int stopIndex,
  bool exact,
  BitSet? ambigAlts,
  ATNConfigSet configs,
) {
  final prediction =
      ambigAlts != null ? ambigAlts.nextset(0) : configs.alts.nextset(0);
  if (configs.fullCtx && prediction != conflictingAltResolvedBySLL) {
    // Even though this is an ambiguity we are reporting, we can
    // still detect some context sensitivities.  Both SLL and LL
    // are showing a conflict, hence an ambiguity, but if they resolve
    // to different minimum alternatives we have also identified a
    // context sensitivity.
    decisions[currentDecision].contextSensitivities.add(
          ContextSensitivityInfo(
            currentDecision,
            configs,
            input,
            startIndex,
            stopIndex,
          ),
        );
  }
  decisions[currentDecision].ambiguities.add(
        AmbiguityInfo(
          currentDecision,
          configs,
          ambigAlts,
          input,
          startIndex,
          stopIndex,
          configs.fullCtx,
        ),
      );
  super.reportAmbiguity(
    dfa,
    D,
    startIndex,
    stopIndex,
    exact,
    ambigAlts,
    configs,
  );
}