From 30b36274dbfc3812e606208ebd4d5b20eed52f0f Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Sun, 22 Mar 2015 18:22:32 +0100
Subject: [PATCH] refactor, rename for all deterministic pdas

---
 .../automaton/simplify/MinimizeBrzozowski.cpp |   6 +-
 alib2algo/src/automaton/simplify/Rename.cpp   | 200 +++++++++++++++++-
 alib2algo/src/automaton/simplify/Rename.h     |  10 +-
 .../transform/{ReverseFSM.cpp => Reverse.cpp} |  29 ++-
 .../transform/{ReverseFSM.h => Reverse.h}     |  12 +-
 .../src/automaton/PDA/VisiblyPushdownDPDA.cpp |   6 +-
 .../src/automaton/PDA/VisiblyPushdownNPDA.cpp |   6 +-
 areverse2/src/areverse.cpp                    |   6 +-
 examples2/automaton/NVPA4.xml                 |   2 +-
 9 files changed, 233 insertions(+), 44 deletions(-)
 rename alib2algo/src/automaton/transform/{ReverseFSM.cpp => Reverse.cpp} (71%)
 rename alib2algo/src/automaton/transform/{ReverseFSM.h => Reverse.h} (85%)

diff --git a/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp b/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp
index e6352dee80..e6a8bba5c7 100644
--- a/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp
+++ b/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp
@@ -11,7 +11,7 @@
 #include <automaton/Automaton.h>
 #include <automaton/FSM/MultiInitialStateNFA.h>
 
-#include "../transform/ReverseFSM.h"
+#include "../transform/Reverse.h"
 #include "../determinize/Determinize.h"
 
 namespace automaton {
@@ -27,11 +27,11 @@ automaton::Automaton MinimizeBrzozowski::minimize(const automaton::Automaton& au
 }
 
 automaton::DFA MinimizeBrzozowski::minimize(const automaton::DFA& dfa) {
-	return automaton::determinize::Determinize::determinize(automaton::transform::ReverseFSM::convert(automaton::determinize::Determinize::determinize(automaton::transform::ReverseFSM::convert(dfa))));
+	return automaton::determinize::Determinize::determinize(automaton::transform::Reverse::convert(automaton::determinize::Determinize::determinize(automaton::transform::Reverse::convert(dfa))));
 }
 
 automaton::DFA MinimizeBrzozowski::minimize(const automaton::NFA& nfa) {
-	return automaton::determinize::Determinize::determinize(automaton::transform::ReverseFSM::convert(automaton::determinize::Determinize::determinize(automaton::transform::ReverseFSM::convert(nfa))));
+	return automaton::determinize::Determinize::determinize(automaton::transform::Reverse::convert(automaton::determinize::Determinize::determinize(automaton::transform::Reverse::convert(nfa))));
 }
 
 void MinimizeBrzozowski::Visit(void*, const automaton::EpsilonNFA&) const {
diff --git a/alib2algo/src/automaton/simplify/Rename.cpp b/alib2algo/src/automaton/simplify/Rename.cpp
index f766d66aec..c44b4ba020 100644
--- a/alib2algo/src/automaton/simplify/Rename.cpp
+++ b/alib2algo/src/automaton/simplify/Rename.cpp
@@ -64,7 +64,6 @@ automaton::DPDA Rename::rename(const automaton::DPDA& pda) {
 	std::map<automaton::State, int > renamingDataState;
 	int counterSymbol = 0;
 	std::map<alphabet::Symbol, int > renamingDataSymbol;
-	std::deque< automaton::State > processingData;
 
 	for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
 		renamingDataState.insert(std::make_pair(*iter, counterState++));
@@ -105,6 +104,185 @@ automaton::DPDA Rename::rename(const automaton::DPDA& pda) {
 	return result;
 }
 
+automaton::SinglePopDPDA Rename::rename(const automaton::SinglePopDPDA& pda) {
+	int counterState = 0;
+	std::map<automaton::State, int > renamingDataState;
+	int counterSymbol = 0;
+	std::map<alphabet::Symbol, int > renamingDataSymbol;
+
+	for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
+		renamingDataState.insert(std::make_pair(*iter, counterState++));
+	}
+
+	for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
+		renamingDataSymbol.insert(std::make_pair(*iter, counterSymbol++));
+	}
+
+	automaton::SinglePopDPDA result(automaton::State(renamingDataState.find(pda.getInitialState())->second), alphabet::symbolFrom(renamingDataSymbol.find(pda.getInitialSymbol())->second));
+
+	result.setInputAlphabet(pda.getInputAlphabet());
+
+	for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
+		result.addStackSymbol(alphabet::symbolFrom(renamingDataSymbol.find(*iter)->second));
+	}
+
+	for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
+		result.addState(automaton::State(renamingDataState.find(*iter)->second));
+	}
+
+	for(auto iter = pda.getFinalStates().begin(); iter != pda.getFinalStates().end(); iter++) {
+		result.addFinalState(automaton::State(renamingDataState.find(*iter)->second));
+	}
+
+	for(auto iter = pda.getTransitions().begin(); iter != pda.getTransitions().end(); iter++) {
+		std::vector<alphabet::Symbol> push;
+		for(const auto& elem : iter->second.second) {
+			push.push_back(alphabet::symbolFrom(renamingDataSymbol.find(elem)->second));
+		}
+		result.addTransition(automaton::State(renamingDataState.find(std::get<0>(iter->first))->second), std::get<1>(iter->first), alphabet::symbolFrom(renamingDataSymbol.find(std::get<2>(iter->first))->second), automaton::State(renamingDataState.find(iter->second.first)->second), push);
+	}
+
+	return result;
+}
+
+automaton::InputDrivenDPDA Rename::rename(const automaton::InputDrivenDPDA& pda) {
+	int counter = 0;
+	std::map<automaton::State, int > renamingData;
+	int counterSymbol = 0;
+	std::map<alphabet::Symbol, int > renamingDataSymbol;
+
+	for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
+		renamingData.insert(std::make_pair(*iter, counter++));
+	}
+
+	for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
+		renamingDataSymbol.insert(std::make_pair(*iter, counterSymbol++));
+	}
+
+	automaton::InputDrivenDPDA result(automaton::State(renamingData.find(pda.getInitialState())->second), alphabet::symbolFrom(renamingDataSymbol.find(pda.getInitialSymbol())->second));
+
+	result.setInputAlphabet(pda.getInputAlphabet());
+	result.setStackAlphabet(pda.getStackAlphabet());
+
+	for(const std::pair<alphabet::Symbol, std::pair<std::vector<alphabet::Symbol>, std::vector<alphabet::Symbol>>> operation : pda.getPushdownStoreOperations()) {
+		std::vector<alphabet::Symbol> pop;
+		for(const auto& elem : operation.second.first) {
+			pop.push_back(alphabet::symbolFrom(renamingDataSymbol.find(elem)->second));
+		}
+		std::vector<alphabet::Symbol> push;
+		for(const auto& elem : operation.second.second) {
+			push.push_back(alphabet::symbolFrom(renamingDataSymbol.find(elem)->second));
+		}
+		result.setPushdownStoreOperation(operation.first, pop, push);
+	}
+
+	for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
+		result.addState(automaton::State(renamingData.find(*iter)->second));
+	}
+
+	for(auto iter = pda.getFinalStates().begin(); iter != pda.getFinalStates().end(); iter++) {
+		result.addFinalState(automaton::State(renamingData.find(*iter)->second));
+	}
+
+	for(auto iter = pda.getTransitions().begin(); iter != pda.getTransitions().end(); iter++) {
+		result.addTransition(automaton::State(renamingData.find(iter->first.first)->second), iter->first.second, automaton::State(renamingData.find(iter->second)->second));
+	}
+
+	return result;
+}
+
+automaton::VisiblyPushdownDPDA Rename::rename(const automaton::VisiblyPushdownDPDA& pda) {
+	int counterState = 0;
+	std::map<automaton::State, int > renamingDataState;
+	int counterSymbol = 0;
+	std::map<alphabet::Symbol, int > renamingDataSymbol;
+
+	for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
+		renamingDataState.insert(std::make_pair(*iter, counterState++));
+	}
+
+	for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
+		renamingDataSymbol.insert(std::make_pair(*iter, counterSymbol++));
+	}
+
+	automaton::VisiblyPushdownDPDA result(automaton::State(renamingDataState.find(pda.getInitialState())->second), alphabet::symbolFrom(renamingDataSymbol.find(pda.getBottomOfTheStackSymbol())->second));
+
+	result.setCallInputAlphabet(pda.getCallInputAlphabet());
+	result.setLocalInputAlphabet(pda.getLocalInputAlphabet());
+	result.setReturnInputAlphabet(pda.getReturnInputAlphabet());
+
+	for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
+		result.addStackSymbol(alphabet::symbolFrom(renamingDataSymbol.find(*iter)->second));
+	}
+
+	for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
+		result.addState(automaton::State(renamingDataState.find(*iter)->second));
+	}
+
+	for(auto iter = pda.getFinalStates().begin(); iter != pda.getFinalStates().end(); iter++) {
+		result.addFinalState(automaton::State(renamingDataState.find(*iter)->second));
+	}
+
+	for(auto iter = pda.getCallTransitions().begin(); iter != pda.getCallTransitions().end(); iter++) {
+		result.addCallTransition(automaton::State(renamingDataState.find(iter->first.first)->second), iter->first.second, automaton::State(renamingDataState.find(iter->second.first)->second), alphabet::symbolFrom(renamingDataSymbol.find(iter->second.second)->second));
+	}
+
+	for(auto iter = pda.getLocalTransitions().begin(); iter != pda.getLocalTransitions().end(); iter++) {
+		result.addLocalTransition(automaton::State(renamingDataState.find(iter->first.first)->second), iter->first.second, automaton::State(renamingDataState.find(iter->second)->second));
+	}
+
+	for(auto iter = pda.getReturnTransitions().begin(); iter != pda.getReturnTransitions().end(); iter++) {
+		result.addReturnTransition(automaton::State(renamingDataState.find(std::get<0>(iter->first))->second), std::get<1>(iter->first), alphabet::symbolFrom(renamingDataSymbol.find(std::get<2>(iter->first))->second), automaton::State(renamingDataState.find(iter->second)->second));
+	}
+
+	return result;
+}
+
+automaton::RealTimeHeightDeterministicDPDA Rename::rename(const automaton::RealTimeHeightDeterministicDPDA& pda) {
+	int counterState = 0;
+	std::map<automaton::State, int > renamingDataState;
+	int counterSymbol = 0;
+	std::map<alphabet::Symbol, int > renamingDataSymbol;
+
+	for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
+		renamingDataState.insert(std::make_pair(*iter, counterState++));
+	}
+
+	for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
+		renamingDataSymbol.insert(std::make_pair(*iter, counterSymbol++));
+	}
+
+	automaton::RealTimeHeightDeterministicDPDA result(automaton::State(renamingDataState.find(pda.getInitialState())->second), alphabet::symbolFrom(renamingDataSymbol.find(pda.getBottomOfTheStackSymbol())->second));
+
+	result.setInputAlphabet(pda.getInputAlphabet());
+
+	for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
+		result.addStackSymbol(alphabet::symbolFrom(renamingDataSymbol.find(*iter)->second));
+	}
+
+	for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
+		result.addState(automaton::State(renamingDataState.find(*iter)->second));
+	}
+
+	for(auto iter = pda.getFinalStates().begin(); iter != pda.getFinalStates().end(); iter++) {
+		result.addFinalState(automaton::State(renamingDataState.find(*iter)->second));
+	}
+
+	for(auto iter = pda.getCallTransitions().begin(); iter != pda.getCallTransitions().end(); iter++) {
+		result.addCallTransition(automaton::State(renamingDataState.find(iter->first.first)->second), iter->first.second, automaton::State(renamingDataState.find(iter->second.first)->second), alphabet::symbolFrom(renamingDataSymbol.find(iter->second.second)->second));
+	}
+
+	for(auto iter = pda.getLocalTransitions().begin(); iter != pda.getLocalTransitions().end(); iter++) {
+		result.addLocalTransition(automaton::State(renamingDataState.find(iter->first.first)->second), iter->first.second, automaton::State(renamingDataState.find(iter->second)->second));
+	}
+
+	for(auto iter = pda.getReturnTransitions().begin(); iter != pda.getReturnTransitions().end(); iter++) {
+		result.addReturnTransition(automaton::State(renamingDataState.find(std::get<0>(iter->first))->second), std::get<1>(iter->first), alphabet::symbolFrom(renamingDataSymbol.find(std::get<2>(iter->first))->second), automaton::State(renamingDataState.find(iter->second)->second));
+	}
+
+	return result;
+}
+
 void Rename::Visit(void*, const automaton::EpsilonNFA&) const {
 	throw exception::AlibException("Unsupported automaton type EpsilonNFA");
 }
@@ -135,28 +313,32 @@ void Rename::Visit(void* data, const automaton::DPDA& automaton) const {
 	out = new automaton::Automaton(this->rename(automaton));
 }
 
-void Rename::Visit(void*, const automaton::SinglePopDPDA&) const {
-	throw exception::AlibException("Unsupported automaton type SinglePopDPDA");
+void Rename::Visit(void* data, const automaton::SinglePopDPDA& automaton) const {
+	automaton::Automaton* & out = *((automaton::Automaton**) data);
+	out = new automaton::Automaton(this->rename(automaton));
 }
 
-void Rename::Visit(void*, const automaton::InputDrivenDPDA&) const {
-	throw exception::AlibException("Unsupported automaton type InputDrivenDPDA");
+void Rename::Visit(void* data, const automaton::InputDrivenDPDA& automaton) const {
+	automaton::Automaton* & out = *((automaton::Automaton**) data);
+	out = new automaton::Automaton(this->rename(automaton));
 }
 
 void Rename::Visit(void*, const automaton::InputDrivenNPDA&) const {
 	throw exception::AlibException("Unsupported automaton type InputDrivenNPDA");
 }
 
-void Rename::Visit(void*, const automaton::VisiblyPushdownDPDA&) const {
-	throw exception::AlibException("Unsupported automaton type VisiblyPushdownDPDA");
+void Rename::Visit(void* data, const automaton::VisiblyPushdownDPDA& automaton) const {
+	automaton::Automaton* & out = *((automaton::Automaton**) data);
+	out = new automaton::Automaton(this->rename(automaton));
 }
 
 void Rename::Visit(void*, const automaton::VisiblyPushdownNPDA&) const {
 	throw exception::AlibException("Unsupported automaton type VisiblyPushdownNPDA");
 }
 
-void Rename::Visit(void*, const automaton::RealTimeHeightDeterministicDPDA&) const {
-	throw exception::AlibException("Unsupported automaton type RealTimeHeightDeterministicDPDA");
+void Rename::Visit(void* data, const automaton::RealTimeHeightDeterministicDPDA& automaton) const {
+	automaton::Automaton* & out = *((automaton::Automaton**) data);
+	out = new automaton::Automaton(this->rename(automaton));
 }
 
 void Rename::Visit(void*, const automaton::RealTimeHeightDeterministicNPDA&) const {
diff --git a/alib2algo/src/automaton/simplify/Rename.h b/alib2algo/src/automaton/simplify/Rename.h
index 8ff66a6f47..e3eb0281ec 100644
--- a/alib2algo/src/automaton/simplify/Rename.h
+++ b/alib2algo/src/automaton/simplify/Rename.h
@@ -10,6 +10,10 @@
 
 #include <automaton/FSM/DFA.h>
 #include <automaton/PDA/DPDA.h>
+#include <automaton/PDA/SinglePopDPDA.h>
+#include <automaton/PDA/InputDrivenDPDA.h>
+#include <automaton/PDA/VisiblyPushdownDPDA.h>
+#include <automaton/PDA/RealTimeHeightDeterministicDPDA.h>
 #include <automaton/Automaton.h>
 
 namespace automaton {
@@ -24,7 +28,11 @@ public:
 	static automaton::Automaton rename(const automaton::Automaton& dfa);
 
 	static automaton::DFA rename(const automaton::DFA& dfa);
-	static automaton::DPDA rename(const automaton::DPDA& dfa);
+	static automaton::DPDA rename(const automaton::DPDA& pda);
+	static automaton::SinglePopDPDA rename(const automaton::SinglePopDPDA& pda);
+	static automaton::InputDrivenDPDA rename(const automaton::InputDrivenDPDA& pda);
+	static automaton::VisiblyPushdownDPDA rename(const automaton::VisiblyPushdownDPDA& pda);
+	static automaton::RealTimeHeightDeterministicDPDA rename(const automaton::RealTimeHeightDeterministicDPDA& pda);
 
 
 protected:
diff --git a/alib2algo/src/automaton/transform/ReverseFSM.cpp b/alib2algo/src/automaton/transform/Reverse.cpp
similarity index 71%
rename from alib2algo/src/automaton/transform/ReverseFSM.cpp
rename to alib2algo/src/automaton/transform/Reverse.cpp
index 4de5a04c23..7afb8e28e1 100644
--- a/alib2algo/src/automaton/transform/ReverseFSM.cpp
+++ b/alib2algo/src/automaton/transform/Reverse.cpp
@@ -1,11 +1,11 @@
 /*
- * ReverseFSM.cpp
+ * Reverse.cpp
  *
  *  Created on: 7. 11. 2014
  *	  Author: Tomas Pecka
  */
 
-#include "ReverseFSM.h"
+#include "Reverse.h"
 
 #include <automaton/FSM/MultiInitialStateNFA.h>
 #include <exception/AlibException.h>
@@ -17,15 +17,15 @@ namespace automaton {
 
 namespace transform {
 
-automaton::Automaton ReverseFSM::convert(const Automaton& automaton) {
+automaton::Automaton Reverse::convert(const Automaton& automaton) {
 	automaton::Automaton* out = NULL;
-	automaton.getData().Accept((void*) &out, ReverseFSM::REVERSE_FSM);
+	automaton.getData().Accept((void*) &out, Reverse::REVERSE);
 	automaton::Automaton res(std::move(*out));
 	delete out;
 	return std::move(res);
 }
 
-automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::DFA& automaton)
+automaton::MultiInitialStateNFA Reverse::convert(const automaton::DFA& automaton)
 {
 	automaton::MultiInitialStateNFA res;
 
@@ -40,7 +40,7 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::DFA& automa
 	return res;
 }
 
-automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::NFA& automaton)
+automaton::MultiInitialStateNFA Reverse::convert(const automaton::NFA& automaton)
 {
 	automaton::MultiInitialStateNFA res;
 
@@ -56,7 +56,7 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::NFA& automa
 	return res;
 }
 
-automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::MultiInitialStateNFA& automaton)
+automaton::MultiInitialStateNFA Reverse::convert(const automaton::MultiInitialStateNFA& automaton)
 {
 	automaton::MultiInitialStateNFA res;
 
@@ -72,35 +72,34 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::MultiInitia
 	return res;
 }
 
-
-void ReverseFSM::Visit(void* data, const DFA& automaton) const {
+void Reverse::Visit(void* data, const DFA& automaton) const {
 	automaton::Automaton*& out = *((automaton::Automaton**) data);
 	out = new automaton::Automaton(this->convert(automaton));
 }
 
-void ReverseFSM::Visit(void* data, const NFA& automaton) const {
+void Reverse::Visit(void* data, const NFA& automaton) const {
 	automaton::Automaton*& out = *((automaton::Automaton**) data);
 	out = new automaton::Automaton(this->convert(automaton));
 }
 
-void ReverseFSM::Visit(void* data, const MultiInitialStateNFA& automaton) const {
+void Reverse::Visit(void* data, const MultiInitialStateNFA& automaton) const {
 	automaton::Automaton*& out = *((automaton::Automaton**) data);
 	out = new automaton::Automaton(this->convert(automaton));
 }
 
-void ReverseFSM::Visit(void*, const ExtendedNFA&) const {
+void Reverse::Visit(void*, const ExtendedNFA&) const {
 	throw exception::AlibException("Unsupported automaton type ExtendedNFA");
 }
 
-void ReverseFSM::Visit(void*, const EpsilonNFA&) const {
+void Reverse::Visit(void*, const EpsilonNFA&) const {
 	throw exception::AlibException("Unsupported automaton type EpsilonNFA");
 }
 
-void ReverseFSM::Visit(void*, const CompactNFA&) const {
+void Reverse::Visit(void*, const CompactNFA&) const {
 	throw exception::AlibException("Unsupported automaton type CompactNFA");
 }
 
-const ReverseFSM ReverseFSM::REVERSE_FSM;
+const Reverse Reverse::REVERSE;
 
 } /* namespace transform */
 
diff --git a/alib2algo/src/automaton/transform/ReverseFSM.h b/alib2algo/src/automaton/transform/Reverse.h
similarity index 85%
rename from alib2algo/src/automaton/transform/ReverseFSM.h
rename to alib2algo/src/automaton/transform/Reverse.h
index b5c3a7c0fd..c8528d9091 100644
--- a/alib2algo/src/automaton/transform/ReverseFSM.h
+++ b/alib2algo/src/automaton/transform/Reverse.h
@@ -1,12 +1,12 @@
 /*
- * ReverseFSM.h
+ * Reverse.h
  *
  *  Created on: 7. 11. 2014
  *	  Author: Tomas Pecka
  */
 
-#ifndef REVERSE_FSM_H_
-#define REVERSE_FSM_H_
+#ifndef REVERSE_H_
+#define REVERSE_H_
 
 #include <automaton/Automaton.h>
 #include <automaton/common/State.h>
@@ -15,7 +15,7 @@ namespace automaton {
 
 namespace transform {
 
-class ReverseFSM : public VisitableConstFSMBase {
+class Reverse : public VisitableConstFSMBase {
 public:
 	static automaton::MultiInitialStateNFA convert(const automaton::DFA& automaton);
 	static automaton::MultiInitialStateNFA convert(const automaton::NFA& automaton);
@@ -35,11 +35,11 @@ private:
 	void Visit(void*, const EpsilonNFA& automaton) const;
 	void Visit(void*, const CompactNFA& automaton) const;
 
-	static const ReverseFSM REVERSE_FSM;
+	static const Reverse REVERSE;
 };
 
 } /* namespace transform */
 
 } /* namespace automaton */
 
-#endif /* REVERSE_FSM_H_ */
+#endif /* REVERSE_H_ */
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp
index b05d32a143..77bd069f36 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp
@@ -253,15 +253,15 @@ bool VisiblyPushdownDPDA::removeLocalTransition(const State& from, const alphabe
 }
 
 const std::map<std::pair<State, alphabet::Symbol>, std::pair<State, alphabet::Symbol> >& VisiblyPushdownDPDA::getCallTransitions() const {
-		return callTransitions;
+	return callTransitions;
 }
 
 const std::map<std::tuple<State, alphabet::Symbol, alphabet::Symbol>, State>& VisiblyPushdownDPDA::getReturnTransitions() const {
-		return returnTransitions;
+	return returnTransitions;
 }
 
 const std::map<std::pair<State, alphabet::Symbol>, State>& VisiblyPushdownDPDA::getLocalTransitions() const {
-		return localTransitions;
+	return localTransitions;
 }
 
 int VisiblyPushdownDPDA::compare(const VisiblyPushdownDPDA& other) const {
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp
index a128e07dbc..746d4922db 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp
@@ -186,15 +186,15 @@ bool VisiblyPushdownNPDA::removeLocalTransition(const State& from, const alphabe
 }
 
 const std::map<std::pair<State, alphabet::Symbol>, std::set<std::pair<State, alphabet::Symbol> > >& VisiblyPushdownNPDA::getCallTransitions() const {
-		return callTransitions;
+	return callTransitions;
 }
 
 const std::map<std::tuple<State, alphabet::Symbol, alphabet::Symbol>, std::set<State> >& VisiblyPushdownNPDA::getReturnTransitions() const {
-		return returnTransitions;
+	return returnTransitions;
 }
 
 const std::map<std::pair<State, alphabet::Symbol>, std::set<State> >& VisiblyPushdownNPDA::getLocalTransitions() const {
-		return localTransitions;
+	return localTransitions;
 }
 
 int VisiblyPushdownNPDA::compare(const VisiblyPushdownNPDA& other) const {
diff --git a/areverse2/src/areverse.cpp b/areverse2/src/areverse.cpp
index 40ace10aae..4c0ce749e7 100644
--- a/areverse2/src/areverse.cpp
+++ b/areverse2/src/areverse.cpp
@@ -10,12 +10,12 @@
 
 #include "exception/AlibException.h"
 #include "factory/XmlDataFactory.hpp"
-#include "automaton/transform/ReverseFSM.h"
+#include "automaton/transform/Reverse.h"
 
 int main(int argc, char** argv) {
 
 	try {
-		TCLAP::CmdLine cmd("Automaton FSM reverse binary", ' ', "0.01");
+		TCLAP::CmdLine cmd("Automaton reverse binary", ' ', "0.01");
 
 		TCLAP::ValueArg<std::string> input(	"i",	"input",	"Automaton to reverse",		false,	"-",		"file");
 		cmd.add( input );
@@ -33,7 +33,7 @@ int main(int argc, char** argv) {
 			sax::SaxParseInterface::parseStdin(tokens);
 		}
 
-		alib::XmlDataFactory::toStdout(automaton::transform::ReverseFSM::convert(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens)));
+		alib::XmlDataFactory::toStdout(automaton::transform::Reverse::convert(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens)));
 		return 0;
 
 	} catch (const exception::AlibException& exception) {
diff --git a/examples2/automaton/NVPA4.xml b/examples2/automaton/NVPA4.xml
index 018b1abdf1..34c41aa55e 100644
--- a/examples2/automaton/NVPA4.xml
+++ b/examples2/automaton/NVPA4.xml
@@ -51,7 +51,7 @@
 		<BottomOfTheStackSymbol/>
 	</bottomOfTheStackSymbol>
 	<finalStates>
-		<PrimitiveLabel><Integer>4</Integer></PrimitiveLabel>
+		<PrimitiveLabel><Integer>6</Integer></PrimitiveLabel>
 	</finalStates>
 	<transitions>
 		<callTransition>
-- 
GitLab