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