Class SemanticContext

java.lang.Object
org.antlr.v4.runtime.atn.SemanticContext
Direct Known Subclasses:
SemanticContext.Empty, SemanticContext.Operator, SemanticContext.PrecedencePredicate, SemanticContext.Predicate

public abstract class SemanticContext extends Object
A tree structure used to record the semantic context in which an ATN configuration is valid. It's either a single predicate, a conjunction p1&&p2, or a sum of products p1||p2.

I have scoped the SemanticContext.AND, SemanticContext.OR, and SemanticContext.Predicate subclasses of SemanticContext within the scope of this outer class.

  • Constructor Details

    • SemanticContext

      public SemanticContext()
  • Method Details

    • eval

      public abstract boolean eval(Recognizer<?,?> parser, RuleContext parserCallStack)
      For context independent predicates, we evaluate them without a local context (i.e., null context). That way, we can evaluate them without having to create proper rule-specific context during prediction (as opposed to the parser, which creates them naturally). In a practical sense, this avoids a cast exception from RuleContext to myruleContext.

      For context dependent predicates, we must pass in a local context so that references such as $arg evaluate properly as _localctx.arg. We only capture context dependent predicates in the context in which we begin prediction, so we passed in the outer context here in case of context dependent predicate evaluation.

    • evalPrecedence

      public SemanticContext evalPrecedence(Recognizer<?,?> parser, RuleContext parserCallStack)
      Evaluate the precedence predicates for the context and reduce the result.
      Parameters:
      parser - The parser instance.
      parserCallStack -
      Returns:
      The simplified semantic context after precedence predicates are evaluated, which will be one of the following values.
      • SemanticContext.Empty.Instance: if the predicate simplifies to true after precedence predicates are evaluated.
      • null: if the predicate simplifies to false after precedence predicates are evaluated.
      • this: if the semantic context is not changed as a result of precedence predicate evaluation.
      • A non-null SemanticContext: the new simplified semantic context after precedence predicates are evaluated.
    • and

      public static SemanticContext and(SemanticContext a, SemanticContext b)
    • or

      See Also:
    • filterPrecedencePredicates

      private static List<SemanticContext.PrecedencePredicate> filterPrecedencePredicates(Collection<? extends SemanticContext> collection)