From bb4925db92903d0677f19a689649de81091e52ae Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Mon, 17 Sep 2018 15:33:16 +0200
Subject: [PATCH] template RightRG in grammar to regexp algo

---
 alib2algo/src/grammar/convert/ToRegExp.h      | 16 ++++++------
 .../src/grammar/convert/ToRegExpAlgebraic.h   | 26 +++++++++----------
 2 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/alib2algo/src/grammar/convert/ToRegExp.h b/alib2algo/src/grammar/convert/ToRegExp.h
index 4fde2da923..88a8ed8aa3 100644
--- a/alib2algo/src/grammar/convert/ToRegExp.h
+++ b/alib2algo/src/grammar/convert/ToRegExp.h
@@ -23,20 +23,20 @@ public:
 	 * @return regexp equivalent to source right regular grammar.
 	 * @param grammar Grammar to convert
 	 */
+	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::RightRG < SymbolType > & grammar);
-	template < class SymbolType >
-	static regexp::UnboundedRegExp < > convert(const grammar::LeftRG < SymbolType > & grammar);
+	static regexp::UnboundedRegExp < > convert ( const grammar::LeftRG < SymbolType > & grammar );
 };
 
-template < class SymbolType >
-regexp::UnboundedRegExp < > ToRegExp::convert(const grammar::RightRG < SymbolType > & grammar) {
-	return ToRegExpAlgebraic::convert(grammar);
+template < class TerminalSymbolType, class NonterminalSymbolType >
+regexp::UnboundedRegExp < TerminalSymbolType > ToRegExp::convert ( const grammar::RightRG < TerminalSymbolType, NonterminalSymbolType > & grammar ) {
+	return ToRegExpAlgebraic::convert ( grammar );
 }
 
 template < class SymbolType >
-regexp::UnboundedRegExp < > ToRegExp::convert(const grammar::LeftRG < SymbolType > & grammar) {
-	return ToRegExpAlgebraic::convert(grammar);
+regexp::UnboundedRegExp < > ToRegExp::convert ( const grammar::LeftRG < SymbolType > & grammar ) {
+	return ToRegExpAlgebraic::convert ( grammar );
 }
 
 } /* namespace covert */
diff --git a/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h b/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h
index 3818fe0965..9235859813 100644
--- a/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h
+++ b/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h
@@ -27,8 +27,8 @@ public:
 	 * @return regexp equivalent to source right regular grammar.
 	 * @param grammar Grammar to convert
 	 */
-	template < class SymbolType >
-	static regexp::UnboundedRegExp < SymbolType > convert(const grammar::RightRG < SymbolType > & grammar);
+	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);
 };
@@ -58,29 +58,29 @@ regexp::UnboundedRegExp < SymbolType > ToRegExpAlgebraic::convert(const grammar:
 	return solver.solve(grammar.getInitialSymbol());
 }
 
-template < class SymbolType >
-regexp::UnboundedRegExp < SymbolType > ToRegExpAlgebraic::convert(const grammar::RightRG < SymbolType > & grammar) {
-	equations::RightRegularEquationSolver < SymbolType, SymbolType > solver;
+template < class TerminalSymbolType, class NonterminalSymbolType >
+regexp::UnboundedRegExp < TerminalSymbolType > ToRegExpAlgebraic::convert ( const grammar::RightRG < TerminalSymbolType, NonterminalSymbolType > & grammar) {
+	equations::RightRegularEquationSolver < 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.second, regexp::UnboundedRegExpSymbol < SymbolType > (rhs.first));
+				const ext::pair < TerminalSymbolType, NonterminalSymbolType > & rhs = ruleRHS.template get < ext::pair < TerminalSymbolType, NonterminalSymbolType > > ( );
+				solver.addEquation ( lhs, rhs.second, regexp::UnboundedRegExpSymbol < TerminalSymbolType > ( rhs.first ) );
 			}
 		}
 	}
 	if(grammar.getGeneratesEpsilon())
-		solver.addEquation(grammar.getInitialSymbol(), regexp::UnboundedRegExpEpsilon < SymbolType > ());
+		solver.addEquation ( grammar.getInitialSymbol ( ), regexp::UnboundedRegExpEpsilon < TerminalSymbolType > ( ) );
 
-	return solver.solve(grammar.getInitialSymbol());
+	return solver.solve ( grammar.getInitialSymbol ( ) );
 }
 
 } /* namespace covert */
-- 
GitLab