diff --git a/src/DFA/DFAGraph.cpp b/src/DFA/DFAGraph.cpp index 90f8c40..1024151 100644 --- a/src/DFA/DFAGraph.cpp +++ b/src/DFA/DFAGraph.cpp @@ -51,6 +51,7 @@ void DFAGraph::RemoveVertex(size_t number) { RemoveFinalVertex(number); RemoveStartVertex(number); vertexes_.erase(number); + if (number == count_vertexes_ - 1) count_vertexes_--; } void DFAGraph::RemoveFinalVertex(size_t number) { diff --git a/src/converters/DFAToMinDFA.cpp b/src/converters/DFAToMinDFA.cpp index 5912b6d..4a67245 100644 --- a/src/converters/DFAToMinDFA.cpp +++ b/src/converters/DFAToMinDFA.cpp @@ -10,6 +10,7 @@ DFAGraph DFAGraphToMinDFAGraph(DFAGraph&& graph) { { std::set set_alphabet; for (int i = 0; i < n; ++i) { + if (!graph.GetVertex(i)) continue; for (auto i: graph.GetVertex(i)->GetTransitions()) { set_alphabet.insert(i.first); } diff --git a/src/main.cpp b/src/main.cpp index 1792d0f..47887ed 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -50,17 +50,21 @@ void example2() { } int main() { + { - RegularTree r("a*"); + RegularTree r("(a|b)+bab(a|b)+"); NFAGraph NFA_tree = RegularToNFAGraph(std::move(r)); DFAGraph DFA_graph = NFAGraphToDFAGraph(std::move(NFA_tree)); DFA_graph = DFAGraphToMinDFAGraph(std::move(DFA_graph)); - DFA_graph = DFAGraphToFDFAGraph(std::move(DFA_graph), {'a', 'b', 'c', 'd'}); - DFA_graph.Print(); + DFA_graph = DFAGraphToFDFAGraph(std::move(DFA_graph), {'a', 'b'}); DFA_graph = InvertFDFAGraph(std::move(DFA_graph)); - return 0; DFA_graph = DFAGraphToMinDFAGraph(std::move(DFA_graph)); + DFA_graph.Print(); + auto s = DFAGraphToRegular(std::move(DFA_graph)); + std::cout << s << std::endl; + r = RegularTree(s); + r.Print(); } return 0; RegularTree r("a*"); @@ -74,6 +78,8 @@ int main() { dfa = DFAGraphToMinDFAGraph(std::move(fdfa)); auto s = DFAGraphToRegular(std::move(dfa)); - // RegularTree r("(a|b)+bab(a|b)+"); - // std::cout << DFAGraphToRegular(DFAGraphToMinDFAGraph(InvertFDFAGraph(DFAGraphToFDFAGraph(DFAGraphToMinDFAGraph(NFAGraphToDFAGraph(RegularToNFAGraph(std::move(r)))), {'a', 'b'})))) << std::endl; + /* + RegularTree r("(a|b)+bab(a|b)+"); + std::cout << DFAGraphToRegular(DFAGraphToMinDFAGraph(InvertFDFAGraph(DFAGraphToFDFAGraph(DFAGraphToMinDFAGraph(NFAGraphToDFAGraph(RegularToNFAGraph(std::move(r)))), {'a', 'b'})))) << std::endl; + */ }