diff --git a/aconversions/src/conversions/rg2fa/LRGtoFAConverter.cpp b/aconversions/src/conversions/rg2fa/LRGtoFAConverter.cpp index 5f8dee7c709ac14c68e536014a673d507c26d400..50e91b8b5fa3b64cad2492a17b1423b7c6e85561 100644 --- a/aconversions/src/conversions/rg2fa/LRGtoFAConverter.cpp +++ b/aconversions/src/conversions/rg2fa/LRGtoFAConverter.cpp @@ -21,23 +21,23 @@ FSM LRGtoFAConverter::convert( void ) m_automaton.addState( startState ); // step 3, constructing \delta - for( set<Rule>::const_iterator i = m_grammar.getRules().begin(); i != m_grammar.getRules().end(); i++ ) + for( const auto & rule : m_grammar.getRules( ) ) { - if( GrammarUtils::isEpsilonRule( *i ) ) + if( m_grammar.isEpsilonRule( rule ) ) continue; - State current( GrammarUtils::getFirstSymbolFromSet( i->getLeftSide(), m_grammar.getNonTerminalSymbols() ) -> getSymbol() ); - Symbol input( GrammarUtils::getFirstSymbolFromSet( i->getRightSide(), m_grammar.getTerminalSymbols() ) -> getSymbol() ); + State current( GrammarUtils::getFirstSymbolFromSet( rule.getLeftSide( ), m_grammar.getNonTerminalSymbols() )->getSymbol( ) ); + Symbol input( GrammarUtils::getFirstSymbolFromSet( rule.getRightSide( ), m_grammar.getTerminalSymbols() )->getSymbol( ) ); // if B->a => \delta(B,a)=AState - if( i->getRightSide().size() == 1 ) + if( rule.getRightSide( ).size( ) == 1 ) { m_automaton.addTransition( startState, input, current ); } // if B->aC => \delta(B,a)=C - else if( i->getRightSide().size() == 2 ) + else if( rule.getRightSide( ).size( ) == 2 ) { - State next( GrammarUtils::getFirstSymbolFromSet( i -> getRightSide(), m_grammar.getNonTerminalSymbols() ) -> getSymbol() ); + State next( GrammarUtils::getFirstSymbolFromSet( rule.getRightSide( ), m_grammar.getNonTerminalSymbols( ) ) -> getSymbol( ) ); m_automaton.addTransition( next, input, current ); } } @@ -47,8 +47,8 @@ FSM LRGtoFAConverter::convert( void ) // step 5 m_automaton.addFinalState( State( m_grammar.getStartSymbol().getSymbol() ) ); - for( set<Rule>::const_iterator i = m_grammar.getRules().begin(); i != m_grammar.getRules().end(); i++ ) - if( GrammarUtils::isEpsilonRule( *i ) ) + for( const auto & rule : m_grammar.getRules( ) ) + if( m_grammar.isEpsilonRule( rule ) ) m_automaton.addFinalState( startState ); return m_automaton; diff --git a/aconversions/src/conversions/rg2fa/RRGtoFAConverter.cpp b/aconversions/src/conversions/rg2fa/RRGtoFAConverter.cpp index 996c1bdbad0f2de9d56194bc3ff1b07f8d108c2a..28104e15831e7b79af33525b27fa1c7a231e9c0d 100644 --- a/aconversions/src/conversions/rg2fa/RRGtoFAConverter.cpp +++ b/aconversions/src/conversions/rg2fa/RRGtoFAConverter.cpp @@ -20,21 +20,21 @@ FSM RRGtoFAConverter::convert( void ) State AState = AutomatonUtils::createUniqueState( "A", m_automaton.getStates() ); m_automaton.addState( AState ); - for( set<Rule>::const_iterator i = m_grammar.getRules().begin(); i != m_grammar.getRules().end(); i++ ) + for( const auto & rule : m_grammar.getRules( ) ) { - if( GrammarUtils::isEpsilonRule(*i) ) + if( m_grammar.isEpsilonRule( rule ) ) continue; - State current( GrammarUtils::getFirstSymbolFromSet( i->getLeftSide(), m_grammar.getNonTerminalSymbols() ) -> getSymbol() ); - Symbol input( GrammarUtils::getFirstSymbolFromSet( i->getRightSide(), m_grammar.getTerminalSymbols() ) -> getSymbol() ); + State current( GrammarUtils::getFirstSymbolFromSet( rule.getLeftSide(), m_grammar.getNonTerminalSymbols( ) ) -> getSymbol( ) ); + Symbol input( GrammarUtils::getFirstSymbolFromSet( rule.getRightSide(), m_grammar.getTerminalSymbols( ) ) -> getSymbol( ) ); - if( i->getRightSide().size() == 1 ) // if B->a => \delta(B,a)=AState + if( rule.getRightSide( ).size( ) == 1 ) // if B->a => \delta(B,a)=AState { m_automaton.addTransition( current, input, AState ); } - else if( i->getRightSide().size() == 2 ) // if B->aC => \delta(B,a)=C + else if( rule.getRightSide( ).size( ) == 2 ) // if B->aC => \delta(B,a)=C { - State next( GrammarUtils::getFirstSymbolFromSet( i -> getRightSide(), m_grammar.getNonTerminalSymbols() ) -> getSymbol() ); + State next( GrammarUtils::getFirstSymbolFromSet( rule.getRightSide( ), m_grammar.getNonTerminalSymbols( ) ) -> getSymbol( ) ); m_automaton.addTransition( current, input, next ); } } @@ -44,9 +44,9 @@ FSM RRGtoFAConverter::convert( void ) // step 5 m_automaton.addFinalState( AState ); - for( set<Rule>::const_iterator i = m_grammar.getRules().begin(); i != m_grammar.getRules().end(); i++ ) - if( GrammarUtils::isEpsilonRule( *i ) ) - m_automaton.addFinalState( State( m_grammar.getStartSymbol().getSymbol() )); + for( const auto & rule : m_grammar.getRules( ) ) + if( m_grammar.isEpsilonRule( rule ) ) + m_automaton.addFinalState( State( m_grammar.getStartSymbol( ).getSymbol( ) ) ); return m_automaton; } diff --git a/aconversions/src/utils/GrammarUtils.cpp b/aconversions/src/utils/GrammarUtils.cpp index d0ef866800e8d7b29d2938bd792390868bf0301d..c001b9f58db1f45d6fc9a2431dbbb70b9412413e 100644 --- a/aconversions/src/utils/GrammarUtils.cpp +++ b/aconversions/src/utils/GrammarUtils.cpp @@ -32,12 +32,6 @@ const list<Symbol>::const_iterator GrammarUtils::getFirstSymbolFromSet( const li return i; } -bool GrammarUtils::isEpsilonRule( const Rule & rule ) -{ - // relies on grammar check. Assumes that aLib allows only S->\eps, where S is startSymbol of Grammar (by definition) - return rule.getRightSide().size() == 0; -} - Symbol GrammarUtils::createUniqueSymbol( const char * name, const RegularGrammar & grammar, SuffixType suffix ) { return createUniqueSymbol( string( name ), grammar, suffix ); diff --git a/aconversions/src/utils/GrammarUtils.h b/aconversions/src/utils/GrammarUtils.h index afde0bf0508afdd811f716a53bac717c91f22fae..f2f2f636f378fb00273189c3e1a580aefa77f2cf 100644 --- a/aconversions/src/utils/GrammarUtils.h +++ b/aconversions/src/utils/GrammarUtils.h @@ -36,8 +36,6 @@ public: static bool isNonterminalOnRightSide( const alphabet::Symbol & nonTerminal, const std::set<grammar::Rule> & rules ); static const std::list<alphabet::Symbol>::const_iterator getFirstSymbolFromSet( const std::list<alphabet::Symbol> & ruleSymbols, const std::set<alphabet::Symbol> & grammarSymbols ); - static bool isEpsilonRule( const grammar::Rule & rule ); - static alphabet::Symbol createUniqueSymbol( const char * name, const grammar::RegularGrammar & grammar, SuffixType suffix = UNDEFINED ); static alphabet::Symbol createUniqueSymbol( const std::string & name, const grammar::RegularGrammar & grammar, SuffixType suffix = UNDEFINED );