DFAState

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.

<p>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.</p>

<p>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.</p>

Constructors

this
this()
Undocumented in source.
this
this(int stateNumber)
Undocumented in source.
this
this(ATNConfigSet configs)
Undocumented in source.

Members

Functions

getAltSet
int[] getAltSet()

Get the set of all alts mentioned by all ATN configurations in the DFA state.

opEquals
bool opEquals(Object o)

Two {@link DFAState} instances are equal if their ATN configuration sets are the same. This method is used to see if a state already exists.

toHash
size_t toHash()

@uml @override @safe @nothrow

toString
string toString()

@uml @override

Variables

configs
ATNConfigSet configs;
Undocumented in source.
edges
DFAState[] edges;

{@code edgessymbol} points to target of symbol. Shift up by 1 so (-1) {@link Token#EOF} maps to {@code edges[0]}.

isAcceptState
bool isAcceptState;
Undocumented in source.
lexerActionExecutor
LexerActionExecutor lexerActionExecutor;
Undocumented in source.
predicates
PredPrediction[] predicates;

During SLL parsing, this is a list of predicates associated with the ATN configurations of the DFA state. When we have predicates, {@link #requiresFullContext} is {@code false} since full context prediction evaluates predicates on-the-fly. If this is not null, then {@link #prediction} is {@link ATN#INVALID_ALT_NUMBER}. * <p>We only use these for non-{@link #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.</p>

prediction
int prediction;

if accept state, what ttype do we match or alt do we predict? This is set to {@link ATN#INVALID_ALT_NUMBER} when {@link #predicates}{@code !=null} or {@link #requiresFullContext}.

requiresFullContext
bool requiresFullContext;

Indicates that this state was created during SLL prediction that discovered a conflict between the configurations in the state. Future {@link ParserATNSimulator#execATN} invocations immediately jumped doing full context prediction if this field is true.

stateNumber
int stateNumber;
Undocumented in source.

Meta