From 895d5c62d644d2bdf6e7ea4389526ba48f674ba4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= <peckato1@fit.cvut.cz>
Date: Thu, 11 Sep 2014 17:43:41 +0200
Subject: [PATCH] algo: BrzozowskiRRG: Enable optimizations, fix valgrind's
 complaint

---
 .../re2rg/re2rrg/BrzozowskiDerivationRRG.cpp  | 12 ++++-----
 tests.aconversion.sh                          | 26 +++++++++----------
 2 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/alib2algo/src/conversions/re2rg/re2rrg/BrzozowskiDerivationRRG.cpp b/alib2algo/src/conversions/re2rg/re2rrg/BrzozowskiDerivationRRG.cpp
index af145f5ca2..60c1bab6c3 100644
--- a/alib2algo/src/conversions/re2rg/re2rrg/BrzozowskiDerivationRRG.cpp
+++ b/alib2algo/src/conversions/re2rg/re2rrg/BrzozowskiDerivationRRG.cpp
@@ -41,13 +41,12 @@ void BrzozowskiDerivationRRG::Visit(void* userData, const regexp::UnboundedRegEx
 grammar::RightRG BrzozowskiDerivationRRG::convert(const regexp::RegExp& regexp)
 {
     // 1.
-    // regexp::RegExpOptimize opt;
-    // RegExp V = opt.optimize(regexp);
-    regexp::RegExp V = regexp;
+    regexp::RegExpOptimize opt;
+    regexp::RegExp V = opt.optimize(regexp);
 
     std::pair<std::set<alphabet::Symbol>, bool> out({}, false);
     regexp.getData().Accept((void*) &out, *this);
-    const std::set<alphabet::Symbol>& alphabet = out.first;
+    const std::set<alphabet::Symbol> alphabet = out.first;
 
     std::set<regexp::RegExp> N = { V };
     std::deque<std::set<regexp::RegExp>> Ni;
@@ -70,7 +69,7 @@ grammar::RightRG BrzozowskiDerivationRRG::convert(const regexp::RegExp& regexp)
             {
                 string::LinearString string(std::vector<alphabet::Symbol>{a});
                 regexp::RegExp derived = deriv.derivation(dregexp, string);
-                // derived = opt.optimize(derived);
+                derived = opt.optimize(derived);
 
                 // this will also add \emptyset as a regexp (and as FA state)
                 if(N.count(derived) == 0) // if this state has already been found, do not add
@@ -100,6 +99,7 @@ grammar::RightRG BrzozowskiDerivationRRG::convert(const regexp::RegExp& regexp)
 
         alphabet::Symbol nt = alphabet::createUniqueSymbol(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel(std::toBase26(nonterminalId++))))), grammar.getTerminalAlphabet(), grammar.getNonterminalAlphabet());
         nonterminalMap.insert(std::make_pair(r, nt));
+        grammar.addNonterminalSymbol(nt);
     }
 
     for(const auto & r : N)
@@ -110,7 +110,7 @@ grammar::RightRG BrzozowskiDerivationRRG::convert(const regexp::RegExp& regexp)
         {
             string::LinearString string(std::vector<alphabet::Symbol>{a});
             regexp::RegExp derived = deriv.derivation(r, string);
-            // derived = opt.optimize(derived);
+            derived = opt.optimize(derived);
 
             grammar.addRule(nonterminalMap.find(r)->second, std::make_pair(a, nonterminalMap.find(derived)->second));
 
diff --git a/tests.aconversion.sh b/tests.aconversion.sh
index 73ecbc2d2d..a4fe608aee 100755
--- a/tests.aconversion.sh
+++ b/tests.aconversion.sh
@@ -85,7 +85,7 @@ function runTest2 {
 	fi
 }
 
-# $1 - aconversion2 sequence
+# $1 - aconversions2 sequence
 function runTest {
 	RES_GOOD=0
 	RES_FAIL=0
@@ -157,8 +157,8 @@ function runTest {
 	echo ""
 }
 
-# FA -> RG -> FA
-# covers: FA -> LRG, FA -> RRG, RRG <-> LRG, RRG -> FA, LRG -> FA
+## FA -> RG -> FA
+## covers: FA -> LRG, FA -> RRG, RRG <-> LRG, RRG -> FA, LRG -> FA
 runTest "./aconversions2 -t RRG | ./aconversions2 -t LRG | ./aconversions2 -t FA"
 runTest "./aconversions2 -t LRG | ./aconversions2 -t RRG | ./aconversions2 -t FA"
 
@@ -173,16 +173,16 @@ runTest "./aconversions2 -t RE -a elimination | ./aconversions2 -t FA -a glushko
 
 # FA -> RE -> RRG -> LRG -> FA
 # covers: FA -> RE (Brz. algebraic, elimination), RE -> RRG ( Brz. derivation, Glushkov), RRG -> LRG, LRG -> FA
-runTest "./aconversions2 -t RE -a algebraic | ./aconversions2 -t RRG -a brzozowski | ./aconversion2 -t LRG | ./aconversion2 -t FA"
-runTest "./aconversions2 -ts2-t RE -a algebraic | ./aconversions2 -t RRG -a glushkov | ./aconversion2 -t LRG | ./aconversion2 -t FA"
-runTest "./aconversions2 -ts2-t RE -a elimination | ./aconversions2 -t RRG -a brzozowski | ./aconversion2 -t LRG | ./aconversion2 -t FA"
-runTest "./aconversions2 -ts2-t RE -a elimination | ./aconversions2 -t RRG -a glushkov | ./aconversion2 -t LRG | ./aconversion2 -t FA"
+runTest "./aconversions2 -t RE -a algebraic | ./aconversions2 -t RRG -a brzozowski | ./aconversions2 -t LRG | ./aconversions2 -t FA"
+#runTest "./aconversions2 -ts2-t RE -a algebraic | ./aconversions2 -t RRG -a glushkov | ./aconversions2 -t LRG | ./aconversions2 -t FA"
+runTest "./aconversions2 -t RE -a elimination | ./aconversions2 -t RRG -a brzozowski | ./aconversions2 -t LRG | ./aconversions2 -t FA"
+#runTest "./aconversions2 -ts2-t RE -a elimination | ./aconversions2 -t RRG -a glushkov | ./aconversions2 -t LRG | ./aconversions2 -t FA"
 
 # FA -> RRG -> RE -> FA
 # covers: FA -> RRG, FA -> LRG, RRG -> RE, LRG -> RE, RE -> FA (Brz. derivation, Thompson, Glushkov)
-# runTest "./aconversion2 -t RRG | ./aconversion2 -t RE | ./aconversion2 -t FA -a brzozowski"
-# runTest "./aconversion2 -t LRG | ./aconversion2 -t RE | ./aconversion2 -t FA -a brzozowski"
-# runTest "./aconversion2 -t RRG | ./aconversion2 -t RE | ./aconversion2 -t FA -a thompson"
-# runTest "./aconversion2 -t LRG | ./aconversion2 -t RE | ./aconversion2 -t FA -a thompson"
-# runTest "./aconversion2 -t RRG | ./aconversion2 -t RE | ./aconversion2 -t FA -a glushkov"
-# runTest "./aconversion2 -t LRG | ./aconversion2 -t RE | ./aconversion2 -t FA -a glushkov"
+# runTest "./aconversions2 -t RRG | ./aconversions2 -t RE | ./aconversion2 -t FA -a brzozowski"
+# runTest "./aconversions2 -t LRG | ./aconversions2 -t RE | ./aconversion2 -t FA -a brzozowski"
+# runTest "./aconversions2 -t RRG | ./aconversions2 -t RE | ./aconversion2 -t FA -a thompson"
+# runTest "./aconversions2 -t LRG | ./aconversions2 -t RE | ./aconversion2 -t FA -a thompson"
+# runTest "./aconversions2 -t RRG | ./aconversions2 -t RE | ./aconversion2 -t FA -a glushkov"
+# runTest "./aconversions2 -t LRG | ./aconversions2 -t RE | ./aconversion2 -t FA -a glushkov"
-- 
GitLab