adaptivePredict method
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;
}
}