22 constexpr int id() const noexcept {
return id_; }
29 if (erroring_)
return;
30 if (
auto it = transitions_.find(c); it != transitions_.end()) f(it->second);
36 if (erroring_)
return;
37 for (
auto& [c, to] : transitions_)
43 assert(!(accepting && erroring_) &&
"state cannot be accepting and erroring");
44 accepting_ = accepting;
49 assert(!(accepting_ && erroring) &&
"state cannot be accepting and erroring");
58 std::map<std::uint16_t, const DFANode*> transitions_;
59 bool accepting_ =
false;
60 bool erroring_ =
false;
63extern template class AutomatonBase<DFANode>;
75using DFAMap = std::map<const DFANode*, To, DFANode::Lt>;
76using DFASet = std::set<const DFANode*, DFANode::Lt>;
void set_erroring(bool erroring) noexcept
friend std::ostream & operator<<(std::ostream &os, const DFANode &node)
void for_transitions(F &&f) const
bool is_accepting() const noexcept
const DFANode * get_transition(std::uint16_t c) const
void add_transition(const DFANode *to, std::uint16_t c)
constexpr int id() const noexcept
bool is_erroring() const noexcept
void set_accepting(bool accepting) noexcept
void for_transitions(F &&f, std::uint16_t c) const
DFA & operator=(const DFA &)=delete
std::set< const DFANode *, DFANode::Lt > DFASet
std::map< const DFANode *, To, DFANode::Lt > DFAMap
constexpr bool operator()(const DFANode *n, const DFANode *m) const noexcept