MimIR 0.1
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
dfa.cpp
Go to the documentation of this file.
1#include "automaton/dfa.h"
2
3#include <absl/container/flat_hash_map.h>
4
7
8namespace automaton {
9
10void DFANode::add_transition(const DFANode* to, std::uint16_t c) { transitions_[c] = to; }
11
12const DFANode* DFANode::get_transition(std::uint16_t c) const {
13 if (erroring_) return nullptr;
14 if (auto i = transitions_.find(c); i != transitions_.end()) return i->second;
15 return nullptr;
16}
17
18template class AutomatonBase<DFANode>;
19
20std::ostream& operator<<(std::ostream& os, const DFANode& node) {
21 auto print_char = [](std::uint16_t c) -> std::string {
22 if (c >= 48 && c <= 122) return {static_cast<char>(c)};
23 return std::to_string(c);
24 };
25 return print_node(os, node, print_char);
26}
27
28} // namespace automaton
const DFANode * get_transition(std::uint16_t c) const
Definition dfa.cpp:12
void add_transition(const DFANode *to, std::uint16_t c)
Definition dfa.cpp:10
std::ostream & operator<<(std::ostream &os, const DFANode &node)
Definition dfa.cpp:20
std::ostream & print_node(std::ostream &os, const NodeType &node, PrintCharF &&print_char)
Definition automaton.h:70