RuleContext

A rule context is a record of a single rule invocation.

We form a stack of these context objects using the parent pointer. A parent pointer of null indicates that the current context is the bottom of the stack. The ParserRuleContext subclass as a children list so that we can turn this data structure into a tree.

The root node always has a null pointer and invokingState of -1.

Upon entry to parsing, the first invoked rule function creates a context object (asubclass specialized for that rule such as SContext) and makes it the root of a parse tree, recorded by field Parser._ctx.

public final SContext s() throws RecognitionException { SContext _localctx = new SContext(_ctx, getState()); <-- create new node enterRule(_localctx, 0, RULE_s); <-- push it ... exitRule(); <-- pop back to _localctx return _localctx; }

A subsequent rule invocation of r from the start rule s pushes a new context object for r whose parent points at s and use invoking state is the state with r emanating as edge label.

The invokingState fields from a context object to the root together form a stack of rule indication states where the root (bottom of the stack) has a -1 sentinel value. If we invoke start symbol s then call r1, which calls r2, the would look like this:

SContext[-1] <- root node (bottom of the stack) R1Contextp <- p in rule s called r1 R2Contextq <- q in rule r1 called r2

So the top of the stack, _ctx, represents a call to the current rule and it holds the return address from another rule that invoke to this rule. To invoke a rule, we must always have a current context.

The parent contexts are useful for computing lookahead sets and getting error information.

These objects are used during parsing and prediction. For the special case of parsers, we use the subclass ParserRuleContext.

@see ParserRuleContext

Constructors

this
this()
Undocumented in source.
this
this(RuleContext parent, int invokingState)
Undocumented in source.

Members

Functions

accept
Variant accept(ParseTreeVisitor visitor)
Undocumented in source. Be warned that the author may not have intended to support it.
depth
int depth()
Undocumented in source. Be warned that the author may not have intended to support it.
getAltNumber
int getAltNumber()

For rule associated with this parse tree internal node, return the outer alternative number used to match the input. Default implementation does not compute nor store this alt num. Create a subclass of ParserRuleContext with backing field and set option contextSuperClass. to set it.

getChild
ParseTree getChild(int i)
Undocumented in source. Be warned that the author may not have intended to support it.
getChildCount
int getChildCount()
Undocumented in source. Be warned that the author may not have intended to support it.
getParent
RuleContext getParent()
Undocumented in source. Be warned that the author may not have intended to support it.
getPayload
RuleContext getPayload()
Undocumented in source. Be warned that the author may not have intended to support it.
getRuleContext
RuleContext getRuleContext()
Undocumented in source. Be warned that the author may not have intended to support it.
getRuleIndex
size_t getRuleIndex()
Undocumented in source. Be warned that the author may not have intended to support it.
getSourceInterval
Interval getSourceInterval()

satisfy the ParseTree / SyntaxTree interface

getText
Variant getText()

Return the combined text of all child nodes. This method only considers tokens which have been added to the parse tree. <p> Since tokens on hidden channels (e.g. whitespace or comments) are not added to the parse trees, they will not appear in the output of this method.

isEmpty
bool isEmpty()

A context is empty if there is no invoking state; meaning nobody called current context.

setAltNumber
void setAltNumber(int altNumber)

Set the outer alternative number for this context node. Default implementation does nothing to avoid backing field overhead for trees that don't need it. Create a subclass of ParserRuleContext with backing field and set option contextSuperClass.

setParent
void setParent(RuleContext parent)

since 4.7. {@see ParseTree#setParent} comment

toString
string toString()

@uml @override

toString
string toString(InterfaceRecognizer recog)
Undocumented in source. Be warned that the author may not have intended to support it.
toString
string toString(string[] ruleNames)
Undocumented in source. Be warned that the author may not have intended to support it.
toString
string toString(InterfaceRecognizer recog, RuleContext stop)

recog null unless ParserRuleContext, in which case we use subclass toString(...)

toString
string toString(string[] ruleNames, RuleContext stop)
Undocumented in source. Be warned that the author may not have intended to support it.
toStringTree
string toStringTree(InterfaceRecognizer recog)

Print out a whole tree, not just a node, in LISP format (root child1 .. childN). Print just a node if this is a leaf. We have to know the recognizer so we can get rule names.

toStringTree
string toStringTree(string[] ruleNames)
Undocumented in source. Be warned that the author may not have intended to support it.
toStringTree
string toStringTree()
Undocumented in source. Be warned that the author may not have intended to support it.

Static variables

EMPTY
ParserRuleContext EMPTY;
Undocumented in source.

Variables

invokingState
int invokingState;
Undocumented in source.
parent
RuleContext parent;
Undocumented in source.

Inherited Members

From RuleNode

getRuleContext
RuleContext getRuleContext()
Undocumented in source.

From InterfaceRuleContext

getRuleIndex
size_t getRuleIndex()
Undocumented in source.
getParent
RuleContext getParent()
Undocumented in source.

Meta