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