From 7389cc919692bea1fcbc1e37eebffcf14d06815a Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Mon, 17 Sep 2018 16:30:20 +0200
Subject: [PATCH] template some more grammar related algos

---
 .../src/grammar/convert/ToGrammarRightRG.h    |  4 +--
 alib2algo/src/grammar/convert/ToRegExp.h      | 16 +++++++----
 .../src/grammar/convert/ToRegExpAlgebraic.h   | 28 +++++++++++--------
 3 files changed, 28 insertions(+), 20 deletions(-)

diff --git a/alib2algo/src/grammar/convert/ToGrammarRightRG.h b/alib2algo/src/grammar/convert/ToGrammarRightRG.h
index 7d559d1ce5..b22ba5bece 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 88a8ed8aa3..c3069c533e 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 9235859813..6bfdf0943c 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());
 }
-- 
GitLab