diff --git a/src/DFA/DFAGraph.cpp b/src/DFA/DFAGraph.cpp index 3742ec0..ad280b7 100644 --- a/src/DFA/DFAGraph.cpp +++ b/src/DFA/DFAGraph.cpp @@ -131,7 +131,7 @@ void DFAGraph::CreateDotFile(const std::string& filename) const { for (auto& i: vertexes_) { for (auto& j: i.second.transitions_) { - out << i.first << "." << j.second << "[label=" << j.first << "]\n"; + out << i.first << "->" << j.second << "[label=" << j.first << "]\n"; } if (i.second.IsStart() && i.second.IsFinal()) { out << " " << i.first << " [shape=star];\n"; diff --git a/src/converters/DFAToMinDFA.cpp b/src/converters/DFAToMinDFA.cpp index 591e49e..af52be9 100644 --- a/src/converters/DFAToMinDFA.cpp +++ b/src/converters/DFAToMinDFA.cpp @@ -66,6 +66,7 @@ DFAGraph DFAGraphToMinDFAGraph(DFAGraph&& graph) { } } + /* for (int i = 0; i < n; ++i) { for (int k = 0; k < n; ++k) { for (int j = 0; j < alphabet.size() + 1; ++j) { @@ -75,6 +76,7 @@ DFAGraph DFAGraphToMinDFAGraph(DFAGraph&& graph) { } std::cout << std::endl; } + */ std::vector>& last_layer(table.back()); size_t count_vertex = 0; diff --git a/src/converters/InvertFDFA.cpp b/src/converters/InvertFDFA.cpp index 61ad9e2..429060b 100644 --- a/src/converters/InvertFDFA.cpp +++ b/src/converters/InvertFDFA.cpp @@ -5,7 +5,7 @@ DFAGraph InvertFDFAGraph(DFAGraph&& fdfa_graph) { const size_t n = fdfa_graph.GetCountVertexes(); for (int i = 0; i < n; ++i) { if (fdfa_graph.NotExistVertex(i)) continue; - fdfa_graph.GetVertex(i).SetFinal(fdfa_graph.GetVertex(i).IsFinal()); + fdfa_graph.GetVertex(i).SetFinal(!fdfa_graph.GetVertex(i).IsFinal()); } return std::move(fdfa_graph); } diff --git a/src/main.cpp b/src/main.cpp index 6cd9217..9187628 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -50,7 +50,20 @@ void example2() { } int main() { + { + RegularTree r("a*"); + NFAGraph NFA_graph = RegularToNFAGraph(std::move(r)); + DFAGraph DFA_graph = NFAGraphToDFAGraph(std::move(NFA_graph)); + DFA_graph = DFAGraphToMinDFAGraph(std::move(DFA_graph)); + DFA_graph = DFAGraphToFDFAGraph(std::move(DFA_graph), {'a', 'b'}); + DFA_graph.Print(); + DFA_graph.CreateDotFile("1.dot"); + DFA_graph = InvertFDFAGraph(std::move(DFA_graph)); + DFA_graph.CreateDotFile("2.dot"); + DFA_graph = DFAGraphToMinDFAGraph(std::move(DFA_graph)); + } + return 0; { RegularTree r("((ab|ba)*( |a|ba))"); NFAGraph NFA_tree = RegularToNFAGraph(std::move(r)); diff --git a/tests/NFAToDFA/CheckEquivalence.cpp b/tests/NFAToDFA/CheckEquivalence.cpp index 2594763..2b84cfa 100644 --- a/tests/NFAToDFA/CheckEquivalence.cpp +++ b/tests/NFAToDFA/CheckEquivalence.cpp @@ -26,13 +26,13 @@ TEST(check_equivalence_NFA_to_DFA, 1) { for (int i = 0; i < N; ++i) a[i] = tree.AddNewVertex(); - tree.GetVertex(a[0])->AddEdge('a', a[1]); - tree.GetVertex(a[1])->AddEdge('a', a[2]); - tree.GetVertex(a[0])->AddEdge('a', a[3]); + tree.GetVertex(a[0]).AddEdge('a', a[1]); + tree.GetVertex(a[1]).AddEdge('a', a[2]); + tree.GetVertex(a[0]).AddEdge('a', a[3]); - tree.GetVertex(a[0])->SetStart(true); - tree.GetVertex(a[2])->SetFinal(true); - tree.GetVertex(a[3])->SetFinal(true); + tree.GetVertex(a[0]).SetStart(true); + tree.GetVertex(a[2]).SetFinal(true); + tree.GetVertex(a[3]).SetFinal(true); DFA::DFAGraph res = converters::NFAGraphToDFAGraph(std::move(tree)); @@ -53,14 +53,14 @@ TEST(check_equivalence_NFA_to_DFA, 2) { for (int i = 0; i < N; ++i) a[i] = tree.AddNewVertex(); - tree.GetVertex(a[0])->AddEdge('a', a[1]); - tree.GetVertex(a[0])->AddEdge('a', a[2]); - tree.GetVertex(a[1])->AddEdge('b', a[1]); - tree.GetVertex(a[2])->AddEdge('c', a[2]); + tree.GetVertex(a[0]).AddEdge('a', a[1]); + tree.GetVertex(a[0]).AddEdge('a', a[2]); + tree.GetVertex(a[1]).AddEdge('b', a[1]); + tree.GetVertex(a[2]).AddEdge('c', a[2]); - tree.GetVertex(a[0])->SetStart(true); - tree.GetVertex(a[1])->SetFinal(true); - tree.GetVertex(a[2])->SetFinal(true); + tree.GetVertex(a[0]).SetStart(true); + tree.GetVertex(a[1]).SetFinal(true); + tree.GetVertex(a[2]).SetFinal(true); DFA::DFAGraph res = converters::NFAGraphToDFAGraph(std::move(tree));