From 9cf49255fe2e211e08a61524e0ca78045f057be2 Mon Sep 17 00:00:00 2001
From: Martin Zak <zakmart1@fit.cvut.cz>
Date: Sun, 17 Nov 2013 15:50:05 +0100
Subject: [PATCH] edits automaton creation

---
 acat/src/acat.cpp             |  6 ++--
 alib/src/AutomatonFactory.cpp | 65 +++++++++++++++++------------------
 alib/src/AutomatonFactory.h   | 16 ++++-----
 3 files changed, 41 insertions(+), 46 deletions(-)

diff --git a/acat/src/acat.cpp b/acat/src/acat.cpp
index 866baceed8..5f7ab254b8 100644
--- a/acat/src/acat.cpp
+++ b/acat/src/acat.cpp
@@ -44,10 +44,8 @@ int main(int argc, char** argv) {
 		}
 
 		if (tokens.front().getData() == "automaton") {
-			UnknownAutomaton unknownAutomaton = AutomatonParser::parse(tokens);
-			Automaton* automaton = AutomatonFactory::buildAutomaton(
-					&unknownAutomaton);
-			unknownAutomaton.toXML(cout);
+			UnknownAutomaton automaton = AutomatonParser::parse(tokens);
+			automaton.toXML(cout);
 		} else if (tokens.front().getData() == "grammar") {
 			UnknownGrammar grammar = GrammarParser::parse(tokens);
 			grammar.toXML(cout);
diff --git a/alib/src/AutomatonFactory.cpp b/alib/src/AutomatonFactory.cpp
index 6eeb405a5c..dabb7b1010 100644
--- a/alib/src/AutomatonFactory.cpp
+++ b/alib/src/AutomatonFactory.cpp
@@ -35,47 +35,44 @@ UnknownAutomaton AutomatonFactory::parse(list<Token> tokens) {
 	return parser.parse(tokens);
 }
 
-Automaton* AutomatonFactory::buildAutomaton(UnknownAutomaton* automaton) {
-	Automaton* toReturn;
+Automaton* AutomatonFactory::buildAutomaton(const UnknownAutomaton& automaton) {
 	if (isFSM(automaton)) {
-		toReturn = new FSM(buildFSM(automaton));
+		return new FSM(buildFSM(automaton));
 	} else if (isPDA(automaton)) {
-		toReturn = new PDA(buildPDA(automaton));
+		return new PDA(buildPDA(automaton));
 	} else if (isTM(automaton)) {
-		toReturn = new TM(buildTM(automaton));
+		return new TM(buildTM(automaton));
 	} else {
 		throw AutomatonException("Cannot determine automaton type.");
 	}
-
-	return toReturn;
 }
 
-void AutomatonFactory::buildCommon(Automaton& automaton, UnknownAutomaton* unknownAutomaton) {
+void AutomatonFactory::buildCommon(Automaton& automaton,const UnknownAutomaton& unknownAutomaton) {
 	set<State>::const_iterator state;
 	set<Symbol>::const_iterator symbol;
 
-	const set<State>& states = unknownAutomaton->getStates();
+	const set<State>& states = unknownAutomaton.getStates();
 	state = states.begin();
 	while (state != states.end()) {
 		automaton.addState(*state);
 		state++;
 	}
 
-	const set<Symbol>& inputAlphabet = unknownAutomaton->getInputAlphabet();
+	const set<Symbol>& inputAlphabet = unknownAutomaton.getInputAlphabet();
 	symbol = inputAlphabet.begin();
 	while (symbol != inputAlphabet.end()) {
 		automaton.addInputSymbol(*symbol);
 		symbol++;
 	}
 
-	const set<State>& initialStates = unknownAutomaton->getInitialStates();
+	const set<State>& initialStates = unknownAutomaton.getInitialStates();
 	state = initialStates.begin();
 	while (state != initialStates.end()) {
 		automaton.addInitialState(*state);
 		state++;
 	}
 
-	const set<State>& finalStates = unknownAutomaton->getFinalStates();
+	const set<State>& finalStates = unknownAutomaton.getFinalStates();
 	state = finalStates.begin();
 	while (state != finalStates.end()) {
 		automaton.addFinalState(*state);
@@ -83,13 +80,13 @@ void AutomatonFactory::buildCommon(Automaton& automaton, UnknownAutomaton* unkno
 	}
 }
 
-bool AutomatonFactory::isFSM(UnknownAutomaton* automaton) {
-	if (automaton->getStackAlphabet().size() > 0 || automaton->getStartSymbols().size() > 0
-			|| automaton->getTapeAlphabet().size() > 0 || automaton->getBlankSymbol() != Symbol("")) {
+bool AutomatonFactory::isFSM(const UnknownAutomaton& automaton) {
+	if (automaton.getStackAlphabet().size() > 0 || automaton.getStartSymbols().size() > 0
+			|| automaton.getTapeAlphabet().size() > 0 || automaton.getBlankSymbol() != Symbol("")) {
 		return false;
 	}
 
-	const set<UnknownTransition> transitions = automaton->getTransitions();
+	const set<UnknownTransition> transitions = automaton.getTransitions();
 	set<UnknownTransition>::const_iterator it = transitions.begin();
 	while (it != transitions.end()) {
 		if (!isFSMTransition(*it)) {
@@ -106,12 +103,12 @@ bool AutomatonFactory::isFSMTransition(const UnknownTransition& transition) {
 			|| transition.getShift() != NOT_SET);
 }
 
-FSM AutomatonFactory::buildFSM(UnknownAutomaton* automaton) {
+FSM AutomatonFactory::buildFSM(const UnknownAutomaton& automaton) {
 	FSM fsm;
 
 	buildCommon(fsm, automaton);
 
-	const set<UnknownTransition> transitions = automaton->getTransitions();
+	const set<UnknownTransition> transitions = automaton.getTransitions();
 	set<UnknownTransition>::const_iterator transition = transitions.begin();
 	while (transition != transitions.end()) {
 		fsm.addTransition(transition->getFrom(), transition->getInput(), transition->getTo());
@@ -121,12 +118,12 @@ FSM AutomatonFactory::buildFSM(UnknownAutomaton* automaton) {
 	return fsm;
 }
 
-bool AutomatonFactory::isPDA(UnknownAutomaton* automaton) {
-	if (automaton->getTapeAlphabet().size() > 0 || automaton->getBlankSymbol() != Symbol("")) {
+bool AutomatonFactory::isPDA(const UnknownAutomaton& automaton) {
+	if (automaton.getTapeAlphabet().size() > 0 || automaton.getBlankSymbol() != Symbol("")) {
 		return false;
 	}
 
-	const set<UnknownTransition> transitions = automaton->getTransitions();
+	const set<UnknownTransition> transitions = automaton.getTransitions();
 	set<UnknownTransition>::const_iterator transition = transitions.begin();
 	while (transition != transitions.end()) {
 		if (!isPDATransition(*transition)) {
@@ -142,20 +139,20 @@ bool AutomatonFactory::isPDATransition(const UnknownTransition& transition) {
 	return !(transition.getOutput() != Symbol("") || transition.getShift() != NOT_SET);
 }
 
-PDA AutomatonFactory::buildPDA(UnknownAutomaton* automaton) {
+PDA AutomatonFactory::buildPDA(const UnknownAutomaton& automaton) {
 	PDA pda;
 	buildCommon(pda, automaton);
 
-	const set<Symbol>& stackAlphabet = automaton->getStackAlphabet();
+	const set<Symbol>& stackAlphabet = automaton.getStackAlphabet();
 	set<Symbol>::iterator stackSymbol = stackAlphabet.begin();
 	while (stackSymbol != stackAlphabet.end()) {
 		pda.addStackSymbol(*stackSymbol);
 		stackSymbol++;
 	}
 
-	pda.setStartSymbols(automaton->getStartSymbols());
+	pda.setStartSymbols(automaton.getStartSymbols());
 
-	const set<UnknownTransition>& transitions = automaton->getTransitions();
+	const set<UnknownTransition>& transitions = automaton.getTransitions();
 
 	set<UnknownTransition>::const_iterator transition = transitions.begin();
 	while (transition != transitions.end()) {
@@ -168,12 +165,12 @@ PDA AutomatonFactory::buildPDA(UnknownAutomaton* automaton) {
 	return pda;
 }
 
-bool AutomatonFactory::isTM(UnknownAutomaton* automaton) {
-	if (automaton->getStackAlphabet().size() > 0 || automaton->getStartSymbols().size() > 0) {
+bool AutomatonFactory::isTM(const UnknownAutomaton& automaton) {
+	if (automaton.getStackAlphabet().size() > 0 || automaton.getStartSymbols().size() > 0) {
 		return false;
 	}
 
-	const set<UnknownTransition>& transitions = automaton->getTransitions();
+	const set<UnknownTransition>& transitions = automaton.getTransitions();
 
 	set<UnknownTransition>::const_iterator transition = transitions.begin();
 	while (transition != transitions.end()) {
@@ -192,10 +189,10 @@ bool AutomatonFactory::isTMTransition(const UnknownTransition& transition) {
 
 }
 
-TM AutomatonFactory::buildTM(UnknownAutomaton* automaton) {
+TM AutomatonFactory::buildTM(const UnknownAutomaton& automaton) {
 	TM tm;
 
-	const set<Symbol>& tapeAlphabet = automaton->getTapeAlphabet();
+	const set<Symbol>& tapeAlphabet = automaton.getTapeAlphabet();
 
 	set<Symbol>::const_iterator tapeSymbol = tapeAlphabet.begin();
 	while (tapeSymbol != tapeAlphabet.end()) {
@@ -205,14 +202,14 @@ TM AutomatonFactory::buildTM(UnknownAutomaton* automaton) {
 
 	buildCommon(tm, automaton);
 
-	tm.setBlankSymbol(automaton->getBlankSymbol());
+	tm.setBlankSymbol(automaton.getBlankSymbol());
 
-	const set<UnknownTransition>& transitions = automaton->getTransitions();
+	const set<UnknownTransition>& transitions = automaton.getTransitions();
 
 	set<UnknownTransition>::const_iterator transition = transitions.begin();
 	while (transition != transitions.end()) {
-		TransitionTM tr(transition->getFrom(), transition->getInput(), transition->getTo(),
-				transition->getOutput(), transition->getShift());
+		TransitionTM tr(transition->getFrom(), transition->getInput(), transition->getTo(), transition->getOutput(),
+				transition->getShift());
 		tm.addTransition(tr);
 		transition++;
 	}
diff --git a/alib/src/AutomatonFactory.h b/alib/src/AutomatonFactory.h
index d7748f8c8a..06fae365e3 100644
--- a/alib/src/AutomatonFactory.h
+++ b/alib/src/AutomatonFactory.h
@@ -24,21 +24,21 @@ public:
 	static UnknownAutomaton fromFile(const string& filename);
 	static UnknownAutomaton fromString(const string& str);
 
-	static Automaton* buildAutomaton(UnknownAutomaton* automaton);
+	static Automaton* buildAutomaton(const UnknownAutomaton& automaton);
 
-	static bool isFSM(UnknownAutomaton* automaton);
-	static FSM buildFSM(UnknownAutomaton* automaton);
+	static bool isFSM(const UnknownAutomaton& automaton);
+	static FSM buildFSM(const UnknownAutomaton& automaton);
 
-	static bool isPDA(UnknownAutomaton* automaton);
-	static PDA buildPDA(UnknownAutomaton* automaton);
+	static bool isPDA(const UnknownAutomaton& automaton);
+	static PDA buildPDA(const UnknownAutomaton& automaton);
 
-	static bool isTM(UnknownAutomaton* automaton);
-	static TM buildTM(UnknownAutomaton* automaton);
+	static bool isTM(const UnknownAutomaton& automaton);
+	static TM buildTM(const UnknownAutomaton& automaton);
 
 protected:
 	static UnknownAutomaton parse(list<sax::Token> tokens);
 
-	static void buildCommon(Automaton& automaton, UnknownAutomaton* unknownAutomaton);
+	static void buildCommon(Automaton& automaton, const UnknownAutomaton& unknownAutomaton);
 
 	static bool isFSMTransition(const UnknownTransition& transition);
 	static bool isPDATransition(const UnknownTransition& transition);
-- 
GitLab