From a987e8d5aecdd38cb8b6f069cedc00bf7e4b3bd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= <peckato1@fit.cvut.cz> Date: Thu, 20 Feb 2014 21:16:04 +0100 Subject: [PATCH] Remove GrammarUtils::isEpsilonRule (replaced by alib method). Implementation of C++11 for range in RG to FA conversions. --- .../conversions/rg2fa/LRGtoFAConverter.cpp | 18 ++++++++--------- .../conversions/rg2fa/RRGtoFAConverter.cpp | 20 +++++++++---------- aconversions/src/utils/GrammarUtils.cpp | 6 ------ aconversions/src/utils/GrammarUtils.h | 2 -- 4 files changed, 19 insertions(+), 27 deletions(-) diff --git a/aconversions/src/conversions/rg2fa/LRGtoFAConverter.cpp b/aconversions/src/conversions/rg2fa/LRGtoFAConverter.cpp index 5f8dee7c70..50e91b8b5f 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 996c1bdbad..28104e1583 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 d0ef866800..c001b9f58d 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 afde0bf050..f2f2f636f3 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 ); -- GitLab