adaptivePredict method

  1. @override
int adaptivePredict(
  1. TokenStream input,
  2. int decision,
  3. ParserRuleContext? outerContext
)
override

Implementation

@override
int adaptivePredict(
  TokenStream input,
  int decision,
  ParserRuleContext? outerContext,
) {
  try {
    _sllStopIndex = -1;
    _llStopIndex = -1;
    currentDecision = decision;

    final start =
        DateTime.now(); // TODO get nano seconds expensive but useful info
    final alt = super.adaptivePredict(input, decision, outerContext);
    final stop = DateTime.now();
    decisions[decision].timeInPrediction +=
        (stop.difference(start)).inMicroseconds;
    decisions[decision].invocations++;

    final SLL_k = _sllStopIndex - startIndex + 1;
    decisions[decision].SLL_TotalLook += SLL_k;
    decisions[decision].SLL_MinLook = decisions[decision].SLL_MinLook == 0
        ? SLL_k
        : min(decisions[decision].SLL_MinLook, SLL_k);
    if (SLL_k > decisions[decision].SLL_MaxLook) {
      decisions[decision].SLL_MaxLook = SLL_k;
      decisions[decision].SLL_MaxLookEvent = LookaheadEventInfo(
        decision,
        null,
        alt,
        input,
        startIndex,
        _sllStopIndex,
        false,
      );
    }

    if (_llStopIndex >= 0) {
      final LL_k = _llStopIndex - startIndex + 1;
      decisions[decision].LL_TotalLook += LL_k;
      decisions[decision].LL_MinLook = decisions[decision].LL_MinLook == 0
          ? LL_k
          : min(decisions[decision].LL_MinLook, LL_k);
      if (LL_k > decisions[decision].LL_MaxLook) {
        decisions[decision].LL_MaxLook = LL_k;
        decisions[decision].LL_MaxLookEvent = LookaheadEventInfo(
            decision, null, alt, input, startIndex, _llStopIndex, true);
      }
    }

    return alt;
  } finally {
    currentDecision = -1;
  }
}