some fix bugs

This commit is contained in:
MaxanRus 2021-10-05 17:12:00 +03:00
parent aad17d8c8c
commit 0947eeac5d
3 changed files with 14 additions and 6 deletions

View file

@ -51,6 +51,7 @@ void DFAGraph::RemoveVertex(size_t number) {
RemoveFinalVertex(number); RemoveFinalVertex(number);
RemoveStartVertex(number); RemoveStartVertex(number);
vertexes_.erase(number); vertexes_.erase(number);
if (number == count_vertexes_ - 1) count_vertexes_--;
} }
void DFAGraph::RemoveFinalVertex(size_t number) { void DFAGraph::RemoveFinalVertex(size_t number) {

View file

@ -10,6 +10,7 @@ DFAGraph DFAGraphToMinDFAGraph(DFAGraph&& graph) {
{ {
std::set<char> set_alphabet; std::set<char> set_alphabet;
for (int i = 0; i < n; ++i) { for (int i = 0; i < n; ++i) {
if (!graph.GetVertex(i)) continue;
for (auto i: graph.GetVertex(i)->GetTransitions()) { for (auto i: graph.GetVertex(i)->GetTransitions()) {
set_alphabet.insert(i.first); set_alphabet.insert(i.first);
} }

View file

@ -50,17 +50,21 @@ void example2() {
} }
int main() { int main() {
{ {
RegularTree r("a*"); RegularTree r("(a|b)+bab(a|b)+");
NFAGraph NFA_tree = RegularToNFAGraph(std::move(r)); NFAGraph NFA_tree = RegularToNFAGraph(std::move(r));
DFAGraph DFA_graph = NFAGraphToDFAGraph(std::move(NFA_tree)); DFAGraph DFA_graph = NFAGraphToDFAGraph(std::move(NFA_tree));
DFA_graph = DFAGraphToMinDFAGraph(std::move(DFA_graph)); DFA_graph = DFAGraphToMinDFAGraph(std::move(DFA_graph));
DFA_graph = DFAGraphToFDFAGraph(std::move(DFA_graph), {'a', 'b', 'c', 'd'}); DFA_graph = DFAGraphToFDFAGraph(std::move(DFA_graph), {'a', 'b'});
DFA_graph.Print();
DFA_graph = InvertFDFAGraph(std::move(DFA_graph)); DFA_graph = InvertFDFAGraph(std::move(DFA_graph));
return 0;
DFA_graph = DFAGraphToMinDFAGraph(std::move(DFA_graph)); 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; return 0;
RegularTree r("a*"); RegularTree r("a*");
@ -74,6 +78,8 @@ int main() {
dfa = DFAGraphToMinDFAGraph(std::move(fdfa)); dfa = DFAGraphToMinDFAGraph(std::move(fdfa));
auto s = DFAGraphToRegular(std::move(dfa)); 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;
*/
} }