Java.target.apidocs.org.antlr.v4.runtime.RuleContext.html Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of antlr4-perf-testsuite Show documentation
Show all versions of antlr4-perf-testsuite Show documentation
The ANTLR 4 grammar compiler.
RuleContext (ANTLR 4 Runtime (Optimized) 4.13.1.3 API)
org.antlr.v4.runtime
Class RuleContext
- java.lang.Object
-
- org.antlr.v4.runtime.RuleContext
-
- All Implemented Interfaces:
- ParseTree, RuleNode, SyntaxTree, Tree
- Direct Known Subclasses:
- ParserRuleContext
public class RuleContext
extends Object
implements RuleNode
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 (a subclass 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)
R1Context[p] <- p in rule s called r1
R2Context[q] <- 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 Also:
ParserRuleContext
-
-
Field Summary
Fields
Modifier and Type
Field and Description
int
invokingState
What state invoked the rule associated with this context?
The "return address" is the followState of invokingState
If parent is null, this should be -1 this context object represents
the start rule.
RuleContext
parent
What context invoked this rule?
-
Constructor Summary
Constructors
Constructor and Description
RuleContext()
RuleContext(RuleContext parent,
int invokingState)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods
Modifier and Type
Method and Description
<T> T
accept(ParseTreeVisitor<? extends T> visitor)
The ParseTreeVisitor
needs a double dispatch method.
int
depth()
int
getAltNumber()
For rule associated with this parse tree internal node, return
the outer alternative number used to match the input.
ParseTree
getChild(int i)
If there are children, get the i
th value indexed from 0.
static RuleContext
getChildContext(RuleContext parent,
int invokingState)
int
getChildCount()
How many children are there? If there is none, then this
node represents a leaf node.
RuleContext
getParent()
The parent of this node.
RuleContext
getPayload()
This method returns whatever object represents the data at this node.
RuleContext
getRuleContext()
int
getRuleIndex()
Interval
getSourceInterval()
Return an Interval
indicating the index in the
TokenStream
of the first and last token associated with this
subtree.
String
getText()
Return the combined text of all child nodes.
boolean
isEmpty()
A context is empty if there is no invoking state; meaning nobody called
current context.
void
setAltNumber(int altNumber)
Set the outer alternative number for this context node.
void
setParent(RuleContext parent)
String
toString()
String
toString(List<String> ruleNames)
String
toString(List<String> ruleNames,
RuleContext stop)
String
toString(Recognizer<?,?> recog)
String
toString(Recognizer<?,?> recog,
RuleContext stop)
String
toStringTree()
Print out a whole tree, not just a node, in LISP format
{@code (root child1 ..
String
toStringTree(List<String> ruleNames)
Print out a whole tree, not just a node, in LISP format
(root child1 ..
String
toStringTree(Parser recog)
Print out a whole tree, not just a node, in LISP format
(root child1 ..
-
-
Field Detail
-
parent
public RuleContext parent
What context invoked this rule?
-
invokingState
public int invokingState
What state invoked the rule associated with this context?
The "return address" is the followState of invokingState
If parent is null, this should be -1 this context object represents
the start rule.
-
Constructor Detail
-
RuleContext
public RuleContext()
-
RuleContext
public RuleContext(RuleContext parent,
int invokingState)
-
Method Detail
-
getChildContext
public static RuleContext getChildContext(RuleContext parent,
int invokingState)
-
depth
public int depth()
-
isEmpty
public boolean isEmpty()
A context is empty if there is no invoking state; meaning nobody called
current context.
-
getSourceInterval
public Interval getSourceInterval()
Description copied from interface: SyntaxTree
Return an Interval
indicating the index in the
TokenStream
of the first and last token associated with this
subtree. If this node is a leaf, then the interval represents a single
token and has interval i..i for token index i.
An interval of i..i-1 indicates an empty interval at position
i in the input stream, where 0 <= i <= the size of the input
token stream. Currently, the code base can only have i=0..n-1 but
in concept one could have an empty interval after EOF.
If source interval is unknown, this returns Interval.INVALID
.
As a weird special case, the source interval for rules matched after
EOF is unspecified.
- Specified by:
getSourceInterval
in interface SyntaxTree
-
getRuleContext
public RuleContext getRuleContext()
- Specified by:
getRuleContext
in interface RuleNode
-
getParent
public RuleContext getParent()
Description copied from interface: Tree
The parent of this node. If the return value is null, then this
node is the root of the tree.
-
getPayload
public RuleContext getPayload()
Description copied from interface: Tree
This method returns whatever object represents the data at this node. For
example, for parse trees, the payload can be a Token
representing
a leaf node or a RuleContext
object representing a rule
invocation. For abstract syntax trees (ASTs), this is a Token
object.
- Specified by:
getPayload
in interface Tree
-
getText
public String getText()
Return the combined text of all child nodes. This method only considers
tokens which have been added to the parse tree.
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.
-
getRuleIndex
public int getRuleIndex()
-
getAltNumber
public 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.
- Since:
- 4.5.3
-
setAltNumber
public 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.
- Since:
- 4.5.3
-
setParent
public void setParent(RuleContext parent)
- Since:
- 4.7.
-
getChild
public ParseTree getChild(int i)
Description copied from interface: Tree
If there are children, get the i
th value indexed from 0.
-
getChildCount
public int getChildCount()
Description copied from interface: Tree
How many children are there? If there is none, then this
node represents a leaf node.
- Specified by:
getChildCount
in interface Tree
-
accept
public <T> T accept(ParseTreeVisitor<? extends T> visitor)
Description copied from interface: ParseTree
The ParseTreeVisitor
needs a double dispatch method.
-
toStringTree
public String toStringTree(@Nullable
Parser 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.
- Specified by:
toStringTree
in interface ParseTree
-
toStringTree
public String toStringTree(@Nullable
List<String> ruleNames)
Print out a whole tree, not just a node, in LISP format
(root child1 .. childN). Print just a node if this is a leaf.
-
toStringTree
public String toStringTree()
Description copied from interface: Tree
Print out a whole tree, not just a node, in LISP format
(root child1 .. childN)
. Print just a node if this is a leaf.
- Specified by:
toStringTree
in interface Tree
-
toString
public final String toString(@Nullable
Recognizer<?,?> recog)
-
toString
public String toString(@Nullable
Recognizer<?,?> recog,
@Nullable
RuleContext stop)
-
toString
public String toString(@Nullable
List<String> ruleNames,
@Nullable
RuleContext stop)
Copyright © 1992–2023 Daniel Sun. All rights reserved.