Skip to content
Snippets Groups Projects
Commit 32d11fc6 authored by Jan Trávníček's avatar Jan Trávníček
Browse files

partial simplifications

parent 9e5307cf
No related branches found
No related tags found
No related merge requests found
...@@ -40,25 +40,21 @@ regexp::UnboundedRegExpElement* RightRegularEquationSolver::eliminate( void ) ...@@ -40,25 +40,21 @@ regexp::UnboundedRegExpElement* RightRegularEquationSolver::eliminate( void )
* A = 0A + 1B + 2C * A = 0A + 1B + 2C
* => A = 0*1B + 0*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 all transitions from A apply Arden's Lemma
for( auto itB = std::next( itA ) ; itB != m_symbolsByDepth.rend( ); itB ++ ) for( auto itB = std::next( itA ) ; itB != m_symbolsByDepth.rend( ); itB ++ )
{ {
const alphabet::Symbol & b = * itB; const alphabet::Symbol & b = * itB;
regexp::UnboundedRegExpConcatenation* concat = new regexp::UnboundedRegExpConcatenation( ); regexp::UnboundedRegExpConcatenation concat;
concat->appendElement( * loop ); concat.appendElement( loop );
concat->appendElement( * m_eqTransition[ a ][ b ] ); concat.appendElement( * m_eqTransition[ a ][ b ] );
m_eqTransition[ a ][ b ] = /* opt.optimize( */ concat /* ) */; m_eqTransition[ a ][ b ] = /* opt.optimize( */ concat.clone() /* ) */;
// delete concat;
} }
regexp::UnboundedRegExpConcatenation* concat = new regexp::UnboundedRegExpConcatenation( ); regexp::UnboundedRegExpConcatenation concat;
concat->appendElement( * loop ); concat.appendElement( loop );
concat->appendElement( * m_eqFinal[ a ] ); concat.appendElement( * m_eqFinal[ a ] );
m_eqFinal[ a ] = /* opt.optimize( */ concat /* ) */; m_eqFinal[ a ] = /* opt.optimize( */ concat.clone() /* ) */;
//delete concat;
delete loop;
   
/* /*
* eliminate A from rest of the equations using this pattern: * eliminate A from rest of the equations using this pattern:
...@@ -72,24 +68,22 @@ regexp::UnboundedRegExpElement* RightRegularEquationSolver::eliminate( void ) ...@@ -72,24 +68,22 @@ regexp::UnboundedRegExpElement* RightRegularEquationSolver::eliminate( void )
{ {
const alphabet::Symbol & c = * itC; const alphabet::Symbol & c = * itC;
   
regexp::UnboundedRegExpAlternation* alt = new regexp::UnboundedRegExpAlternation( ); regexp::UnboundedRegExpAlternation alt;
regexp::UnboundedRegExpConcatenation* concat = new regexp::UnboundedRegExpConcatenation( ); regexp::UnboundedRegExpConcatenation concat;
concat->appendElement( * m_eqTransition[ b ][ a ] ); concat.appendElement( * m_eqTransition[ b ][ a ] );
concat->appendElement( * m_eqTransition[ a ][ c ] ); concat.appendElement( * m_eqTransition[ a ][ c ] );
alt->appendElement( * m_eqTransition[ b ][ c ] ); alt.appendElement( * m_eqTransition[ b ][ c ] );
alt->appendElement( * concat ); alt.appendElement( concat );
m_eqTransition[ b ][ c ] = /*opt.optimize( */ alt /* ) */; m_eqTransition[ b ][ c ] = /*opt.optimize( */ alt.clone() /* ) */;
//delete alt;
} }
   
regexp::UnboundedRegExpAlternation* alt = new regexp::UnboundedRegExpAlternation( ); regexp::UnboundedRegExpAlternation alt;
regexp::UnboundedRegExpConcatenation* concat = new regexp::UnboundedRegExpConcatenation( ); regexp::UnboundedRegExpConcatenation concat;
concat->appendElement( * m_eqTransition[ b ][ a ] ); concat.appendElement( * m_eqTransition[ b ][ a ] );
concat->appendElement( * m_eqFinal[ a ] ); concat.appendElement( * m_eqFinal[ a ] );
alt->appendElement( * m_eqFinal[ b ] ); alt.appendElement( * m_eqFinal[ b ] );
alt->appendElement( * concat ); alt.appendElement( concat );
m_eqFinal[ b ] = /* opt.optimize( */ alt /* ) */; m_eqFinal[ b ] = /* opt.optimize( */ alt.clone() /* ) */;
// delete alt;
} }
   
// no need for this now, release some memory // no need for this now, release some memory
......
...@@ -52,7 +52,7 @@ regexp::UnboundedRegExp BrzozowskiAlgebraic::convert( void ) ...@@ -52,7 +52,7 @@ regexp::UnboundedRegExp BrzozowskiAlgebraic::convert( void )
if ( isInSet( q , m_automaton.getTransitionsFromState( p )[std::make_pair( p, symbol )] ) ) if ( isInSet( q , m_automaton.getTransitionsFromState( p )[std::make_pair( p, symbol )] ) )
alt->appendElement( regexp::UnboundedRegExpSymbol { 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 );
} }
} }
   
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment