Top Description Fields Constructors Methods
org.antlr.v4.automata

public Class ParserATNFactory

extends Object
implements ATNFactory
Class Inheritance
All Implemented Interfaces
org.antlr.v4.automata.ATNFactory
Known Direct Subclasses
org.antlr.v4.automata.LexerATNFactory
Imports
org.antlr.runtime.RecognitionException, .Token, org.antlr.runtime.tree.CommonTreeNodeStream, .Tree, org.antlr.v4.analysis.LeftRecursiveRuleTransformer, org.antlr.v4.misc.CharSupport, org.antlr.v4.parse.ANTLRParser, .ATNBuilder, .GrammarASTAdaptor, org.antlr.v4.runtime.atn.ATN, .ATNState, .ATNType, .AbstractPredicateTransition, .ActionTransition, .AtomTransition, .BasicBlockStartState, .BasicState, .BlockEndState, .BlockStartState, .EpsilonTransition, .LL1Analyzer, .LoopEndState, .NotSetTransition, .PlusBlockStartState, .PlusLoopbackState, .PrecedencePredicateTransition, .PredicateTransition, .RuleStartState, .RuleStopState, .RuleTransition, .SetTransition, .StarBlockStartState, .StarLoopEntryState, .StarLoopbackState, .Transition, .WildcardTransition, org.antlr.v4.runtime.misc.IntervalSet, .Triple, org.antlr.v4.semantics.UseDefAnalyzer, org.antlr.v4.tool.ErrorManager, .ErrorType, .Grammar, .LeftRecursiveRule, .LexerGrammar, .Rule, org.antlr.v4.tool.ast.ActionAST, .AltAST, .BlockAST, .GrammarAST, .GrammarASTWithOptions, .PredAST, .QuantifierAST, .TerminalAST, java.lang.reflect.Constructor, .InvocationTargetException, java.util.ArrayList, .Collection, .List

ATN construction routines triggered by ATNBuilder.g. No side-effects. It builds an ATN object and returns it.

Field Summary

Modifier and TypeField and Description
public final ATN
public int
public Rule
public final Grammar
g

protected final List<Triple<Rule, ATNState, ATNState>>
protected final List<Triple<Rule, ATNState, ATNState>>

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
protected void
public ATNFactory.Handle
public ATNFactory.Handle
action(ActionAST action)

Implements org.antlr.v4.automata.ATNFactory.action.

Build what amounts to an epsilon transition with an action.
public ATNFactory.Handle
public int
addEOFTransitionToStartRules()

Add an EOF transition to any rule end ATNState that points to nothing (i.e., for all those rules not invoked by another rule).

public ATNFactory.Handle
public ATNFactory.Handle
block(BlockAST blkAST, GrammarAST ebnfRoot, List<ATNFactory.Handle> alts)

Implements org.antlr.v4.automata.ATNFactory.block.

From A|B|..|Z alternative block build
 o->o-A->o->o (last ATNState is BlockEndState pointed to by all alts)
 |          ^
 |->o-B->o--|
 |          |
 ...
public static boolean
blockHasWildcardAlt(GrammarAST block)

(BLOCK (ALT .)) or (BLOCK (ALT 'a') (ALT .)).

public ATNFactory.Handle
charSetLiteral(GrammarAST charSetAST)

Implements org.antlr.v4.automata.ATNFactory.charSetLiteral.

[Aa] char sets not allowed in parser
protected void
public ATN
pack-priv void
createRuleStartAndStopATNStates()

Define all the rule begin/end ATNStates to solve forward reference issues.

public ATNFactory.Handle
public ATNFactory.Handle
epsilon(GrammarAST node)

Implements org.antlr.v4.automata.ATNFactory.epsilon.

From an empty alternative build o-e->o.
protected void
protected void
epsilon(ATNState a, ATNState b, boolean prepend)

public boolean
protected int
public ATNFactory.Handle
public ATNFactory.Handle
public ATNFactory.Handle
public ATNFactory.Handle
public ATNFactory.Handle
protected ATNFactory.Handle
public <T extends ATNState> T
newState(Class<T> nodeType, GrammarAST node)

public ATNState
public ATNState
public ATNFactory.Handle
public ATNFactory.Handle
plus(GrammarAST plusAST, ATNFactory.Handle blk)

Implements org.antlr.v4.automata.ATNFactory.plus.

From (blk)+ build
  |---------|
  v         |
 [o-blk-o]->o->o
public ATNFactory.Handle
range(GrammarAST a, GrammarAST b)

Implements org.antlr.v4.automata.ATNFactory.range.

Not valid for non-lexers.
public ATNFactory.Handle
public ATNFactory.Handle
ruleRef(GrammarAST node)

Implements org.antlr.v4.automata.ATNFactory.ruleRef.

For reference to rule r, build
 o->(r)  o
public ATNFactory.Handle
sempred(PredAST pred)

Implements org.antlr.v4.automata.ATNFactory.sempred.

Build what amounts to an epsilon transition with a semantic predicate action.
public ATNFactory.Handle
set(GrammarAST associatedAST, List<GrammarAST> terminals, boolean invert)

Implements org.antlr.v4.automata.ATNFactory.set.

From set build single edge graph o->o-set->o.
public void
public void
public ATNFactory.Handle
star(GrammarAST starAST, ATNFactory.Handle elem)

Implements org.antlr.v4.automata.ATNFactory.star.

From (blk)* build ( blk+ )?
public ATNFactory.Handle
stringLiteral(TerminalAST stringLiteralAST)

Implements org.antlr.v4.automata.ATNFactory.stringLiteral.

For a non-lexer, just build a simple token reference atom.
public ATNFactory.Handle
tokenRef(TerminalAST node)

Implements org.antlr.v4.automata.ATNFactory.tokenRef.

From label A build graph o-A->o.
public ATNFactory.Handle
wildcard(GrammarAST node)

Implements org.antlr.v4.automata.ATNFactory.wildcard.

Build an atom with all possible values in its label.
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

atnback to summary
public final ATN atn
currentOuterAltback to summary
public int currentOuterAlt
currentRuleback to summary
public Rule currentRule
gback to summary
public final Grammar g
preventEpsilonClosureBlocksback to summary
protected final List<Triple<Rule, ATNState, ATNState>> preventEpsilonClosureBlocks
preventEpsilonOptionalBlocksback to summary
protected final List<Triple<Rule, ATNState, ATNState>> preventEpsilonOptionalBlocks

Constructor Detail

ParserATNFactoryback to summary
public ParserATNFactory(Grammar g)

Method Detail

_createATNback to summary
protected void _createATN(Collection<Rule> rules)
_ruleRefback to summary
public ATNFactory.Handle _ruleRef(GrammarAST node)
actionback to summary
public ATNFactory.Handle action(ActionAST action)

Implements org.antlr.v4.automata.ATNFactory.action.

Build what amounts to an epsilon transition with an action. The action goes into ATN though it is ignored during prediction if actionIndex<0.

Annotations
@Override
actionback to summary
public ATNFactory.Handle action(String action)

Implements org.antlr.v4.automata.ATNFactory.action.

Annotations
@Override
addEOFTransitionToStartRulesback to summary
public int addEOFTransitionToStartRules()

Add an EOF transition to any rule end ATNState that points to nothing (i.e., for all those rules not invoked by another rule). These are start symbols then. Return the number of grammar entry points; i.e., how many rules are not invoked by another rule (they can only be invoked from outside). These are the start rules.

altback to summary
public ATNFactory.Handle alt(List<ATNFactory.Handle> els)

Implements org.antlr.v4.automata.ATNFactory.alt.

Annotations
@Override
blockback to summary
public ATNFactory.Handle block(BlockAST blkAST, GrammarAST ebnfRoot, List<ATNFactory.Handle> alts)

Implements org.antlr.v4.automata.ATNFactory.block.

From A|B|..|Z alternative block build

 o->o-A->o->o (last ATNState is BlockEndState pointed to by all alts)
 |          ^
 |->o-B->o--|
 |          |
 ...        |
 |          |
 |->o-Z->o--|
So start node points at every alternative with epsilon transition and every alt right side points at a block end ATNState.

Special case: only one alternative: don't make a block with alt begin/end.

Special case: if just a list of tokens/chars/sets, then collapse to a single edged o-set->o graph.

Todo

Set alt number (1..n) in the states?

Annotations
@Override
blockHasWildcardAltback to summary
public static boolean blockHasWildcardAlt(GrammarAST block)

(BLOCK (ALT .)) or (BLOCK (ALT 'a') (ALT .)).

charSetLiteralback to summary
public ATNFactory.Handle charSetLiteral(GrammarAST charSetAST)

Implements org.antlr.v4.automata.ATNFactory.charSetLiteral.

[Aa] char sets not allowed in parser

Annotations
@Override
checkEpsilonClosureback to summary
protected void checkEpsilonClosure()
createATNback to summary
public ATN createATN()

Implements org.antlr.v4.automata.ATNFactory.createATN.

Annotations
@Override
createRuleStartAndStopATNStatesback to summary
pack-priv void createRuleStartAndStopATNStates()

Define all the rule begin/end ATNStates to solve forward reference issues.

elemListback to summary
public ATNFactory.Handle elemList(List<ATNFactory.Handle> els)
epsilonback to summary
public ATNFactory.Handle epsilon(GrammarAST node)

Implements org.antlr.v4.automata.ATNFactory.epsilon.

From an empty alternative build o-e->o.

Annotations
@Override
epsilonback to summary
protected void epsilon(ATNState a, ATNState b)
epsilonback to summary
protected void epsilon(ATNState a, ATNState b, boolean prepend)
expectNonGreedyback to summary
public boolean expectNonGreedy(BlockAST blkAST)
getTokenTypeback to summary
protected int getTokenType(GrammarAST atom)
labelback to summary
public ATNFactory.Handle label(ATNFactory.Handle t)

Implements org.antlr.v4.automata.ATNFactory.label.

Annotations
@Override
lexerAltCommandsback to summary
public ATNFactory.Handle lexerAltCommands(ATNFactory.Handle alt, ATNFactory.Handle cmds)

Implements org.antlr.v4.automata.ATNFactory.lexerAltCommands.

Annotations
@Override
lexerCallCommandback to summary
public ATNFactory.Handle lexerCallCommand(GrammarAST ID, GrammarAST arg)

Implements org.antlr.v4.automata.ATNFactory.lexerCallCommand.

Annotations
@Override
lexerCommandback to summary
public ATNFactory.Handle lexerCommand(GrammarAST ID)

Implements org.antlr.v4.automata.ATNFactory.lexerCommand.

Annotations
@Override
listLabelback to summary
public ATNFactory.Handle listLabel(ATNFactory.Handle t)

Implements org.antlr.v4.automata.ATNFactory.listLabel.

Annotations
@Override
makeBlockback to summary
protected ATNFactory.Handle makeBlock(BlockStartState start, BlockAST blkAST, List<ATNFactory.Handle> alts)
newStateback to summary
public <T extends ATNState> T newState(Class<T> nodeType, GrammarAST node)
newStateback to summary
public ATNState newState(GrammarAST node)
newStateback to summary
public ATNState newState()

Implements org.antlr.v4.automata.ATNFactory.newState.

Annotations
@Override
optionalback to summary
public ATNFactory.Handle optional(GrammarAST optAST, ATNFactory.Handle blk)

Implements org.antlr.v4.automata.ATNFactory.optional.

From (A)? build either:

 o--A->o
 |     ^
 o---->|
or, if A is a block, just add an empty alt to the end of the block
Annotations
@Override
plusback to summary
public ATNFactory.Handle plus(GrammarAST plusAST, ATNFactory.Handle blk)

Implements org.antlr.v4.automata.ATNFactory.plus.

From (blk)+ build

  |---------|
  v         |
 [o-blk-o]->o->o
We add a decision for loop back node to the existing one at blk start.
Annotations
@Override
rangeback to summary
public ATNFactory.Handle range(GrammarAST a, GrammarAST b)

Implements org.antlr.v4.automata.ATNFactory.range.

Not valid for non-lexers.

Annotations
@Override
ruleback to summary
public ATNFactory.Handle rule(GrammarAST ruleAST, String name, ATNFactory.Handle blk)

Implements org.antlr.v4.automata.ATNFactory.rule.

Annotations
@Override
ruleRefback to summary
public ATNFactory.Handle ruleRef(GrammarAST node)

Implements org.antlr.v4.automata.ATNFactory.ruleRef.

For reference to rule r, build

 o->(r)  o
where (r) is the start of rule r and the trailing o is not linked to from rule ref state directly (uses RuleTransition#followState).
Annotations
@Override
sempredback to summary
public ATNFactory.Handle sempred(PredAST pred)

Implements org.antlr.v4.automata.ATNFactory.sempred.

Build what amounts to an epsilon transition with a semantic predicate action. The pred is a pointer into the AST of the ANTLRParser#SEMPRED token.

Annotations
@Override
setback to summary
public ATNFactory.Handle set(GrammarAST associatedAST, List<GrammarAST> terminals, boolean invert)

Implements org.antlr.v4.automata.ATNFactory.set.

From set build single edge graph o->o-set->o. To conform to what an alt block looks like, must have extra state on left. This also handles ~A, converted to ~{A} set.

Annotations
@Override
setCurrentOuterAltback to summary
public void setCurrentOuterAlt(int alt)

Implements org.antlr.v4.automata.ATNFactory.setCurrentOuterAlt.

Annotations
@Override
setCurrentRuleNameback to summary
public void setCurrentRuleName(String name)

Implements org.antlr.v4.automata.ATNFactory.setCurrentRuleName.

Annotations
@Override
starback to summary
public ATNFactory.Handle star(GrammarAST starAST, ATNFactory.Handle elem)

Implements org.antlr.v4.automata.ATNFactory.star.

From (blk)* build ( blk+ )? with *two* decisions, one for entry and one for choosing alts of blk.

  |-------------|
  v             |
  o--[o-blk-o]->o  o
  |                ^
  -----------------|
Note that the optional bypass must jump outside the loop as (A|B)* is not the same thing as (A|B|)+.
Annotations
@Override
stringLiteralback to summary
public ATNFactory.Handle stringLiteral(TerminalAST stringLiteralAST)

Implements org.antlr.v4.automata.ATNFactory.stringLiteral.

For a non-lexer, just build a simple token reference atom.

Annotations
@Override
tokenRefback to summary
public ATNFactory.Handle tokenRef(TerminalAST node)

Implements org.antlr.v4.automata.ATNFactory.tokenRef.

From label A build graph o-A->o.

Annotations
@Override
wildcardback to summary
public ATNFactory.Handle wildcard(GrammarAST node)

Implements org.antlr.v4.automata.ATNFactory.wildcard.

Build an atom with all possible values in its label.

Annotations
@Override