From 32d11fc65cf27c95c20380a4b96060b6de6ac10e Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Fri, 5 Sep 2014 09:03:30 +0200 Subject: [PATCH] partial simplifications --- .../equations/RightRegularEquationSolver.cpp | 52 ++++++++----------- alib2algo/src/fa2re/BrzozowskiAlgebraic.cpp | 2 +- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/alib2algo/src/equations/RightRegularEquationSolver.cpp b/alib2algo/src/equations/RightRegularEquationSolver.cpp index b62bb39f7d..e9518b96b5 100644 --- a/alib2algo/src/equations/RightRegularEquationSolver.cpp +++ b/alib2algo/src/equations/RightRegularEquationSolver.cpp @@ -40,25 +40,21 @@ regexp::UnboundedRegExpElement* RightRegularEquationSolver::eliminate( void ) * A = 0A + 1B + 2C * => A = 0*1B + 0*2C */ - regexp::UnboundedRegExpIteration* loop = new regexp::UnboundedRegExpIteration( * m_eqTransition[ a ][ a ] ); + regexp::UnboundedRegExpIteration loop( * m_eqTransition[ a ][ a ] ); // for all transitions from A apply Arden's Lemma for( auto itB = std::next( itA ) ; itB != m_symbolsByDepth.rend( ); itB ++ ) { const alphabet::Symbol & b = * itB; - regexp::UnboundedRegExpConcatenation* concat = new regexp::UnboundedRegExpConcatenation( ); - concat->appendElement( * loop ); - concat->appendElement( * m_eqTransition[ a ][ b ] ); - m_eqTransition[ a ][ b ] = /* opt.optimize( */ concat /* ) */; - // delete concat; + regexp::UnboundedRegExpConcatenation concat; + concat.appendElement( loop ); + concat.appendElement( * m_eqTransition[ a ][ b ] ); + m_eqTransition[ a ][ b ] = /* opt.optimize( */ concat.clone() /* ) */; } - regexp::UnboundedRegExpConcatenation* concat = new regexp::UnboundedRegExpConcatenation( ); - concat->appendElement( * loop ); - concat->appendElement( * m_eqFinal[ a ] ); - m_eqFinal[ a ] = /* opt.optimize( */ concat /* ) */; - //delete concat; - - delete loop; + regexp::UnboundedRegExpConcatenation concat; + concat.appendElement( loop ); + concat.appendElement( * m_eqFinal[ a ] ); + m_eqFinal[ a ] = /* opt.optimize( */ concat.clone() /* ) */; /* * eliminate A from rest of the equations using this pattern: @@ -72,24 +68,22 @@ regexp::UnboundedRegExpElement* RightRegularEquationSolver::eliminate( void ) { const alphabet::Symbol & c = * itC; - regexp::UnboundedRegExpAlternation* alt = new regexp::UnboundedRegExpAlternation( ); - regexp::UnboundedRegExpConcatenation* concat = new regexp::UnboundedRegExpConcatenation( ); - concat->appendElement( * m_eqTransition[ b ][ a ] ); - concat->appendElement( * m_eqTransition[ a ][ c ] ); - alt->appendElement( * m_eqTransition[ b ][ c ] ); - alt->appendElement( * concat ); - m_eqTransition[ b ][ c ] = /*opt.optimize( */ alt /* ) */; - //delete alt; + regexp::UnboundedRegExpAlternation alt; + regexp::UnboundedRegExpConcatenation concat; + concat.appendElement( * m_eqTransition[ b ][ a ] ); + concat.appendElement( * m_eqTransition[ a ][ c ] ); + alt.appendElement( * m_eqTransition[ b ][ c ] ); + alt.appendElement( concat ); + m_eqTransition[ b ][ c ] = /*opt.optimize( */ alt.clone() /* ) */; } - regexp::UnboundedRegExpAlternation* alt = new regexp::UnboundedRegExpAlternation( ); - regexp::UnboundedRegExpConcatenation* concat = new regexp::UnboundedRegExpConcatenation( ); - concat->appendElement( * m_eqTransition[ b ][ a ] ); - concat->appendElement( * m_eqFinal[ a ] ); - alt->appendElement( * m_eqFinal[ b ] ); - alt->appendElement( * concat ); - m_eqFinal[ b ] = /* opt.optimize( */ alt /* ) */; - // delete alt; + regexp::UnboundedRegExpAlternation alt; + regexp::UnboundedRegExpConcatenation concat; + concat.appendElement( * m_eqTransition[ b ][ a ] ); + concat.appendElement( * m_eqFinal[ a ] ); + alt.appendElement( * m_eqFinal[ b ] ); + alt.appendElement( concat ); + m_eqFinal[ b ] = /* opt.optimize( */ alt.clone() /* ) */; } // no need for this now, release some memory diff --git a/alib2algo/src/fa2re/BrzozowskiAlgebraic.cpp b/alib2algo/src/fa2re/BrzozowskiAlgebraic.cpp index fe1696e025..53746f5902 100644 --- a/alib2algo/src/fa2re/BrzozowskiAlgebraic.cpp +++ b/alib2algo/src/fa2re/BrzozowskiAlgebraic.cpp @@ -52,7 +52,7 @@ regexp::UnboundedRegExp BrzozowskiAlgebraic::convert( void ) if ( isInSet( q , m_automaton.getTransitionsFromState( p )[std::make_pair( p, symbol )] ) ) alt->appendElement( regexp::UnboundedRegExpSymbol { symbol } ); - solver.addEquation( alphabet::Symbol( alphabet::LabeledSymbol (p.getName( ) ) ), alphabet::Symbol( alphabet::LabeledSymbol( q.getName( ) ) ), alt ); + solver.addEquation( alphabet::Symbol( alphabet::LabeledSymbol ( p.getName( ) ) ), alphabet::Symbol( alphabet::LabeledSymbol( q.getName( ) ) ), alt ); } } -- GitLab