MimIR
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
nfa.cpp
Go to the documentation of this file.
1#include "automaton/nfa.h"
2
3#include <string>
4
6
7namespace automaton {
8
9void NFANode::add_transition(const NFANode* to, std::uint16_t c) { transitions_[c].push_back(to); }
10
11std::vector<const NFANode*> NFANode::get_transitions(std::uint16_t c) const {
12 if (erroring_) return {};
13
14 if (auto it = transitions_.find(c); it != transitions_.end())
15 return it->second;
16 else
17 return {};
18}
19
20template class AutomatonBase<NFANode>;
21
22void NFANode::print(std::ostream& os) const {
23 auto print_char = [](std::uint16_t c) -> std::string {
25 return "ε";
26 else if (c >= 48 && c <= 122)
27 return {static_cast<char>(c)};
28 return std::to_string(c);
29 };
30
31 print_node(os, *this, print_char);
32}
33
34} // namespace automaton
void print(std::ostream &os) const
Definition nfa.cpp:22
NFANode(int id)
Definition nfa.h:20
std::vector< const NFANode * > get_transitions(std::uint16_t c) const
Definition nfa.cpp:11
void add_transition(const NFANode *to, std::uint16_t c)
Definition nfa.cpp:9
void print_node(std::ostream &os, const NodeType &node, std::invocable< std::uint64_t > auto print_char)
Definition automaton.h:79