diff --git a/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.cpp b/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.cpp index e6c8b8ff74df5b12dd77a73d390e75b9fe2bfcb4..c9b1a00677a959458bd6ebfde85e2c6a677a7c79 100644 --- a/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.cpp +++ b/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.cpp @@ -9,31 +9,22 @@ namespace rg2rg { -LeftToRightRegularGrammar::LeftToRightRegularGrammar( const grammar::LeftRG & lrg ) : m_lrg( lrg ) { - -} - -LeftToRightRegularGrammar::~LeftToRightRegularGrammar( void ) -{ - -} - -grammar::RightRG LeftToRightRegularGrammar::convert( void ) +grammar::RightRG LeftToRightRegularGrammar::convert(const grammar::LeftRG& lrg) { // 1. - alphabet::Symbol s = alphabet::createUniqueSymbol( m_lrg.getInitialSymbol( ), m_lrg.getNonterminalAlphabet(), m_lrg.getTerminalAlphabet() ); + alphabet::Symbol s = alphabet::createUniqueSymbol( lrg.getInitialSymbol( ), lrg.getNonterminalAlphabet(), lrg.getTerminalAlphabet() ); grammar::RightRG rrg( s ); - for(const auto & nonterminalSymbol : m_lrg.getNonterminalAlphabet() ) { + for(const auto & nonterminalSymbol : lrg.getNonterminalAlphabet() ) { rrg.addNonterminalSymbol( nonterminalSymbol ); } - rrg.setTerminalAlphabet( m_lrg.getTerminalAlphabet( ) ); - rrg.setGeneratesEpsilon( m_lrg.getGeneratesEpsilon( ) ); + rrg.setTerminalAlphabet( lrg.getTerminalAlphabet( ) ); + rrg.setGeneratesEpsilon( lrg.getGeneratesEpsilon( ) ); // 2 - for( const auto & rule : m_lrg.getRules( ) ) { + for( const auto & rule : lrg.getRules( ) ) { const alphabet::Symbol& lhs = rule.first; for(const auto & ruleRHS : rule.second ) { @@ -44,7 +35,7 @@ grammar::RightRG LeftToRightRegularGrammar::convert( void ) std::pair<alphabet::Symbol, alphabet::Symbol> rightSide = std::make_pair( rhs.second, lhs ); rrg.addRule( leftSide, rightSide ); - if( lhs == m_lrg.getInitialSymbol( ) ) { + if( lhs == lrg.getInitialSymbol( ) ) { alphabet::Symbol leftSide = rhs.first; alphabet::Symbol rightSide = rhs.second; rrg.addRule( leftSide, rightSide ); @@ -56,7 +47,7 @@ grammar::RightRG LeftToRightRegularGrammar::convert( void ) std::pair<alphabet::Symbol, alphabet::Symbol> rightSide = std::make_pair( rhs, lhs ); rrg.addRule( leftSide, rightSide ); - if( lhs == m_lrg.getInitialSymbol( ) ) { + if( lhs == lrg.getInitialSymbol( ) ) { alphabet::Symbol leftSide = rrg.getInitialSymbol( ); alphabet::Symbol rightSide = rhs; rrg.addRule( leftSide, rightSide ); diff --git a/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.h b/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.h index e0089201702c70a012e6faab27f0f5d0938737fb..f01665d3b330b32ffc2d551da90d4fc4e3ad8937 100644 --- a/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.h +++ b/alib2algo/src/conversions/rg2rg/lrg2rrg/LeftToRightRegularGrammar.h @@ -17,24 +17,11 @@ namespace rg2rg class LeftToRightRegularGrammar { public: - /** - * @param lrg Original left regular grammar. - */ - LeftToRightRegularGrammar( const grammar::LeftRG & lrg ); - - ~LeftToRightRegularGrammar( void ); - - /** + /** * Performs conversion. * @return right regular grammar which is equivalent to source left regular grammar. */ - grammar::RightRG convert( void ); - -protected: - /** - * input grammar - */ - const grammar::LeftRG & m_lrg; + grammar::RightRG convert(const grammar::LeftRG& lrg); }; } /* namespace rg2rg */ diff --git a/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.cpp b/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.cpp index 420b9365a8a83070e8a7b7fcca9810f922432ff5..f51ab73248d30e1d3ba9ed3dc815cc27a8bb7f7f 100644 --- a/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.cpp +++ b/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.cpp @@ -10,32 +10,22 @@ namespace rg2rg { -RightToLeftRegularGrammar::RightToLeftRegularGrammar( const grammar::RightRG & rrg ) : m_rrg( rrg ) -{ - -} - -RightToLeftRegularGrammar::~RightToLeftRegularGrammar( void ) -{ - -} - -grammar::LeftRG RightToLeftRegularGrammar::convert( void ) +grammar::LeftRG RightToLeftRegularGrammar::convert(const grammar::RightRG& rrg) { // 1. - alphabet::Symbol s = alphabet::createUniqueSymbol( m_rrg.getInitialSymbol( ), m_rrg.getNonterminalAlphabet(), m_rrg.getTerminalAlphabet() ); + alphabet::Symbol s = alphabet::createUniqueSymbol( rrg.getInitialSymbol( ), rrg.getNonterminalAlphabet(), rrg.getTerminalAlphabet() ); grammar::LeftRG lrg(s); - for(const auto & nonterminalSymbol : m_rrg.getNonterminalAlphabet()) { + for(const auto & nonterminalSymbol : rrg.getNonterminalAlphabet()) { lrg.addNonterminalSymbol( nonterminalSymbol ); } - lrg.setTerminalAlphabet( m_rrg.getTerminalAlphabet( ) ); - lrg.setGeneratesEpsilon( m_rrg.getGeneratesEpsilon( ) ); + lrg.setTerminalAlphabet( rrg.getTerminalAlphabet( ) ); + lrg.setGeneratesEpsilon( rrg.getGeneratesEpsilon( ) ); // 2. - for( const auto & rule : m_rrg.getRules( ) ) { + for( const auto & rule : rrg.getRules( ) ) { const alphabet::Symbol& lhs = rule.first; for(const auto & ruleRHS : rule.second ) { @@ -46,7 +36,7 @@ grammar::LeftRG RightToLeftRegularGrammar::convert( void ) std::pair<alphabet::Symbol, alphabet::Symbol> rightSide = std::make_pair( lhs, rhs.first ); lrg.addRule( leftSide, rightSide ); - if( lhs == m_rrg.getInitialSymbol( ) ) { + if( lhs == rrg.getInitialSymbol( ) ) { alphabet::Symbol leftSide = rhs.second; alphabet::Symbol rightSide = rhs.first; lrg.addRule( leftSide, rightSide ); @@ -58,7 +48,7 @@ grammar::LeftRG RightToLeftRegularGrammar::convert( void ) std::pair<alphabet::Symbol, alphabet::Symbol> rightSide = std::make_pair ( lhs, rhs ); lrg.addRule( leftSide, rightSide ); - if( lhs == m_rrg.getInitialSymbol( ) ) { + if( lhs == rrg.getInitialSymbol( ) ) { alphabet::Symbol leftSide = lrg.getInitialSymbol( ); alphabet::Symbol rightSide = rhs; lrg.addRule( leftSide, rightSide ); diff --git a/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.h b/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.h index 73dcdc3968ce2fa2806fa3410c013275d605326a..8b7e3dc7207a4551b36fce2d48683e310d4bc48a 100644 --- a/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.h +++ b/alib2algo/src/conversions/rg2rg/rrg2lrg/RightToLeftRegularGrammar.h @@ -20,24 +20,11 @@ namespace rg2rg class RightToLeftRegularGrammar { public: - /** - * @param rrg Original right regular grammar. - */ - RightToLeftRegularGrammar( const grammar::RightRG & rrg ); - - ~RightToLeftRegularGrammar( void ); - /** * Performs conversion. * @return left regular grammar which is equivalent to source right regular grammar. */ - grammar::LeftRG convert( void ); - -private: - /** - * - */ - const grammar::RightRG & m_rrg; + grammar::LeftRG convert(const grammar::RightRG& rrg); }; } /* namespace rg2rg */ diff --git a/alib2algo/test-src/conversions/rg2rg/rg2rgTest.cpp b/alib2algo/test-src/conversions/rg2rg/rg2rgTest.cpp index aa812511ff4ea3be6e805baa0e5db0e96dedf7e8..24b8c9772e4cfe126a526fc59329c41d9951ef4d 100644 --- a/alib2algo/test-src/conversions/rg2rg/rg2rgTest.cpp +++ b/alib2algo/test-src/conversions/rg2rg/rg2rgTest.cpp @@ -32,8 +32,8 @@ void rg2rgTest::testConversion() { rrGrammar.addRule(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(2)))), std::make_pair(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("b")))), alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(3)))))); rrGrammar.addRule(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(3)))), alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("a"))))); - rg2rg::RightToLeftRegularGrammar convertor(rrGrammar); - grammar::LeftRG lrGrammar = convertor.convert(); + rg2rg::RightToLeftRegularGrammar convertor;; + grammar::LeftRG lrGrammar = convertor.convert(rrGrammar); grammar::LeftRG lrGrammarRef(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(4))))); @@ -64,8 +64,8 @@ void rg2rgTest::testConversion2() { lrGrammar.addRule(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(3)))), std::make_pair(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(2)))), alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("b")))))); lrGrammar.addRule(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(4)))), std::make_pair(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(3)))), alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::StringLabel("a")))))); - rg2rg::LeftToRightRegularGrammar convertor(lrGrammar); - grammar::RightRG rrGrammar = convertor.convert(); + rg2rg::LeftToRightRegularGrammar convertor; + grammar::RightRG rrGrammar = convertor.convert(lrGrammar); grammar::RightRG rrGrammarRef(alphabet::Symbol(alphabet::LabeledSymbol(label::Label(label::IntegerLabel(5)))));