#pragma once
#include "dfa/DFAState.h"
namespace antlr4 {
namespace dfa {
class ANTLR4CPP_PUBLIC DFA final {
private:
struct DFAStateHasher final {
size_t operator()(const DFAState *dfaState) const {
return dfaState->hashCode();
}
};
struct DFAStateComparer final {
bool operator()(const DFAState *lhs, const DFAState *rhs) const {
return lhs == rhs || *lhs == *rhs;
}
};
public:
atn::DecisionState *atnStartState;
std::unordered_set<DFAState*, DFAStateHasher, DFAStateComparer> states; DFAState *s0;
size_t decision;
explicit DFA(atn::DecisionState *atnStartState);
DFA(atn::DecisionState *atnStartState, size_t decision);
DFA(const DFA &other) = delete;
DFA(DFA &&other);
~DFA();
bool isPrecedenceDfa() const;
DFAState* getPrecedenceStartState(int precedence) const;
void setPrecedenceStartState(int precedence, DFAState *startState);
std::vector<DFAState *> getStates() const;
std::string toString(const Vocabulary &vocabulary) const;
std::string toLexerString() const;
private:
bool _precedenceDfa;
};
} }