org.eclipse.xtext.parser.antlr
Class AbstractInternalAntlrParser
java.lang.Object
org.antlr.runtime.BaseRecognizer
org.antlr.runtime.Parser
org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser
public abstract class AbstractInternalAntlrParser
- extends org.antlr.runtime.Parser
Base class for Xtext's generated parsers. It is reasonable customizable by means of
object composition, e.g. error messages can be tailored to specific needs with an
ISyntaxErrorMessageProvider
, objects construction is subject to an IAstFactory
.
Fields inherited from class org.antlr.runtime.Parser |
input |
Fields inherited from class org.antlr.runtime.BaseRecognizer |
DEFAULT_TOKEN_CHANNEL, HIDDEN, INITIAL_FOLLOW_STACK_SIZE, MEMO_RULE_FAILED, MEMO_RULE_UNKNOWN, NEXT_TOKEN_RULE_NAME, state |
Method Summary |
protected void |
add(org.eclipse.emf.ecore.EObject _this,
java.lang.String feature,
java.lang.Object value,
java.lang.String lexerRule)
|
protected void |
add(org.eclipse.emf.ecore.EObject _this,
java.lang.String feature,
java.lang.Object value,
java.lang.String lexerRule,
INode node)
|
protected void |
addWithLastConsumed(org.eclipse.emf.ecore.EObject _this,
java.lang.String feature,
java.lang.Object value,
java.lang.String lexerRule)
|
protected void |
afterParserOrEnumRuleCall()
|
protected void |
appendAllTokens()
|
protected void |
appendError(INode node)
|
protected java.util.List<ILeafNode> |
appendSkippedTokens()
|
protected void |
appendTrailingHiddenTokens()
|
protected void |
associateNodeWithAstElement(ICompositeNode node,
org.eclipse.emf.ecore.EObject astElement)
|
protected ISyntaxErrorMessageProvider.IParserErrorContext |
createErrorContext(org.antlr.runtime.RecognitionException e)
|
protected org.eclipse.emf.ecore.EObject |
createModelElement(AbstractRule rule)
|
protected org.eclipse.emf.ecore.EObject |
createModelElement(org.eclipse.emf.ecore.EClassifier classifier)
|
protected org.eclipse.emf.ecore.EObject |
createModelElement(org.eclipse.emf.ecore.EClassifier classifier,
ICompositeNode compositeNode)
|
protected org.eclipse.emf.ecore.EObject |
createModelElementForParent(AbstractRule rule)
|
protected org.eclipse.emf.ecore.EObject |
createModelElementForParent(org.eclipse.emf.ecore.EClassifier classifier)
|
protected ISyntaxErrorMessageProvider.IValueConverterErrorContext |
createValueConverterErrorContext(ValueConverterException vce)
|
void |
displayRecognitionError(java.lang.String[] tokenNames,
org.antlr.runtime.RecognitionException e)
|
void |
emitErrorMessage(java.lang.String msg)
Override this method to change where error messages go |
protected void |
enterRule()
|
protected org.eclipse.emf.ecore.EObject |
forceCreateModelElement(Action action,
org.eclipse.emf.ecore.EObject value)
|
protected org.eclipse.emf.ecore.EObject |
forceCreateModelElementAndAdd(Action action,
org.eclipse.emf.ecore.EObject value)
|
protected org.eclipse.emf.ecore.EObject |
forceCreateModelElementAndSet(Action action,
org.eclipse.emf.ecore.EObject value)
|
java.lang.String |
getErrorMessage(org.antlr.runtime.RecognitionException e,
java.lang.String[] tokenNames)
What error message should be generated for the various
exception types? |
protected abstract java.lang.String |
getFirstRuleName()
|
protected abstract IGrammarAccess |
getGrammarAccess()
|
org.antlr.runtime.TokenStream |
getInput()
|
protected INode |
getLastLeafNode()
|
NodeModelBuilder |
getNodeModelBuilder()
|
IAstFactory |
getSemanticModelBuilder()
|
SyntaxErrorMessage |
getSyntaxErrorMessage(org.antlr.runtime.RecognitionException e,
java.lang.String[] tokenNames)
|
ISyntaxErrorMessageProvider |
getSyntaxErrorProvider()
|
IUnorderedGroupHelper |
getUnorderedGroupHelper()
|
protected java.lang.String |
getValueConverterExceptionMessage(ValueConverterException vce)
|
protected void |
handleValueConverterException(ValueConverterException vce)
|
protected void |
insertCompositeNode(Action action)
|
protected void |
leaveRule()
|
protected void |
newCompositeNode(org.eclipse.emf.ecore.EObject grammarElement)
|
protected void |
newLeafNode(org.antlr.runtime.Token token,
org.eclipse.emf.ecore.EObject grammarElement)
|
IParseResult |
parse()
|
IParseResult |
parse(java.lang.String entryRuleName)
|
void |
recover(org.antlr.runtime.IntStream input,
org.antlr.runtime.RecognitionException re)
Recover from an error found on the input stream. |
protected java.lang.Object |
recoverFromMismatchedToken(org.antlr.runtime.IntStream input,
int ttype,
org.antlr.runtime.BitSet follow)
Attempt to recover from a single missing or extra token. |
protected void |
registerRules(Grammar grammar)
|
void |
reportError(org.antlr.runtime.RecognitionException e)
Report a recognition problem. |
protected void |
set(org.eclipse.emf.ecore.EObject _this,
java.lang.String feature,
java.lang.Object value,
java.lang.String lexerRule)
|
protected void |
set(org.eclipse.emf.ecore.EObject _this,
java.lang.String feature,
java.lang.Object value,
java.lang.String lexerRule,
INode node)
|
void |
setNodeModelBuilder(NodeModelBuilder nodeModelBuilder)
|
void |
setSemanticModelBuilder(IAstFactory semanticModelBuilder)
|
void |
setSyntaxErrorProvider(ISyntaxErrorMessageProvider syntaxErrorProvider)
|
void |
setTokenTypeMap(java.util.Map<java.lang.Integer,java.lang.String> tokenTypeMap)
|
void |
setUnorderedGroupHelper(IUnorderedGroupHelper unorderedGroupHelper)
|
protected void |
setWithLastConsumed(org.eclipse.emf.ecore.EObject _this,
java.lang.String feature,
java.lang.Object value,
java.lang.String lexerRule)
|
protected java.lang.String |
superGetErrorMessage(org.antlr.runtime.RecognitionException e,
java.lang.String[] tokenNames)
|
Methods inherited from class org.antlr.runtime.Parser |
getCurrentInputSymbol, getMissingSymbol, getSourceName, getTokenStream, reset, setTokenStream, traceIn, traceOut |
Methods inherited from class org.antlr.runtime.BaseRecognizer |
alreadyParsedRule, beginResync, combineFollows, computeContextSensitiveRuleFOLLOW, computeErrorRecoverySet, consumeUntil, consumeUntil, endResync, failed, getBacktrackingLevel, getErrorHeader, getGrammarFileName, getNumberOfSyntaxErrors, getRuleInvocationStack, getRuleInvocationStack, getRuleMemoization, getRuleMemoizationCacheSize, getTokenErrorDisplay, getTokenNames, match, matchAny, memoize, mismatchIsMissingToken, mismatchIsUnwantedToken, pushFollow, recoverFromMismatchedSet, setBacktrackingLevel, toStrings, traceIn, traceOut |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
AbstractInternalAntlrParser
protected AbstractInternalAntlrParser(org.antlr.runtime.TokenStream input)
AbstractInternalAntlrParser
protected AbstractInternalAntlrParser(org.antlr.runtime.TokenStream input,
org.antlr.runtime.RecognizerSharedState state)
registerRules
protected void registerRules(Grammar grammar)
getInput
public org.antlr.runtime.TokenStream getInput()
getGrammarAccess
protected abstract IGrammarAccess getGrammarAccess()
associateNodeWithAstElement
protected void associateNodeWithAstElement(ICompositeNode node,
org.eclipse.emf.ecore.EObject astElement)
setTokenTypeMap
public void setTokenTypeMap(java.util.Map<java.lang.Integer,java.lang.String> tokenTypeMap)
setSyntaxErrorProvider
public void setSyntaxErrorProvider(ISyntaxErrorMessageProvider syntaxErrorProvider)
getSyntaxErrorProvider
public ISyntaxErrorMessageProvider getSyntaxErrorProvider()
set
protected void set(org.eclipse.emf.ecore.EObject _this,
java.lang.String feature,
java.lang.Object value,
java.lang.String lexerRule,
INode node)
set
protected void set(org.eclipse.emf.ecore.EObject _this,
java.lang.String feature,
java.lang.Object value,
java.lang.String lexerRule)
setWithLastConsumed
protected void setWithLastConsumed(org.eclipse.emf.ecore.EObject _this,
java.lang.String feature,
java.lang.Object value,
java.lang.String lexerRule)
add
protected void add(org.eclipse.emf.ecore.EObject _this,
java.lang.String feature,
java.lang.Object value,
java.lang.String lexerRule,
INode node)
add
protected void add(org.eclipse.emf.ecore.EObject _this,
java.lang.String feature,
java.lang.Object value,
java.lang.String lexerRule)
addWithLastConsumed
protected void addWithLastConsumed(org.eclipse.emf.ecore.EObject _this,
java.lang.String feature,
java.lang.Object value,
java.lang.String lexerRule)
appendError
protected void appendError(INode node)
appendAllTokens
protected void appendAllTokens()
getLastLeafNode
protected INode getLastLeafNode()
appendSkippedTokens
protected java.util.List<ILeafNode> appendSkippedTokens()
appendTrailingHiddenTokens
protected void appendTrailingHiddenTokens()
recover
public void recover(org.antlr.runtime.IntStream input,
org.antlr.runtime.RecognitionException re)
- Description copied from class:
org.antlr.runtime.BaseRecognizer
- Recover from an error found on the input stream. This is
for NoViableAlt and mismatched symbol exceptions. If you enable
single token insertion and deletion, this will usually not
handle mismatched symbol exceptions but there could be a mismatched
token that the match() routine could not recover from.
- Overrides:
recover
in class org.antlr.runtime.BaseRecognizer
getValueConverterExceptionMessage
protected java.lang.String getValueConverterExceptionMessage(ValueConverterException vce)
handleValueConverterException
protected void handleValueConverterException(ValueConverterException vce)
createValueConverterErrorContext
protected ISyntaxErrorMessageProvider.IValueConverterErrorContext createValueConverterErrorContext(ValueConverterException vce)
getErrorMessage
public java.lang.String getErrorMessage(org.antlr.runtime.RecognitionException e,
java.lang.String[] tokenNames)
- Description copied from class:
org.antlr.runtime.BaseRecognizer
- What error message should be generated for the various
exception types?
Not very object-oriented code, but I like having all error message
generation within one method rather than spread among all of the
exception classes. This also makes it much easier for the exception
handling because the exception classes do not have to have pointers back
to this object to access utility routines and so on. Also, changing
the message for an exception type would be difficult because you
would have to subclassing exception, but then somehow get ANTLR
to make those kinds of exception objects instead of the default.
This looks weird, but trust me--it makes the most sense in terms
of flexibility.
For grammar debugging, you will want to override this to add
more information such as the stack frame with
getRuleInvocationStack(e, this.getClass().getName()) and,
for no viable alts, the decision description and state etc...
Override this to change the message generated for one or more
exception types.
- Overrides:
getErrorMessage
in class org.antlr.runtime.BaseRecognizer
displayRecognitionError
public void displayRecognitionError(java.lang.String[] tokenNames,
org.antlr.runtime.RecognitionException e)
- Overrides:
displayRecognitionError
in class org.antlr.runtime.BaseRecognizer
reportError
public void reportError(org.antlr.runtime.RecognitionException e)
- Description copied from class:
org.antlr.runtime.BaseRecognizer
- Report a recognition problem.
This method sets errorRecovery to indicate the parser is recovering
not parsing. Once in recovery mode, no errors are generated.
To get out of recovery mode, the parser must successfully match
a token (after a resync). So it will go:
1. error occurs
2. enter recovery mode, report error
3. consume until token found in resynch set
4. try to resume parsing
5. next match() will reset errorRecovery mode
If you override, make sure to update syntaxErrors if you care about that.
- Overrides:
reportError
in class org.antlr.runtime.BaseRecognizer
recoverFromMismatchedToken
protected java.lang.Object recoverFromMismatchedToken(org.antlr.runtime.IntStream input,
int ttype,
org.antlr.runtime.BitSet follow)
throws org.antlr.runtime.RecognitionException
- Description copied from class:
org.antlr.runtime.BaseRecognizer
- Attempt to recover from a single missing or extra token.
EXTRA TOKEN
LA(1) is not what we are looking for. If LA(2) has the right token,
however, then assume LA(1) is some extra spurious token. Delete it
and LA(2) as if we were doing a normal match(), which advances the
input.
MISSING TOKEN
If current token is consistent with what could come after
ttype then it is ok to "insert" the missing token, else throw
exception For example, Input "i=(3;" is clearly missing the
')'. When the parser returns from the nested call to expr, it
will have call chain:
stat -> expr -> atom
and it will be trying to match the ')' at this point in the
derivation:
=> ID '=' '(' INT ')' ('+' atom)* ';'
^
match() will see that ';' doesn't match ')' and report a
mismatched token error. To recover, it sees that LA(1)==';'
is in the set of tokens that can follow the ')' token
reference in rule atom. It can assume that you forgot the ')'.
- Overrides:
recoverFromMismatchedToken
in class org.antlr.runtime.BaseRecognizer
- Throws:
org.antlr.runtime.RecognitionException
getSyntaxErrorMessage
public SyntaxErrorMessage getSyntaxErrorMessage(org.antlr.runtime.RecognitionException e,
java.lang.String[] tokenNames)
superGetErrorMessage
protected java.lang.String superGetErrorMessage(org.antlr.runtime.RecognitionException e,
java.lang.String[] tokenNames)
createErrorContext
protected ISyntaxErrorMessageProvider.IParserErrorContext createErrorContext(org.antlr.runtime.RecognitionException e)
parse
public final IParseResult parse()
throws org.antlr.runtime.RecognitionException
- Throws:
org.antlr.runtime.RecognitionException
parse
public final IParseResult parse(java.lang.String entryRuleName)
throws org.antlr.runtime.RecognitionException
- Throws:
org.antlr.runtime.RecognitionException
emitErrorMessage
public void emitErrorMessage(java.lang.String msg)
- Description copied from class:
org.antlr.runtime.BaseRecognizer
- Override this method to change where error messages go
- Overrides:
emitErrorMessage
in class org.antlr.runtime.BaseRecognizer
getFirstRuleName
protected abstract java.lang.String getFirstRuleName()
- Returns:
- the name of the entry rule.
setUnorderedGroupHelper
public void setUnorderedGroupHelper(IUnorderedGroupHelper unorderedGroupHelper)
getUnorderedGroupHelper
public IUnorderedGroupHelper getUnorderedGroupHelper()
afterParserOrEnumRuleCall
protected void afterParserOrEnumRuleCall()
createModelElementForParent
protected org.eclipse.emf.ecore.EObject createModelElementForParent(AbstractRule rule)
createModelElement
protected org.eclipse.emf.ecore.EObject createModelElement(AbstractRule rule)
createModelElementForParent
protected org.eclipse.emf.ecore.EObject createModelElementForParent(org.eclipse.emf.ecore.EClassifier classifier)
createModelElement
protected org.eclipse.emf.ecore.EObject createModelElement(org.eclipse.emf.ecore.EClassifier classifier)
createModelElement
protected org.eclipse.emf.ecore.EObject createModelElement(org.eclipse.emf.ecore.EClassifier classifier,
ICompositeNode compositeNode)
forceCreateModelElementAndSet
protected org.eclipse.emf.ecore.EObject forceCreateModelElementAndSet(Action action,
org.eclipse.emf.ecore.EObject value)
forceCreateModelElementAndAdd
protected org.eclipse.emf.ecore.EObject forceCreateModelElementAndAdd(Action action,
org.eclipse.emf.ecore.EObject value)
forceCreateModelElement
protected org.eclipse.emf.ecore.EObject forceCreateModelElement(Action action,
org.eclipse.emf.ecore.EObject value)
insertCompositeNode
protected void insertCompositeNode(Action action)
enterRule
protected void enterRule()
leaveRule
protected void leaveRule()
newCompositeNode
protected void newCompositeNode(org.eclipse.emf.ecore.EObject grammarElement)
newLeafNode
protected void newLeafNode(org.antlr.runtime.Token token,
org.eclipse.emf.ecore.EObject grammarElement)
setNodeModelBuilder
public void setNodeModelBuilder(NodeModelBuilder nodeModelBuilder)
getNodeModelBuilder
public NodeModelBuilder getNodeModelBuilder()
setSemanticModelBuilder
public void setSemanticModelBuilder(IAstFactory semanticModelBuilder)
getSemanticModelBuilder
public IAstFactory getSemanticModelBuilder()