diff --git a/alib2algo/src/grammar/convert/ToGrammarRightRG.h b/alib2algo/src/grammar/convert/ToGrammarRightRG.h index 7d559d1ce58097a4bba051aee166ac15ee7dbf69..b22ba5bece6b27550e682f37a63febd62238b67d 100644 --- a/alib2algo/src/grammar/convert/ToGrammarRightRG.h +++ b/alib2algo/src/grammar/convert/ToGrammarRightRG.h @@ -33,7 +33,7 @@ public: * \return right regular grammar which is equivalent to source left regular grammar. */ template < class TerminalSymbolType, class NonterminalSymbolType > - static grammar::RightRG < TerminalSymbolType > convert(const grammar::LeftRG < TerminalSymbolType, NonterminalSymbolType > & grammar); + static grammar::RightRG < TerminalSymbolType, NonterminalSymbolType > convert(const grammar::LeftRG < TerminalSymbolType, NonterminalSymbolType > & grammar); }; template < class TerminalSymbolType, class NonterminalSymbolType > @@ -76,7 +76,7 @@ grammar::RightRG < TerminalSymbolType, NonterminalSymbolType > ToGrammarRightRG: if( lhs == grammar.getInitialSymbol( ) ) { leftSide = rrg.getInitialSymbol( ); - terminalSymbolType rightSide2 = rhs; + TerminalSymbolType rightSide2 = rhs; rrg.addRule( leftSide, rightSide2 ); } } diff --git a/alib2algo/src/grammar/convert/ToRegExp.h b/alib2algo/src/grammar/convert/ToRegExp.h index 88a8ed8aa390817f94bbf2bebda41a3ac3b26ba5..c3069c533e155ad2445863db8c8b90a8106b8b0a 100644 --- a/alib2algo/src/grammar/convert/ToRegExp.h +++ b/alib2algo/src/grammar/convert/ToRegExp.h @@ -20,13 +20,17 @@ namespace convert { class ToRegExp { public: /** - * @return regexp equivalent to source right regular grammar. - * @param grammar Grammar to convert + * \param grammar Grammar to convert + * \return regexp equivalent to source right regular grammar. */ template < class TerminalSymbolType, class NonterminalSymbolType > static regexp::UnboundedRegExp < TerminalSymbolType > convert ( const grammar::RightRG < TerminalSymbolType, NonterminalSymbolType > & grammar ); - template < class SymbolType > - static regexp::UnboundedRegExp < > convert ( const grammar::LeftRG < SymbolType > & grammar ); + + /** + * \override + */ + template < class TerminalSymbolType, class NonterminalSymbolType > + static regexp::UnboundedRegExp < TerminalSymbolType > convert ( const grammar::LeftRG < TerminalSymbolType, NonterminalSymbolType > & grammar ); }; template < class TerminalSymbolType, class NonterminalSymbolType > @@ -34,8 +38,8 @@ regexp::UnboundedRegExp < TerminalSymbolType > ToRegExp::convert ( const grammar return ToRegExpAlgebraic::convert ( grammar ); } -template < class SymbolType > -regexp::UnboundedRegExp < > ToRegExp::convert ( const grammar::LeftRG < SymbolType > & grammar ) { +template < class TerminalSymbolType, class NonterminalSymbolType > +regexp::UnboundedRegExp < TerminalSymbolType > ToRegExp::convert ( const grammar::LeftRG < TerminalSymbolType, NonterminalSymbolType > & grammar ) { return ToRegExpAlgebraic::convert ( grammar ); } diff --git a/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h b/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h index 923585981370d781bac96f76943568b829c631e0..6bfdf0943ca54b92559c71977429b1fe2b7c3ca3 100644 --- a/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h +++ b/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h @@ -29,31 +29,35 @@ public: */ template < class TerminalSymbolType, class NonterminalSymbolType > static regexp::UnboundedRegExp < TerminalSymbolType > convert ( const grammar::RightRG < TerminalSymbolType, NonterminalSymbolType > & grammar); - template < class SymbolType > - static regexp::UnboundedRegExp < SymbolType > convert(const grammar::LeftRG < SymbolType > & grammar); + + /** + * \override + */ + template < class TerminalSymbolType, class NonterminalSymbolType > + static regexp::UnboundedRegExp < TerminalSymbolType > convert(const grammar::LeftRG < TerminalSymbolType, NonterminalSymbolType > & grammar); }; -template < class SymbolType > -regexp::UnboundedRegExp < SymbolType > ToRegExpAlgebraic::convert(const grammar::LeftRG < SymbolType > & grammar) { - equations::LeftRegularEquationSolver < SymbolType, SymbolType > solver; +template < class TerminalSymbolType, class NonterminalSymbolType > +regexp::UnboundedRegExp < TerminalSymbolType > ToRegExpAlgebraic::convert(const grammar::LeftRG < TerminalSymbolType, NonterminalSymbolType > & grammar) { + equations::LeftRegularEquationSolver < TerminalSymbolType, NonterminalSymbolType > solver; solver.setVariableSymbols(grammar.getNonterminalAlphabet()); for(const auto & rule : grammar.getRules()) { - const SymbolType& lhs = rule.first; + const NonterminalSymbolType& lhs = rule.first; for(const auto& ruleRHS : rule.second) { - if(ruleRHS.template is<SymbolType>()) { - const SymbolType& rhs = ruleRHS.template get<SymbolType>(); - solver.addEquation(lhs, regexp::UnboundedRegExpSymbol < SymbolType > (rhs)); + if(ruleRHS.template is<TerminalSymbolType>()) { + const TerminalSymbolType& rhs = ruleRHS.template get<TerminalSymbolType>(); + solver.addEquation(lhs, regexp::UnboundedRegExpSymbol < TerminalSymbolType > (rhs)); } else { - const ext::pair<SymbolType, SymbolType>& rhs = ruleRHS.template get<ext::pair<SymbolType, SymbolType>>(); - solver.addEquation(lhs, rhs.first, regexp::UnboundedRegExpSymbol < SymbolType > (rhs.second)); + const ext::pair<NonterminalSymbolType, TerminalSymbolType>& rhs = ruleRHS.template get<ext::pair<NonterminalSymbolType, TerminalSymbolType>>(); + solver.addEquation(lhs, rhs.first, regexp::UnboundedRegExpSymbol < TerminalSymbolType > (rhs.second)); } } } if(grammar.getGeneratesEpsilon()) - solver.addEquation(grammar.getInitialSymbol(), regexp::UnboundedRegExpEpsilon < SymbolType > ()); + solver.addEquation(grammar.getInitialSymbol(), regexp::UnboundedRegExpEpsilon < TerminalSymbolType > ()); return solver.solve(grammar.getInitialSymbol()); }