evalSemanticContext method

BitSet evalSemanticContext(
  1. List<PredPrediction> predPredictions,
  2. ParserRuleContext outerContext,
  3. bool complete
)

Look through a list of predicate/alt pairs, returning alts for the pairs that win. A Instance predicate indicates an alt containing an unpredicated config which behaves as "always true." If !complete then we stop at the first predicate that evaluates to true. This includes pairs with null predicates.

Implementation

BitSet evalSemanticContext(
  List<PredPrediction> predPredictions,
  ParserRuleContext outerContext,
  bool complete,
) {
  final predictions = BitSet();
  for (var pair in predPredictions) {
    if (pair.pred == EmptySemanticContext.Instance) {
      predictions.set(pair.alt);
      if (!complete) {
        break;
      }
      continue;
    }

    final fullCtx = false; // in dfa
    final predicateEvaluationResult =
        evalSemanticContextOne(pair.pred, outerContext, pair.alt, fullCtx);
    if (debug || dfa_debug) {
      log('eval pred $pair=$predicateEvaluationResult');
    }

    if (predicateEvaluationResult) {
      if (debug || dfa_debug) log('PREDICT ' + pair.alt.toString());
      predictions.set(pair.alt);
      if (!complete) {
        break;
      }
    }
  }

  return predictions;
}