module antlr.v4.runtime.atn.SimState;

import antlr.v4.runtime.dfa.DFAState;

/**
 * When we hit an accept state in either the DFA or the ATN, we
 * have to notify the character stream to start buffering characters
 * via {@link IntStream#mark} and record the current state. The current sim state
 * includes the current index into the input, the current line,
 * and current character position in that line. Note that the Lexer is
 * tracking the starting line and characterization of the token. These
 * variables track the "state" of the simulator when it hits an accept state.
 *
 * <p>We track these variables separately for the DFA and ATN simulation
 * because the DFA simulation often has to fail over to the ATN
 * simulation. If the ATN simulation fails, we need the DFA to fall
 * back to its previously accepted state, if any. If the ATN succeeds,
 * then the ATN does the accept and the DFA simulator that invoked it
 * can simply return the predicted token type.</p>
 */
struct SimState
{

    public int index = -1;

    public int line = 0;

    public int charPos = -1;

    public DFAState dfaState;

    public void reset()
    {
        index = -1;
        line = 0;
        charPos = -1;
        dfaState = null;
    }

}