Skip to content
Snippets Groups Projects
Commit 38b9e100 authored by Tomáš Pecka's avatar Tomáš Pecka
Browse files

aconversion: Use list::front() and back() instead of iterators

parent d152a316
No related branches found
No related tags found
No related merge requests found
...@@ -61,7 +61,7 @@ LeftRegularGrammar FAtoLRGConverter::convert( void ) ...@@ -61,7 +61,7 @@ LeftRegularGrammar FAtoLRGConverter::convert( void )
   
for( const auto & rule : m_grammar.getRules( ) ) for( const auto & rule : m_grammar.getRules( ) )
{ {
const Symbol & leftSide = * rule.getLeftSide( ).begin( ); const Symbol & leftSide = rule.getLeftSide( ).front( );
   
if( isInSet( State( leftSide.getSymbol( ) ), m_fsm.getFinalStates( ) ) ) if( isInSet( State( leftSide.getSymbol( ) ), m_fsm.getFinalStates( ) ) )
{ {
......
...@@ -43,7 +43,7 @@ RightRegularGrammar FAtoRRGConverter::convert( void ) ...@@ -43,7 +43,7 @@ RightRegularGrammar FAtoRRGConverter::convert( void )
   
/* /*
* Rule might already in - consider case: * Rule might already in - consider case:
* \delta(A,a) = F and \delta(B,a) = G, where both F and G are final states * \delta(A,a) = { F, G }, where both F and G are final states
*/ */
if( ! isInSet( Rule( leftSide, rightSide), m_grammar.getRules( ) ) ) if( ! isInSet( Rule( leftSide, rightSide), m_grammar.getRules( ) ) )
m_grammar.addRule( Rule( leftSide, rightSide ) ); m_grammar.addRule( Rule( leftSide, rightSide ) );
...@@ -54,7 +54,7 @@ RightRegularGrammar FAtoRRGConverter::convert( void ) ...@@ -54,7 +54,7 @@ RightRegularGrammar FAtoRRGConverter::convert( void )
m_grammar.setStartSymbol( symbolMap.getNonTerminal( * m_fsm.getInitialStates( ).begin( ) ) ); m_grammar.setStartSymbol( symbolMap.getNonTerminal( * m_fsm.getInitialStates( ).begin( ) ) );
   
// step 4 // step 4
if( isInSet( State( m_grammar.getStartSymbol( ).getSymbol( ) ), m_fsm.getFinalStates( ) ) ) if( isInSet( * m_fsm.getInitialStates( ).begin( ), m_fsm.getFinalStates( ) ) )
{ {
// 4a // 4a
if( ! m_grammar.isNonTerminalOnRightSideOfAnyRule( m_grammar.getStartSymbol( ) ) ) if( ! m_grammar.isNonTerminalOnRightSideOfAnyRule( m_grammar.getStartSymbol( ) ) )
...@@ -69,7 +69,7 @@ RightRegularGrammar FAtoRRGConverter::convert( void ) ...@@ -69,7 +69,7 @@ RightRegularGrammar FAtoRRGConverter::convert( void )
   
for( const auto & rule : m_grammar.getRules( ) ) for( const auto & rule : m_grammar.getRules( ) )
{ {
if( *( rule.getLeftSide( ).begin( ) ) == m_grammar.getStartSymbol( ) ) if( rule.getLeftSide( ).front( ) == m_grammar.getStartSymbol( ) )
{ {
list<Symbol> leftSide, rightSide( rule.getRightSide( ) ); list<Symbol> leftSide, rightSide( rule.getRightSide( ) );
leftSide.push_back( newStart ); leftSide.push_back( newStart );
......
...@@ -33,20 +33,19 @@ FSM LRGtoFAConverter::convert( void ) ...@@ -33,20 +33,19 @@ FSM LRGtoFAConverter::convert( void )
if( m_grammar.isEpsilonRule( rule ) ) if( m_grammar.isEpsilonRule( rule ) )
continue; continue;
   
State current( rule.getLeftSide( ).begin( )->getSymbol( ) ); State current( rule.getLeftSide( ).front( ).getSymbol( ) );
   
// if B->a => \delta(StartState,a)=B // if B->a => \delta(StartState,a)=B
if( rule.getRightSide( ).size( ) == 1 ) if( rule.getRightSide( ).size( ) == 1 )
{ {
const Symbol & input( rule.getRightSide( ).begin( )->getSymbol( ) ); const Symbol & input( rule.getRightSide( ).front( ).getSymbol( ) );
m_automaton.addTransition( startState, input, current ); m_automaton.addTransition( startState, input, current );
} }
// if B->Ca => \delta(C,a)=B // if B->Ca => \delta(C,a)=B
else if( rule.getRightSide( ).size( ) == 2 ) else if( rule.getRightSide( ).size( ) == 2 )
{ {
auto rightSideIter = rule.getRightSide( ).begin( ); State next( rule.getRightSide( ).front( ).getSymbol( ) );
State next( rightSideIter ++ ->getSymbol( ) ); const Symbol & input = rule.getRightSide( ).back( );
const Symbol & input = * rightSideIter;
   
m_automaton.addTransition( next, input, current ); m_automaton.addTransition( next, input, current );
} }
......
...@@ -33,18 +33,17 @@ FSM RRGtoFAConverter::convert( void ) ...@@ -33,18 +33,17 @@ FSM RRGtoFAConverter::convert( void )
if( m_grammar.isEpsilonRule( rule ) ) if( m_grammar.isEpsilonRule( rule ) )
continue; continue;
   
State current( rule.getLeftSide( ).begin( )->getSymbol( ) ); State current( rule.getLeftSide( ).front( ).getSymbol( ) );
   
if( rule.getRightSide( ).size( ) == 1 ) // if B->a => \delta(B,a)=AState if( rule.getRightSide( ).size( ) == 1 ) // if B->a => \delta(B,a)=AState
{ {
const Symbol & input( rule.getRightSide( ).begin( )->getSymbol( ) ); const Symbol & input( rule.getRightSide( ).front( ).getSymbol( ) );
m_automaton.addTransition( current, input, AState ); m_automaton.addTransition( current, input, AState );
} }
else if( rule.getRightSide( ).size( ) == 2 ) // if B->aC => \delta(B,a)=C else if( rule.getRightSide( ).size( ) == 2 ) // if B->aC => \delta(B,a)=C
{ {
auto rightSideIter = rule.getRightSide( ).begin( ); const Symbol & input = rule.getRightSide( ).front( );
const Symbol & input = * rightSideIter ++; State next( rule.getRightSide( ).back( ).getSymbol( ) );
State next( rightSideIter->getSymbol( ) );
   
m_automaton.addTransition( current, input, next ); m_automaton.addTransition( current, input, next );
} }
......
...@@ -31,20 +31,20 @@ RegExp LRGAlgebraic::convert( void ) ...@@ -31,20 +31,20 @@ RegExp LRGAlgebraic::convert( void )
   
for( const auto & rule : m_grammar.getRules( ) ) for( const auto & rule : m_grammar.getRules( ) )
{ {
const Symbol & leftSide = * rule.getLeftSide( ).begin( ); const Symbol & leftSide = rule.getLeftSide( ).front( );
if( rule.getRightSide( ).size( ) == 0 ) if( rule.getRightSide( ).size( ) == 0 )
{ {
m_solver.addEquation( leftSide, new RegExpEpsilon( ) ); m_solver.addEquation( leftSide, new RegExpEpsilon( ) );
} }
else if( rule.getRightSide( ).size( ) == 1 ) else if( rule.getRightSide( ).size( ) == 1 )
{ {
const Symbol & input = * rule.getRightSide( ).begin( ); const Symbol & input = rule.getRightSide( ).front( );
m_solver.addEquation( leftSide, new RegExpSymbol( input.getSymbol( ) ) ); m_solver.addEquation( leftSide, new RegExpSymbol( input.getSymbol( ) ) );
} }
else else
{ {
const Symbol nt = * rule.getRightSide( ).begin( ); const Symbol nt = rule.getRightSide( ).front( );
const Symbol input = * ( std::next( rule.getRightSide( ).begin( ) ) ); const Symbol input = rule.getRightSide( ).back( );
m_solver.addEquation( leftSide, nt, new RegExpSymbol( input.getSymbol( ) ) ); m_solver.addEquation( leftSide, nt, new RegExpSymbol( input.getSymbol( ) ) );
} }
} }
......
...@@ -31,20 +31,20 @@ RegExp RRGAlgebraic::convert( void ) ...@@ -31,20 +31,20 @@ RegExp RRGAlgebraic::convert( void )
   
for( const auto & rule : m_grammar.getRules( ) ) for( const auto & rule : m_grammar.getRules( ) )
{ {
const Symbol & leftSide = * rule.getLeftSide( ).begin( ); const Symbol & leftSide = rule.getLeftSide( ).front( );
if( rule.getRightSide( ).size( ) == 0 ) if( rule.getRightSide( ).size( ) == 0 )
{ {
m_solver.addEquation( leftSide, new RegExpEpsilon( ) ); m_solver.addEquation( leftSide, new RegExpEpsilon( ) );
} }
else if( rule.getRightSide( ).size( ) == 1 ) else if( rule.getRightSide( ).size( ) == 1 )
{ {
const Symbol & input = * rule.getRightSide( ).begin( ); const Symbol & input = rule.getRightSide( ).front( );
m_solver.addEquation( leftSide, new RegExpSymbol( input.getSymbol( ) ) ); m_solver.addEquation( leftSide, new RegExpSymbol( input.getSymbol( ) ) );
} }
else else
{ {
const Symbol input = * rule.getRightSide( ).begin( ); const Symbol input = rule.getRightSide( ).front( );
const Symbol nt = * ( std::next( rule.getRightSide( ).begin( ) ) ); const Symbol nt = rule.getRightSide( ).back( );
m_solver.addEquation( leftSide, nt, new RegExpSymbol( input.getSymbol( ) ) ); m_solver.addEquation( leftSide, nt, new RegExpSymbol( input.getSymbol( ) ) );
} }
} }
......
...@@ -41,27 +41,27 @@ RightRegularGrammar LeftToRightRegularGrammar::convert( void ) ...@@ -41,27 +41,27 @@ RightRegularGrammar LeftToRightRegularGrammar::convert( void )
{ {
if( rule.getRightSide( ).size( ) == 2 ) if( rule.getRightSide( ).size( ) == 2 )
{ {
list<Symbol> leftSide = { * rule.getRightSide( ).begin( ) }; list<Symbol> leftSide = { rule.getRightSide( ).front( ) };
list<Symbol> rightSide = { * std::next( rule.getRightSide( ).begin( ) ), * rule.getLeftSide( ).begin( ) }; list<Symbol> rightSide = { rule.getRightSide( ).back( ), rule.getLeftSide( ).front( ) };
m_rrg.addRule( Rule( leftSide, rightSide ) ); m_rrg.addRule( Rule( leftSide, rightSide ) );
   
if( * rule.getLeftSide( ).begin( ) == m_lrg.getStartSymbol( ) ) if( rule.getLeftSide( ).front( ) == m_lrg.getStartSymbol( ) )
{ {
list<Symbol> leftSide = { * rule.getRightSide( ).begin( ) }; list<Symbol> leftSide = { rule.getRightSide( ).front( ) };
list<Symbol> rightSide = { * std::next( rule.getRightSide( ).begin( ) ) }; list<Symbol> rightSide = { rule.getRightSide( ).back( ) };
m_rrg.addRule( Rule( leftSide, rightSide ) ); m_rrg.addRule( Rule( leftSide, rightSide ) );
} }
} }
else if( rule.getRightSide( ).size( ) == 1 ) else if( rule.getRightSide( ).size( ) == 1 )
{ {
list<Symbol> leftSide = { m_rrg.getStartSymbol( ) }; list<Symbol> leftSide = { m_rrg.getStartSymbol( ) };
list<Symbol> rightSide = { * rule.getRightSide( ).begin( ), *rule.getLeftSide( ).begin( ) }; list<Symbol> rightSide = { rule.getRightSide( ).front( ), rule.getLeftSide( ).front( ) };
m_rrg.addRule( Rule( leftSide, rightSide ) ); m_rrg.addRule( Rule( leftSide, rightSide ) );
   
if( * rule.getLeftSide( ).begin( ) == m_lrg.getStartSymbol( ) ) if( rule.getLeftSide( ).front( ) == m_lrg.getStartSymbol( ) )
{ {
list<Symbol> leftSide = { m_rrg.getStartSymbol( ) }; list<Symbol> leftSide = { m_rrg.getStartSymbol( ) };
list<Symbol> rightSide = { * rule.getRightSide( ).begin( ) }; list<Symbol> rightSide = { rule.getRightSide( ).front( ) };
m_rrg.addRule( Rule( leftSide, rightSide ) ); m_rrg.addRule( Rule( leftSide, rightSide ) );
} }
} }
......
...@@ -41,27 +41,27 @@ LeftRegularGrammar RightToLeftRegularGrammar::convert( void ) ...@@ -41,27 +41,27 @@ LeftRegularGrammar RightToLeftRegularGrammar::convert( void )
{ {
if( rule.getRightSide( ).size( ) == 2 ) if( rule.getRightSide( ).size( ) == 2 )
{ {
list<Symbol> leftSide = { * std::next( rule.getRightSide( ).begin( ) ) }; list<Symbol> leftSide = { rule.getRightSide( ).back( ) };
list<Symbol> rightSide = { * rule.getLeftSide( ).begin( ), * rule.getRightSide( ).begin( ) }; list<Symbol> rightSide = { rule.getLeftSide( ).front( ), rule.getRightSide( ).front( ) };
m_lrg.addRule( Rule( leftSide, rightSide ) ); m_lrg.addRule( Rule( leftSide, rightSide ) );
   
if( * rule.getLeftSide( ).begin( ) == m_rrg.getStartSymbol( ) ) if( rule.getLeftSide( ).front( ) == m_rrg.getStartSymbol( ) )
{ {
list<Symbol> leftSide = { * std::next( rule.getRightSide( ).begin( ) ) }; list<Symbol> leftSide = { rule.getRightSide( ).back( ) };
list<Symbol> rightSide = { * rule.getRightSide( ).begin( ) }; list<Symbol> rightSide = { rule.getRightSide( ).front( ) };
m_lrg.addRule( Rule( leftSide, rightSide ) ); m_lrg.addRule( Rule( leftSide, rightSide ) );
} }
} }
else if( rule.getRightSide( ).size( ) == 1 ) else if( rule.getRightSide( ).size( ) == 1 )
{ {
list<Symbol> leftSide = { m_lrg.getStartSymbol( ) }; list<Symbol> leftSide = { m_lrg.getStartSymbol( ) };
list<Symbol> rightSide = { * rule.getLeftSide( ).begin( ), *rule.getRightSide( ).begin( ) }; list<Symbol> rightSide = { rule.getLeftSide( ).front( ), rule.getRightSide( ).front( ) };
m_lrg.addRule( Rule( leftSide, rightSide ) ); m_lrg.addRule( Rule( leftSide, rightSide ) );
   
if( * rule.getLeftSide( ).begin( ) == m_rrg.getStartSymbol( ) ) if( rule.getLeftSide( ).front( ) == m_rrg.getStartSymbol( ) )
{ {
list<Symbol> leftSide = { m_lrg.getStartSymbol( ) }; list<Symbol> leftSide = { m_lrg.getStartSymbol( ) };
list<Symbol> rightSide = { * rule.getRightSide( ).begin( ) }; list<Symbol> rightSide = { rule.getRightSide( ).front( ) };
m_lrg.addRule( Rule( leftSide, rightSide ) ); m_lrg.addRule( Rule( leftSide, rightSide ) );
} }
} }
......
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