diff --git a/src/automata.cpp b/src/automata.cpp index 07605d7..b2d1a34 100644 --- a/src/automata.cpp +++ b/src/automata.cpp @@ -7,7 +7,7 @@ namespace lxs { std::string toDot(const DFA& d) { - std::string s = "digraph {\nrankdir=LR\nin [shape=point style=invis]"; + std::string s = "digraph {\nrankdir=LR\nin [shape=point style=invis]\n"; for (State state = 0; state < d.numStates; state++) { @@ -128,7 +128,7 @@ namespace lxs { return rev; } - void markReachable(const DFA& d, State s, std::set reachable) { + void markReachable(const DFA& d, State s, std::set& reachable) { if (reachable.count(s) > 0) return; reachable.insert(s); @@ -194,7 +194,7 @@ namespace lxs { /** * Do the actual minimisation, using precomputed distinguishable pairs */ - DFA compress(const DFA& d, std::set reachables, Distinguishables& dist) { + DFA compress(const DFA& d, std::set& reachables, Distinguishables& dist) { DFA min; min.starting = d.starting; @@ -244,9 +244,8 @@ namespace lxs { for (State s = 0; s < d.numStates; s++) { if (done.count(newStates[s]) > 0) continue; done.insert(newStates[s]); - for (int i = 0; i < 256; i++) { - min.delta[newStates[s]][(char) i] = newStates[d.delta.find(s)->second.find((char) i)->second]; - } + for (const auto& p : d.delta.find(s)->second) + min.delta[newStates[s]][p.first] = newStates[p.second]; } return min;