Class Parser
- Direct Known Subclasses:
ParserInterpreter
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionclass
static class
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected boolean
Specifies whether or not the parser should construct a parse tree during the parsing process.protected ParserRuleContext
TheParserRuleContext
object for the currently executing rule.protected ANTLRErrorStrategy
The error handling strategy for the parser.protected TokenStream
The input stream.protected List
<ParseTreeListener> The list ofParseTreeListener
listeners registered to receive events during the parse.protected final IntegerStack
protected int
The number of syntax errors reported during parsing.private Parser.TraceListener
WhensetTrace(boolean)
(true)
is called, a reference to theParser.TraceListener
is stored here so it can be easily removed in a later call tosetTrace(boolean)
(false)
.private ATN
This field holds the deserializedATN
with bypass alternatives, created lazily upon first demand.protected boolean
Indicates parser has match()ed EOF token.Fields inherited from class org.antlr.v4.runtime.Recognizer
_interp, EOF
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void
void
addParseListener
(ParseTreeListener listener) Registerslistener
to receive events during the parsing process.compileParseTreePattern
(String pattern, int patternRuleIndex) The preferred method of getting a tree pattern.compileParseTreePattern
(String pattern, int patternRuleIndex, Lexer lexer) The same ascompileParseTreePattern(String, int)
but specify aLexer
rather than trying to deduce it from this parser.consume()
Consume and return the current symbol.createErrorNode
(ParserRuleContext parent, Token t) How to create an error node, given a token, associated with a parent.createTerminalNode
(ParserRuleContext parent, Token t) How to create a token leaf node associated with a parent.void
dumpDFA()
void
dumpDFA
(PrintStream dumpStream) For debugging and other purposes.void
enterOuterAlt
(ParserRuleContext localctx, int altNum) void
enterRecursionRule
(ParserRuleContext localctx, int ruleIndex) Deprecated.void
enterRecursionRule
(ParserRuleContext localctx, int state, int ruleIndex, int precedence) void
enterRule
(ParserRuleContext localctx, int state, int ruleIndex) Always called by generated parsers upon entry to a rule.void
exitRule()
The ATN with bypass alternatives is expensive to create so we create it lazily.boolean
Gets whether or not a complete parse tree will be constructed while parsing.Match needs to return the current input symbol, which gets put into the label for the associated token ref; e.g., x=ID.For debugging and other purposes.Computes the set of input symbols which could follow the current parser state and context, as given byRecognizer.getState()
andgetContext()
, respectively.getInvokingContext
(int ruleIndex) int
Gets the number of syntax errors reported during parsing.If profiling during the parse/lex, this will return DecisionInfo records for each decision in recognizer in a ParseInfo object.final int
Get the precedence level for the top-most precedence rule.int
getRuleIndex
(String ruleName) Get a rule's index (i.e.,RULE_ruleName
field) or -1 if not found.Return List<String> of the rule names in your parser instance leading up to a call to the current rule.TokenFactory
<?> boolean
boolean
boolean
isExpectedToken
(int symbol) Checks whether or notsymbol
can follow the current state in the ATN.boolean
boolean
isTrace()
Gets whether aParser.TraceListener
is registered as a parse listener for the parser.match
(int ttype) Match current input symbol againstttype
.Match current input symbol as a wildcard.final void
void
notifyErrorListeners
(Token offendingToken, String msg, RecognitionException e) boolean
precpred
(RuleContext localctx, int precedence) void
pushNewRecursionContext
(ParserRuleContext localctx, int state, int ruleIndex) LikeenterRule(org.antlr.v4.runtime.ParserRuleContext, int, int)
but for recursive rules.void
removeParseListener
(ParseTreeListener listener) Removelistener
from the list of parse listeners.void
Remove all parse listeners.void
reset()
reset the parser's statevoid
setBuildParseTree
(boolean buildParseTrees) Track theParserRuleContext
objects during the parse and hook them up using theParserRuleContext.children
list so that it forms a parse tree.void
void
setErrorHandler
(ANTLRErrorStrategy handler) final void
setInputStream
(IntStream input) void
setProfile
(boolean profile) void
setTokenFactory
(TokenFactory<?> factory) Tell our token source and error strategy about a new way to create tokens.void
setTokenStream
(TokenStream input) Set the token stream and reset the parser.void
setTrace
(boolean trace) During a parse is sometimes useful to listen in on the rule entry and exit events as well as token matches.void
setTrimParseTree
(boolean trimParseTrees) Trim the internal lists of the parse tree during parsing to conserve memory.protected void
Notify any parse listeners of an enter rule event.protected void
Notify any parse listeners of an exit rule event.void
unrollRecursionContexts
(ParserRuleContext _parentctx) Methods inherited from class org.antlr.v4.runtime.Recognizer
action, addErrorListener, getATN, getErrorHeader, getErrorListenerDispatch, getErrorListeners, getGrammarFileName, getInterpreter, getRuleIndexMap, getRuleNames, getSerializedATN, getState, getTokenErrorDisplay, getTokenNames, getTokenType, getTokenTypeMap, getVocabulary, removeErrorListener, removeErrorListeners, sempred, setInterpreter, setState
-
Field Details
-
bypassAltsAtnCache
This field holds the deserializedATN
with bypass alternatives, created lazily upon first demand. In 4.10 I changed from map<serializedATNstring, ATN> since we only need one per parser object and also it complicates other targets that don't use ATN strings.- See Also:
-
_errHandler
The error handling strategy for the parser. The default value is a new instance ofDefaultErrorStrategy
.- See Also:
-
_input
The input stream.- See Also:
-
_precedenceStack
-
_ctx
TheParserRuleContext
object for the currently executing rule. This is always non-null during the parsing process. -
_buildParseTrees
protected boolean _buildParseTreesSpecifies whether or not the parser should construct a parse tree during the parsing process. The default value istrue
.- See Also:
-
_tracer
WhensetTrace(boolean)
(true)
is called, a reference to theParser.TraceListener
is stored here so it can be easily removed in a later call tosetTrace(boolean)
(false)
. The listener itself is implemented as a parser listener so this field is not directly used by other parser methods. -
_parseListeners
The list ofParseTreeListener
listeners registered to receive events during the parse.- See Also:
-
_syntaxErrors
protected int _syntaxErrorsThe number of syntax errors reported during parsing. This value is incremented each timenotifyErrorListeners(java.lang.String)
is called. -
matchedEOF
protected boolean matchedEOFIndicates parser has match()ed EOF token. SeeexitRule()
.
-
-
Constructor Details
-
Parser
-
-
Method Details
-
reset
public void reset()reset the parser's state -
match
Match current input symbol againstttype
. If the symbol type matches,ANTLRErrorStrategy.reportMatch(org.antlr.v4.runtime.Parser)
andconsume()
are called to complete the match process.If the symbol type does not match,
ANTLRErrorStrategy.recoverInline(org.antlr.v4.runtime.Parser)
is called on the current error strategy to attempt recovery. IfgetBuildParseTree()
istrue
and the token index of the symbol returned byANTLRErrorStrategy.recoverInline(org.antlr.v4.runtime.Parser)
is -1, the symbol is added to the parse tree by callingcreateErrorNode(ParserRuleContext, Token)
thenParserRuleContext.addErrorNode(ErrorNode)
.- Parameters:
ttype
- the token type to match- Returns:
- the matched symbol
- Throws:
RecognitionException
- if the current input symbol did not matchttype
and the error strategy could not recover from the mismatched symbol
-
matchWildcard
Match current input symbol as a wildcard. If the symbol type matches (i.e. has a value greater than 0),ANTLRErrorStrategy.reportMatch(org.antlr.v4.runtime.Parser)
andconsume()
are called to complete the match process.If the symbol type does not match,
ANTLRErrorStrategy.recoverInline(org.antlr.v4.runtime.Parser)
is called on the current error strategy to attempt recovery. IfgetBuildParseTree()
istrue
and the token index of the symbol returned byANTLRErrorStrategy.recoverInline(org.antlr.v4.runtime.Parser)
is -1, the symbol is added to the parse tree by callingcreateErrorNode(ParserRuleContext, Token)
. thenParserRuleContext.addErrorNode(ErrorNode)
- Returns:
- the matched symbol
- Throws:
RecognitionException
- if the current input symbol did not match a wildcard and the error strategy could not recover from the mismatched symbol
-
setBuildParseTree
public void setBuildParseTree(boolean buildParseTrees) Track theParserRuleContext
objects during the parse and hook them up using theParserRuleContext.children
list so that it forms a parse tree. TheParserRuleContext
returned from the start rule represents the root of the parse tree.Note that if we are not building parse trees, rule contexts only point upwards. When a rule exits, it returns the context but that gets garbage collected if nobody holds a reference. It points upwards but nobody points at it.
When we build parse trees, we are adding all of these contexts to
ParserRuleContext.children
list. Contexts are then not candidates for garbage collection. -
getBuildParseTree
public boolean getBuildParseTree()Gets whether or not a complete parse tree will be constructed while parsing. This property istrue
for a newly constructed parser.- Returns:
true
if a complete parse tree will be constructed while parsing, otherwisefalse
-
setTrimParseTree
public void setTrimParseTree(boolean trimParseTrees) Trim the internal lists of the parse tree during parsing to conserve memory. This property is set tofalse
by default for a newly constructed parser.- Parameters:
trimParseTrees
-true
to trim the capacity of theParserRuleContext.children
list to its size after a rule is parsed.
-
getTrimParseTree
public boolean getTrimParseTree()- Returns:
true
if theParserRuleContext.children
list is trimmed using the defaultParser.TrimToSizeListener
during the parse process.
-
getParseListeners
-
addParseListener
Registerslistener
to receive events during the parsing process.To support output-preserving grammar transformations (including but not limited to left-recursion removal, automated left-factoring, and optimized code generation), calls to listener methods during the parse may differ substantially from calls made by
ParseTreeWalker.DEFAULT
used after the parse is complete. In particular, rule entry and exit events may occur in a different order during the parse than after the parser. In addition, calls to certain rule entry methods may be omitted.With the following specific exceptions, calls to listener events are deterministic, i.e. for identical input the calls to listener methods will be the same.
- Alterations to the grammar used to generate code may change the behavior of the listener calls.
- Alterations to the command line options passed to ANTLR 4 when generating the parser may change the behavior of the listener calls.
- Changing the version of the ANTLR Tool used to generate the parser may change the behavior of the listener calls.
- Parameters:
listener
- the listener to add- Throws:
NullPointerException
- if listener isnull
-
removeParseListener
Removelistener
from the list of parse listeners.If
listener
isnull
or has not been added as a parse listener, this method does nothing.- Parameters:
listener
- the listener to remove- See Also:
-
removeParseListeners
public void removeParseListeners()Remove all parse listeners.- See Also:
-
triggerEnterRuleEvent
protected void triggerEnterRuleEvent()Notify any parse listeners of an enter rule event.- See Also:
-
triggerExitRuleEvent
protected void triggerExitRuleEvent()Notify any parse listeners of an exit rule event.- See Also:
-
getNumberOfSyntaxErrors
public int getNumberOfSyntaxErrors()Gets the number of syntax errors reported during parsing. This value is incremented each timenotifyErrorListeners(java.lang.String)
is called.- See Also:
-
getTokenFactory
- Specified by:
getTokenFactory
in classRecognizer<Token,
ParserATNSimulator>
-
setTokenFactory
Tell our token source and error strategy about a new way to create tokens.- Specified by:
setTokenFactory
in classRecognizer<Token,
ParserATNSimulator>
-
getATNWithBypassAlts
The ATN with bypass alternatives is expensive to create so we create it lazily.- Throws:
UnsupportedOperationException
- if the current parser does not implement theRecognizer.getSerializedATN()
method.
-
compileParseTreePattern
The preferred method of getting a tree pattern. For example, here's a sample use:ParseTree t = parser.expr(); ParseTreePattern p = parser.compileParseTreePattern("<ID>+0", MyParser.RULE_expr); ParseTreeMatch m = p.match(t); String id = m.get("ID");
-
compileParseTreePattern
The same ascompileParseTreePattern(String, int)
but specify aLexer
rather than trying to deduce it from this parser. -
getErrorHandler
-
setErrorHandler
-
getInputStream
- Specified by:
getInputStream
in classRecognizer<Token,
ParserATNSimulator>
-
setInputStream
- Specified by:
setInputStream
in classRecognizer<Token,
ParserATNSimulator>
-
getTokenStream
-
setTokenStream
Set the token stream and reset the parser. -
getCurrentToken
Match needs to return the current input symbol, which gets put into the label for the associated token ref; e.g., x=ID. -
notifyErrorListeners
-
notifyErrorListeners
-
consume
Consume and return the current symbol.E.g., given the following input with
A
being the current lookahead symbol, this function moves the cursor toB
and returnsA
.A B ^
If the parser is not in error recovery mode, the consumed symbol is added to the parse tree usingParserRuleContext.addChild(TerminalNode)
, andParseTreeListener.visitTerminal(org.antlr.v4.runtime.tree.TerminalNode)
is called on any parse listeners. If the parser is in error recovery mode, the consumed symbol is added to the parse tree usingcreateErrorNode(ParserRuleContext, Token)
thenParserRuleContext.addErrorNode(ErrorNode)
andParseTreeListener.visitErrorNode(org.antlr.v4.runtime.tree.ErrorNode)
is called on any parse listeners. -
createTerminalNode
How to create a token leaf node associated with a parent. Typically, the terminal node to create is not a function of the parent.- Since:
- 4.7
-
createErrorNode
How to create an error node, given a token, associated with a parent. Typically, the error node to create is not a function of the parent.- Since:
- 4.7
-
addContextToParseTree
protected void addContextToParseTree() -
enterRule
Always called by generated parsers upon entry to a rule. Access field_ctx
get the current context. -
exitRule
public void exitRule() -
enterOuterAlt
-
getPrecedence
public final int getPrecedence()Get the precedence level for the top-most precedence rule.- Returns:
- The precedence level for the top-most precedence rule, or -1 if the parser context is not nested within a precedence rule.
-
enterRecursionRule
Deprecated.UseenterRecursionRule(ParserRuleContext, int, int, int)
instead. -
enterRecursionRule
public void enterRecursionRule(ParserRuleContext localctx, int state, int ruleIndex, int precedence) -
pushNewRecursionContext
LikeenterRule(org.antlr.v4.runtime.ParserRuleContext, int, int)
but for recursive rules. Make the current context the child of the incoming localctx. -
unrollRecursionContexts
-
getInvokingContext
-
getContext
-
setContext
-
precpred
- Overrides:
precpred
in classRecognizer<Token,
ParserATNSimulator>
-
inContext
-
isExpectedToken
public boolean isExpectedToken(int symbol) Checks whether or notsymbol
can follow the current state in the ATN. The behavior of this method is equivalent to the following, but is implemented such that the complete context-sensitive follow set does not need to be explicitly constructed.return getExpectedTokens().contains(symbol);
- Parameters:
symbol
- the symbol type to check- Returns:
true
ifsymbol
can follow the current state in the ATN, otherwisefalse
.
-
isMatchedEOF
public boolean isMatchedEOF() -
getExpectedTokens
Computes the set of input symbols which could follow the current parser state and context, as given byRecognizer.getState()
andgetContext()
, respectively.- See Also:
-
getExpectedTokensWithinCurrentRule
-
getRuleIndex
Get a rule's index (i.e.,RULE_ruleName
field) or -1 if not found. -
getRuleContext
-
getRuleInvocationStack
Return List<String> of the rule names in your parser instance leading up to a call to the current rule. You could override if you want more details such as the file/line info of where in the ATN a rule is invoked. This is very useful for error messages. -
getRuleInvocationStack
-
getDFAStrings
For debugging and other purposes. -
dumpDFA
public void dumpDFA() -
dumpDFA
For debugging and other purposes. -
getSourceName
-
getParseInfo
Description copied from class:Recognizer
If profiling during the parse/lex, this will return DecisionInfo records for each decision in recognizer in a ParseInfo object.- Overrides:
getParseInfo
in classRecognizer<Token,
ParserATNSimulator>
-
setProfile
public void setProfile(boolean profile) - Since:
- 4.3
-
setTrace
public void setTrace(boolean trace) During a parse is sometimes useful to listen in on the rule entry and exit events as well as token matches. This is for quick and dirty debugging. -
isTrace
public boolean isTrace()Gets whether aParser.TraceListener
is registered as a parse listener for the parser.- See Also:
-
enterRecursionRule(ParserRuleContext, int, int, int)
instead.