Class DFAState
- java.lang.Object
-
- org.antlr.v4.runtime.dfa.DFAState
-
public class DFAState extends Object
A DFA state represents a set of possible ATN configurations. As Aho, Sethi, Ullman p. 117 says "The DFA uses its state to keep track of all possible states the ATN can be in after reading each input symbol. That is to say, after reading input a1a2..an, the DFA is in a state that represents the subset T of the states of the ATN that are reachable from the ATN's start state along some path labeled a1a2..an." In conventional NFA→DFA conversion, therefore, the subset T would be a bitset representing the set of states the ATN could be in. We need to track the alt predicted by each state as well, however. More importantly, we need to maintain a stack of states, tracking the closure operations as they jump from rule to rule, emulating rule invocations (method calls). I have to add a stack to simulate the proper lookahead sequences for the underlying LL grammar from which the ATN was derived.I use a set of ATNConfig objects not simple states. An ATNConfig is both a state (ala normal conversion) and a RuleContext describing the chain of rules (if any) followed to arrive at that state.
A DFA state may have multiple references to a particular state, but with different ATN contexts (with same or different alts) meaning that state was reached via a different set of rule invocations.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
DFAState.PredPrediction
Map a predicate to a predicted alternative.
-
Field Summary
Fields Modifier and Type Field Description ATNConfigSet
configs
DFAState[]
edges
edges[symbol]
points to target of symbol.boolean
isAcceptState
LexerActionExecutor
lexerActionExecutor
DFAState.PredPrediction[]
predicates
During SLL parsing, this is a list of predicates associated with the ATN configurations of the DFA state.int
prediction
if accept state, what ttype do we match or alt do we predict? This is set toATN.INVALID_ALT_NUMBER
whenpredicates
!=null
orrequiresFullContext
.boolean
requiresFullContext
Indicates that this state was created during SLL prediction that discovered a conflict between the configurations in the state.int
stateNumber
-
Constructor Summary
Constructors Constructor Description DFAState()
DFAState(int stateNumber)
DFAState(ATNConfigSet configs)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
equals(Object o)
TwoDFAState
instances are equal if their ATN configuration sets are the same.Set<Integer>
getAltSet()
Get the set of all alts mentioned by all ATN configurations in this DFA state.int
hashCode()
String
toString()
-
-
-
Field Detail
-
stateNumber
public int stateNumber
-
configs
public ATNConfigSet configs
-
edges
public DFAState[] edges
-
isAcceptState
public boolean isAcceptState
-
prediction
public int prediction
if accept state, what ttype do we match or alt do we predict? This is set toATN.INVALID_ALT_NUMBER
whenpredicates
!=null
orrequiresFullContext
.
-
lexerActionExecutor
public LexerActionExecutor lexerActionExecutor
-
requiresFullContext
public boolean requiresFullContext
Indicates that this state was created during SLL prediction that discovered a conflict between the configurations in the state. FutureParserATNSimulator.execATN(org.antlr.v4.runtime.dfa.DFA, org.antlr.v4.runtime.dfa.DFAState, org.antlr.v4.runtime.TokenStream, int, org.antlr.v4.runtime.ParserRuleContext)
invocations immediately jumped doing full context prediction if this field is true.
-
predicates
public DFAState.PredPrediction[] predicates
During SLL parsing, this is a list of predicates associated with the ATN configurations of the DFA state. When we have predicates,requiresFullContext
isfalse
since full context prediction evaluates predicates on-the-fly. If this is not null, thenprediction
isATN.INVALID_ALT_NUMBER
.We only use these for non-
requiresFullContext
but conflicting states. That means we know from the context (it's $ or we don't dip into outer context) that it's an ambiguity not a conflict.This list is computed by
ParserATNSimulator.predicateDFAState(org.antlr.v4.runtime.dfa.DFAState, org.antlr.v4.runtime.atn.DecisionState)
.
-
-
Constructor Detail
-
DFAState
public DFAState()
-
DFAState
public DFAState(int stateNumber)
-
DFAState
public DFAState(ATNConfigSet configs)
-
-
Method Detail
-
getAltSet
public Set<Integer> getAltSet()
Get the set of all alts mentioned by all ATN configurations in this DFA state.
-
equals
public boolean equals(Object o)
TwoDFAState
instances are equal if their ATN configuration sets are the same. This method is used to see if a state already exists.Because the number of alternatives and number of ATN configurations are finite, there is a finite number of DFA states that can be processed. This is necessary to show that the algorithm terminates.
Cannot test the DFA state numbers here because in
ParserATNSimulator.addDFAState(org.antlr.v4.runtime.dfa.DFA, org.antlr.v4.runtime.dfa.DFAState)
we need to know if any other state exists that has this exact set of ATN configurations. ThestateNumber
is irrelevant.
-
-