From 86c6e33dcfb4f55e550398c8094730804ce6e33d Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Fri, 10 Oct 2014 20:50:47 +0200
Subject: [PATCH] remove UnknownAutomaton UnknownGrammar

---
 aconvert2/src/DotConverter.cpp                |   8 -
 aconvert2/src/DotConverter.h                  |   3 -
 aconvert2/src/GasTexConverter.cpp             |   8 -
 aconvert2/src/GasTexConverter.h               |   3 -
 aconvert2/src/aconvert.cpp                    |   1 -
 adiff2/src/AutomatonDiff.cpp                  |  86 -----
 adiff2/src/AutomatonDiff.h                    |   4 -
 adiff2/src/GrammarDiff.cpp                    |  51 ---
 adiff2/src/GrammarDiff.h                      |   4 -
 adiff2/src/adiff.cpp                          |   2 -
 alib2algo/src/automaton/EpsilonClosure.cpp    |   4 -
 alib2algo/src/automaton/EpsilonClosure.h      |   1 -
 .../src/automaton/FSMSingleInitialState.cpp   |   4 -
 .../src/automaton/FSMSingleInitialState.h     |   1 -
 alib2algo/src/automaton/FSMTotal.cpp          |   4 -
 alib2algo/src/automaton/FSMTotal.h            |   1 -
 alib2algo/src/automaton/PDAToRHPDA.cpp        |   4 -
 alib2algo/src/automaton/PDAToRHPDA.h          |   1 -
 alib2algo/src/automaton/RHPDAToPDA.cpp        |   4 -
 alib2algo/src/automaton/RHPDAToPDA.h          |   1 -
 alib2algo/src/conversions/fa2re/Algebraic.cpp |   4 -
 alib2algo/src/conversions/fa2re/Algebraic.h   |   1 -
 .../fa2re/formal/StateEliminationFormal.cpp   |   5 -
 .../fa2re/formal/StateEliminationFormal.h     |   1 -
 .../unbounded/StateEliminationUnbounded.cpp   |   5 -
 .../unbounded/StateEliminationUnbounded.h     |   1 -
 .../fa2rg/fa2lrg/FAtoLRGConverter.cpp         |   4 -
 .../fa2rg/fa2lrg/FAtoLRGConverter.h           |   1 -
 .../fa2rg/fa2rrg/FAtoRRGConverter.cpp         |   4 -
 .../fa2rg/fa2rrg/FAtoRRGConverter.h           |   1 -
 alib2algo/src/conversions/rg2fa/RGtoFA.cpp    |   5 -
 alib2algo/src/conversions/rg2fa/RGtoFA.h      |   2 -
 alib2algo/src/conversions/rg2re/Algebraic.cpp |   5 -
 alib2algo/src/conversions/rg2re/Algebraic.h   |   2 -
 .../rg2rg/LeftToRightRegularGrammar.cpp       |   5 -
 .../rg2rg/LeftToRightRegularGrammar.h         |   2 -
 .../rg2rg/RightToLeftRegularGrammar.cpp       |   5 -
 .../rg2rg/RightToLeftRegularGrammar.h         |   2 -
 .../src/determinize/nfa/NFADeterminizer.cpp   |   4 -
 .../src/determinize/nfa/NFADeterminizer.h     |   1 -
 .../src/epsilon/fsm/FSMEpsilonRemover.cpp     |   4 -
 alib2algo/src/epsilon/fsm/FSMEpsilonRemover.h |   1 -
 alib2algo/src/minimize/dfa/MinimizeDFA.cpp    |   4 -
 alib2algo/src/minimize/dfa/MinimizeDFA.h      |   1 -
 alib2data/src/Api.cpp                         |  24 --
 alib2data/src/Api.hpp                         |  14 -
 alib2data/src/automaton/AutomatonBase.h       |   2 +-
 alib2data/src/automaton/AutomatonFeatures.h   |   1 -
 .../src/automaton/AutomatonFromXMLParser.cpp  |  68 +---
 .../src/automaton/AutomatonFromXMLParser.h    |   3 -
 .../src/automaton/AutomatonToXMLComposer.cpp  |  68 ----
 .../src/automaton/AutomatonToXMLComposer.h    |   5 +-
 .../FSM/FiniteAutomatonToStringComposer.cpp   |   4 -
 .../FSM/FiniteAutomatonToStringComposer.h     |   1 -
 alib2data/src/automaton/UnknownAutomaton.cpp  | 285 ----------------
 alib2data/src/automaton/UnknownAutomaton.h    | 303 ------------------
 alib2data/src/automaton/UnknownTransition.cpp | 237 --------------
 alib2data/src/automaton/UnknownTransition.h   | 183 -----------
 alib2data/src/factory/AutomatonConvertor.cpp  | 156 ---------
 alib2data/src/factory/AutomatonConvertor.h    | 115 -------
 alib2data/src/factory/AutomatonRevertor.cpp   | 106 ------
 alib2data/src/factory/AutomatonRevertor.h     |  35 --
 alib2data/src/grammar/GrammarBase.h           |   2 +-
 alib2data/src/grammar/GrammarFeatures.h       |   1 -
 .../src/grammar/GrammarFromStringParser.cpp   | 116 +------
 .../src/grammar/GrammarFromStringParser.h     |   2 -
 .../src/grammar/GrammarFromXMLParser.cpp      |  46 +--
 alib2data/src/grammar/GrammarFromXMLParser.h  |   3 -
 .../src/grammar/GrammarToStringComposer.cpp   |  66 ----
 .../src/grammar/GrammarToStringComposer.h     |   5 +-
 .../src/grammar/GrammarToXMLComposer.cpp      |  37 ---
 alib2data/src/grammar/GrammarToXMLComposer.h  |   5 +-
 alib2data/src/grammar/UnknownGrammar.cpp      | 169 ----------
 alib2data/src/grammar/UnknownGrammar.h        |  85 -----
 alib2data/src/grammar/UnknownRule.cpp         |  72 -----
 alib2data/src/grammar/UnknownRule.h           |  71 ----
 alib2data/src/object/ObjectBase.h             |  10 +-
 .../test-src/automaton/AutomatonTest.cpp      |  28 --
 alib2data/test-src/automaton/AutomatonTest.h  |   2 -
 alib2data/test-src/grammar/GrammarTest.cpp    |  71 ----
 alib2data/test-src/grammar/GrammarTest.h      |   4 -
 astat2/src/AutomataStat.cpp                   |   4 -
 astat2/src/AutomataStat.h                     |   1 -
 83 files changed, 15 insertions(+), 2660 deletions(-)
 delete mode 100644 alib2data/src/automaton/UnknownAutomaton.cpp
 delete mode 100644 alib2data/src/automaton/UnknownAutomaton.h
 delete mode 100644 alib2data/src/automaton/UnknownTransition.cpp
 delete mode 100644 alib2data/src/automaton/UnknownTransition.h
 delete mode 100644 alib2data/src/factory/AutomatonConvertor.cpp
 delete mode 100644 alib2data/src/factory/AutomatonConvertor.h
 delete mode 100644 alib2data/src/factory/AutomatonRevertor.cpp
 delete mode 100644 alib2data/src/factory/AutomatonRevertor.h
 delete mode 100644 alib2data/src/grammar/UnknownGrammar.cpp
 delete mode 100644 alib2data/src/grammar/UnknownGrammar.h
 delete mode 100644 alib2data/src/grammar/UnknownRule.cpp
 delete mode 100644 alib2data/src/grammar/UnknownRule.h

diff --git a/aconvert2/src/DotConverter.cpp b/aconvert2/src/DotConverter.cpp
index c0fd64a977..1745ebd72c 100644
--- a/aconvert2/src/DotConverter.cpp
+++ b/aconvert2/src/DotConverter.cpp
@@ -42,10 +42,6 @@ void DotConverter::convert(const automaton::Automaton& a, std::ostream& out) {
 	a.getData().Accept((void*) &out, DotConverter::instance);
 }
 
-void DotConverter::convert(const automaton::UnknownAutomaton&, std::ostream&) {
-	throw exception::AlibException("Unknown automaton is not convertible to dot.");
-}
-
 void DotConverter::convert(const automaton::EpsilonNFA& a, std::ostream& out) {
 	label::LabelToStringComposer composer;
 
@@ -1428,10 +1424,6 @@ void DotConverter::transitions(const automaton::OneTapeDTM& tm, const std::map<a
 
 const DotConverter DotConverter::instance;
 
-void DotConverter::Visit(void* data, const automaton::UnknownAutomaton& automaton) const {
-	DotConverter::convert(automaton, *((std::ostream*) data));
-}
-
 void DotConverter::Visit(void* data, const automaton::EpsilonNFA& automaton) const {
 	DotConverter::convert(automaton, *((std::ostream*) data));
 }
diff --git a/aconvert2/src/DotConverter.h b/aconvert2/src/DotConverter.h
index cd8c69a095..bdbfcf0c86 100644
--- a/aconvert2/src/DotConverter.h
+++ b/aconvert2/src/DotConverter.h
@@ -16,7 +16,6 @@
 #include <utility>
 
 class DotConverter : public automaton::VisitableAutomatonBase::const_visitor_type {
-	void Visit(void*, const automaton::UnknownAutomaton& automaton) const;
 	void Visit(void*, const automaton::EpsilonNFA& automaton) const;
 	void Visit(void*, const automaton::NFA& automaton) const;
 	void Visit(void*, const automaton::DFA& automaton) const;
@@ -33,7 +32,6 @@ class DotConverter : public automaton::VisitableAutomatonBase::const_visitor_typ
 	void Visit(void*, const automaton::SinglePopNPDA& automaton) const;
 	void Visit(void*, const automaton::OneTapeDTM& automaton) const;
 
-	static void transitions(const automaton::UnknownAutomaton& fsm, const std::map<automaton::State, int>& states, std::ostream& out);
 	static void transitions(const automaton::EpsilonNFA& fsm, const std::map<automaton::State, int>& states, std::ostream& out);
 	static void transitions(const automaton::NFA& fsm, const std::map<automaton::State, int>& states, std::ostream& out);
 	static void transitions(const automaton::DFA& fsm, const std::map<automaton::State, int>& states, std::ostream& out);
@@ -54,7 +52,6 @@ class DotConverter : public automaton::VisitableAutomatonBase::const_visitor_typ
 public:
 	static void convert(const automaton::Automaton& a, std::ostream& out);
 
-	static void convert(const automaton::UnknownAutomaton& a, std::ostream& out);
 	static void convert(const automaton::EpsilonNFA& a, std::ostream& out);
 	static void convert(const automaton::NFA& a, std::ostream& out);
 	static void convert(const automaton::DFA& a, std::ostream& out);
diff --git a/aconvert2/src/GasTexConverter.cpp b/aconvert2/src/GasTexConverter.cpp
index 6a3592f509..c9ea59df0b 100644
--- a/aconvert2/src/GasTexConverter.cpp
+++ b/aconvert2/src/GasTexConverter.cpp
@@ -36,10 +36,6 @@ void GasTexConverter::convert(const automaton::Automaton& a, std::ostream& out)
 	a.getData().Accept((void*) &out, GasTexConverter::instance);
 }
 
-void GasTexConverter::convert(const automaton::UnknownAutomaton&, std::ostream&) {
-	throw exception::AlibException("Unable to convert unknown automata to gastex");
-}
-
 void GasTexConverter::convert(const automaton::EpsilonNFA& a, std::ostream& out) {
 	out << "\\begin{center}\n";
 	out << "\\begin{picture}(,)(,)\n";
@@ -1264,10 +1260,6 @@ void GasTexConverter::transitions(const automaton::OneTapeDTM& tm, std::ostream&
 
 const GasTexConverter GasTexConverter::instance;
 
-void GasTexConverter::Visit(void* data, const automaton::UnknownAutomaton& automaton) const {
-	GasTexConverter::convert(automaton, *((std::ostream*) data));
-}
-
 void GasTexConverter::Visit(void* data, const automaton::EpsilonNFA& automaton) const {
 	GasTexConverter::convert(automaton, *((std::ostream*) data));
 }
diff --git a/aconvert2/src/GasTexConverter.h b/aconvert2/src/GasTexConverter.h
index c02234cb02..6d8032fbc8 100644
--- a/aconvert2/src/GasTexConverter.h
+++ b/aconvert2/src/GasTexConverter.h
@@ -16,7 +16,6 @@
 #include "alphabet/Symbol.h"
 
 class GasTexConverter : public automaton::VisitableAutomatonBase::const_visitor_type {
-	void Visit(void*, const automaton::UnknownAutomaton& automaton) const;
 	void Visit(void*, const automaton::EpsilonNFA& automaton) const;
 	void Visit(void*, const automaton::NFA& automaton) const;
 	void Visit(void*, const automaton::DFA& automaton) const;
@@ -36,7 +35,6 @@ class GasTexConverter : public automaton::VisitableAutomatonBase::const_visitor_
 	static void printTransitionMap( const std::map<std::pair<std::string, std::string>, std::string> transitionMap, std::ostream& out);
 	static std::string getStackSymbols(const std::vector<alphabet::Symbol>& stackSymbols);
 
-	static void transitions(const automaton::UnknownAutomaton& fsm, std::ostream& out);
 	static void transitions(const automaton::EpsilonNFA& fsm, std::ostream& out);
 	static void transitions(const automaton::NFA& fsm, std::ostream& out);
 	static void transitions(const automaton::DFA& fsm, std::ostream& out);
@@ -57,7 +55,6 @@ class GasTexConverter : public automaton::VisitableAutomatonBase::const_visitor_
 public:
 	static void convert(const automaton::Automaton& a, std::ostream& out);
 
-	static void convert(const automaton::UnknownAutomaton& a, std::ostream& out);
 	static void convert(const automaton::EpsilonNFA& a, std::ostream& out);
 	static void convert(const automaton::NFA& a, std::ostream& out);
 	static void convert(const automaton::DFA& a, std::ostream& out);
diff --git a/aconvert2/src/aconvert.cpp b/aconvert2/src/aconvert.cpp
index 3fd16905ac..7254f2b48d 100644
--- a/aconvert2/src/aconvert.cpp
+++ b/aconvert2/src/aconvert.cpp
@@ -15,7 +15,6 @@
 #include <getopt.h>
 
 #include "automaton/Automaton.h"
-#include "automaton/UnknownAutomaton.h"
 #include "factory/DataFactory.hpp"
 #include "exception/AlibException.h"
 
diff --git a/adiff2/src/AutomatonDiff.cpp b/adiff2/src/AutomatonDiff.cpp
index 49aabc9e5a..a403c97be0 100644
--- a/adiff2/src/AutomatonDiff.cpp
+++ b/adiff2/src/AutomatonDiff.cpp
@@ -19,7 +19,6 @@
 #include <iostream>
 #include <algorithm>
 
-#include "automaton/UnknownAutomaton.h"
 #include "automaton/FSM/DFA.h"
 #include "automaton/FSM/NFA.h"
 #include "automaton/FSM/EpsilonNFA.h"
@@ -31,18 +30,6 @@
 
 #include "exception/AlibException.h"
 
-bool AutomatonDiff::testDiff(const automaton::UnknownAutomaton& a, const automaton::UnknownAutomaton& b) {
-	return  	a.getBlankSymbol()    == b.getBlankSymbol()    &&
-			a.getFinalStates()    == b.getFinalStates()    &&
-			a.getInitialStates()  == b.getInitialStates()  &&
-//			a.getInputSymbols()   == b.getInputSymbols()   &&
-//			a.getStackSymbols()   == b.getStackSymbols()   &&
-			a.getInitialSymbols() == b.getInitialSymbols() &&
-			a.getStates()         == b.getStates()         &&
-//			a.getTapeSymbols()    == b.getTapeSymbols()    &&
-			a.getTransitions()    == b.getTransitions()    ;
-}
-
 bool AutomatonDiff::testDiff(const automaton::DFA& a, const automaton::DFA& b) {
 	return  	a.getFinalStates()    == b.getFinalStates()    &&
 			a.getInitialState()   == b.getInitialState()   &&
@@ -161,66 +148,6 @@ template <class T, class R> void AutomatonDiff::mapDiff(const std::map<T, R> a,
 	}
 }
 
-void AutomatonDiff::printDiff(const automaton::UnknownAutomaton& a, const automaton::UnknownAutomaton& b) {
-	std::cout << "AutomataDiffer" << std::endl;
-
-	if(a.getBlankSymbol() != b.getBlankSymbol()) {
-		std::cout << "Blank symbol" << std::endl;
-
-		std::cout << "< " << a.getBlankSymbol() << std::endl;
-		std::cout << "---" << std::endl;
-		std::cout << "> " << b.getBlankSymbol() << std::endl;
-	}
-
-	if(a.getFinalStates() != b.getFinalStates()){
-		std::cout << "FinalStates" << std::endl;
-
-		AutomatonDiff::setDiff(a.getFinalStates(), b.getFinalStates());
-	}
-
-	if(a.getInitialStates() != b.getInitialStates()){
-		std::cout << "InitialStates" << std::endl;
-
-		AutomatonDiff::setDiff(a.getInitialStates(), b.getInitialStates());
-	}
-
-	if(a.getInputSymbols() != b.getInputSymbols()) {
-		std::cout << "InputSymbols" << std::endl;
-
-		AutomatonDiff::setDiff(a.getInputSymbols(), b.getInputSymbols());
-	}
-
-	if(a.getStackSymbols() != b.getStackSymbols()) {
-		std::cout << "StackSymbols" << std::endl;
-
-		AutomatonDiff::setDiff(a.getStackSymbols(), b.getStackSymbols());
-	}
-
-	if(a.getInitialSymbols() != b.getInitialSymbols()) {
-		std::cout << "InitialSymbols" << std::endl;
-
-		AutomatonDiff::setDiff(a.getInitialSymbols(), b.getInitialSymbols());
-	}
-
-	if(a.getStates() != b.getStates()) {
-		std::cout << "States" << std::endl;
-
-		AutomatonDiff::setDiff(a.getStates(), b.getStates());
-	}
-
-	if(a.getTapeSymbols() != b.getTapeSymbols()) {
-		std::cout << "TapeSymbols" << std::endl;
-
-		AutomatonDiff::setDiff(a.getTapeSymbols(), b.getTapeSymbols());
-	}
-
-	if(a.getTransitions() != b.getTransitions()) {
-		std::cout << "Transitions" << std::endl;
-
-		AutomatonDiff::setDiff(a.getTransitions(), b.getTransitions());
-	}
-}
-
 void AutomatonDiff::printDiff(const automaton::DFA& a, const automaton::DFA& b) {
 	std::cout << "AutomataDiffer" << std::endl;
 
@@ -535,15 +462,6 @@ void AutomatonDiff::printDiff(const automaton::OneTapeDTM& a, const automaton::O
 	}
 }
 
-int AutomatonDiff::diff(const automaton::UnknownAutomaton& a, const automaton::UnknownAutomaton& b) {
-	if(!AutomatonDiff::testDiff(a, b)) {
-	  AutomatonDiff::printDiff(a, b);
-	  return 1;
-	} else {
-	  return 0;
-	}
-}
-
 int AutomatonDiff::diff(const automaton::DFA& a, const automaton::DFA& b) {
 	if(!AutomatonDiff::testDiff(a, b)) {
 	  AutomatonDiff::printDiff(a, b);
@@ -635,10 +553,6 @@ int AutomatonDiff::dynamicDiff(const automaton::Automaton& a, const automaton::A
 int AutomatonDiff::diff(const automaton::Automaton& a, const automaton::Automaton& b) {
 	int res;
 
-	res = dynamicDiff<automaton::UnknownAutomaton>(a, b);
-	if(res == 0) return 0;
-	if(res == 1) return 1;
-
 	res = dynamicDiff<automaton::DFA>(a, b);
 	if(res == 0) return 0;
 	if(res == 1) return 1;
diff --git a/adiff2/src/AutomatonDiff.h b/adiff2/src/AutomatonDiff.h
index ffca652033..2ef119b116 100644
--- a/adiff2/src/AutomatonDiff.h
+++ b/adiff2/src/AutomatonDiff.h
@@ -17,9 +17,6 @@
 #include <utility>
 
 class AutomatonDiff {
-	static bool testDiff(const automaton::UnknownAutomaton& a, const automaton::UnknownAutomaton& b);
-	static void printDiff(const automaton::UnknownAutomaton& a, const automaton::UnknownAutomaton& b);
-
 	static bool testDiff(const automaton::DFA& a, const automaton::DFA& b);
 	static void printDiff(const automaton::DFA& a, const automaton::DFA& b);
 
@@ -48,7 +45,6 @@ class AutomatonDiff {
 	template <class T> static void listDiff(const std::list<T> a, const std::list<T> b);
 	template <class T, class R> static void mapDiff(const std::map<T, R> a, const std::map<T, R> b);
 public:
-	static int diff(const automaton::UnknownAutomaton& a, const automaton::UnknownAutomaton& b);
 	static int diff(const automaton::DFA& a, const automaton::DFA& b);
 	static int diff(const automaton::NFA& a, const automaton::NFA& b);
 	static int diff(const automaton::EpsilonNFA& a, const automaton::EpsilonNFA& b);
diff --git a/adiff2/src/GrammarDiff.cpp b/adiff2/src/GrammarDiff.cpp
index 3422d66b33..c060d9ef6f 100644
--- a/adiff2/src/GrammarDiff.cpp
+++ b/adiff2/src/GrammarDiff.cpp
@@ -18,7 +18,6 @@
 
 #include "std/set.hpp"
 
-#include "grammar/UnknownGrammar.h"
 #include "grammar/Regular/LeftLG.h"
 #include "grammar/Regular/LeftRG.h"
 #include "grammar/Regular/RightLG.h"
@@ -35,13 +34,6 @@
 
 #include "exception/AlibException.h"
 
-bool GrammarDiff::testDiff(const grammar::UnknownGrammar& a, const grammar::UnknownGrammar& b) {
-	return  	a.getNonterminalAlphabet() == b.getNonterminalAlphabet() &&
-			a.getRules()               == b.getRules()               &&
-			a.getInitialSymbol()       == b.getInitialSymbol()       &&
-			a.getTerminalAlphabet()    == b.getTerminalAlphabet()    ;
-}
-
 bool GrammarDiff::testDiff(const grammar::LeftLG& a, const grammar::LeftLG& b) {
 	return  	a.getNonterminalAlphabet() == b.getNonterminalAlphabet() &&
 			a.getRules()               == b.getRules()               &&
@@ -181,36 +173,6 @@ template <class T, class R> void GrammarDiff::mapDiff(const std::map<T, R> a, co
 	}
 }
 
-void GrammarDiff::printDiff(const grammar::UnknownGrammar& a, const grammar::UnknownGrammar& b) {
-	std::cout << "GrammarDiffer" << std::endl;
-
-	if(a.getNonterminalAlphabet() != b.getNonterminalAlphabet()) {
-		std::cout << "Nonterminal alphabet" << std::endl;
-
-		GrammarDiff::setDiff(a.getNonterminalAlphabet(), b.getNonterminalAlphabet());
-	}
-
-	if(a.getRules() != b.getRules()){
-		std::cout << "Rules" << std::endl;
-
-		GrammarDiff::setDiff(a.getRules(), b.getRules());
-	}
-
-	if(a.getInitialSymbol() != b.getInitialSymbol()){
-		std::cout << "Initial symbol" << std::endl;
-
-		std::cout << "< " << a.getInitialSymbol() << std::endl;
-		std::cout << "---" << std::endl;
-		std::cout << "> " << b.getInitialSymbol() << std::endl;
-	}
-
-	if(a.getTerminalAlphabet() != b.getTerminalAlphabet()) {
-		std::cout << "Terminal alphabet" << std::endl;
-
-		GrammarDiff::setDiff(a.getTerminalAlphabet(), b.getTerminalAlphabet());
-	}
-}
-
 void GrammarDiff::printDiff(const grammar::LeftLG& a, const grammar::LeftLG& b) {
 	std::cout << "GrammarDiffer" << std::endl;
 
@@ -601,15 +563,6 @@ void GrammarDiff::printDiff(const grammar::UnrestrictedGrammar& a, const grammar
 	}
 }
 
-int GrammarDiff::diff(const grammar::UnknownGrammar& a, const grammar::UnknownGrammar& b) {
-	if(!GrammarDiff::testDiff(a, b)) {
-	  GrammarDiff::printDiff(a, b);
-	  return 1;
-	} else {
-	  return 0;
-	}
-}
-
 int GrammarDiff::diff(const grammar::LeftLG& a, const grammar::LeftLG& b) {
 	if(!GrammarDiff::testDiff(a, b)) {
 	  GrammarDiff::printDiff(a, b);
@@ -746,10 +699,6 @@ int GrammarDiff::dynamicDiff(const grammar::Grammar& a, const grammar::Grammar&
 int GrammarDiff::diff(const grammar::Grammar& a, const grammar::Grammar& b) {
 	int res;
 
-	res = dynamicDiff<grammar::UnknownGrammar>(a, b);
-	if(res == 0) return 0;
-	if(res == 1) return 1;
-
 	res = dynamicDiff<grammar::LeftLG>(a, b);
 	if(res == 0) return 0;
 	if(res == 1) return 1;
diff --git a/adiff2/src/GrammarDiff.h b/adiff2/src/GrammarDiff.h
index d40b8865ac..1af254357a 100644
--- a/adiff2/src/GrammarDiff.h
+++ b/adiff2/src/GrammarDiff.h
@@ -17,9 +17,6 @@
 #include <utility>
 
 class GrammarDiff {
-	static bool testDiff(const grammar::UnknownGrammar& a, const grammar::UnknownGrammar& b);
-	static void printDiff(const grammar::UnknownGrammar& a, const grammar::UnknownGrammar& b);
-
 	static bool testDiff(const grammar::LeftLG& a, const grammar::LeftLG& b);
 	static void printDiff(const grammar::LeftLG& a, const grammar::LeftLG& b);
 
@@ -63,7 +60,6 @@ class GrammarDiff {
 	template <class T> static void listDiff(const std::list<T> a, const std::list<T> b);
 	template <class T, class R> static void mapDiff(const std::map<T, R> a, const std::map<T, R> b);
 public:
-	static int diff(const grammar::UnknownGrammar& a, const grammar::UnknownGrammar& b);
 	static int diff(const grammar::LeftLG& a, const grammar::LeftLG& b);
 	static int diff(const grammar::LeftRG& a, const grammar::LeftRG& b);
 	static int diff(const grammar::RightLG& a, const grammar::RightLG& b);
diff --git a/adiff2/src/adiff.cpp b/adiff2/src/adiff.cpp
index 0db662bc0f..a10bb17e77 100644
--- a/adiff2/src/adiff.cpp
+++ b/adiff2/src/adiff.cpp
@@ -8,8 +8,6 @@
 
 #include <iostream>
 
-#include "automaton/UnknownAutomaton.h"
-#include "grammar/UnknownGrammar.h"
 #include "factory/DataFactory.hpp"
 #include "exception/AlibException.h"
 
diff --git a/alib2algo/src/automaton/EpsilonClosure.cpp b/alib2algo/src/automaton/EpsilonClosure.cpp
index 0130311bba..e1c51e9b61 100644
--- a/alib2algo/src/automaton/EpsilonClosure.cpp
+++ b/alib2algo/src/automaton/EpsilonClosure.cpp
@@ -128,10 +128,6 @@ std::set<automaton::State> EpsilonClosure::epsilonClosure(const Automaton& autom
 	return std::move(out.second);
 }
 
-void EpsilonClosure::Visit(void*, const UnknownAutomaton&) const {
-	throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void EpsilonClosure::Visit(void* data, const EpsilonNFA& automaton) const {
 	std::pair<automaton::State, std::set<automaton::State>> & out = *((std::pair<automaton::State, std::set<automaton::State>>*) data);
 	out.second = std::move(this->epsilonClosure(automaton, out.first));
diff --git a/alib2algo/src/automaton/EpsilonClosure.h b/alib2algo/src/automaton/EpsilonClosure.h
index 7d64d5399e..6ad2342dc3 100644
--- a/alib2algo/src/automaton/EpsilonClosure.h
+++ b/alib2algo/src/automaton/EpsilonClosure.h
@@ -31,7 +31,6 @@ public:
 	static std::set<automaton::State> epsilonClosure( const automaton::CompactNFA & fsm, const automaton::State & state );
 
 private:
-	void Visit(void*, const UnknownAutomaton& automaton) const;
 	void Visit(void*, const EpsilonNFA& automaton) const;
 	void Visit(void*, const NFA& automaton) const;
 	void Visit(void*, const DFA& automaton) const;
diff --git a/alib2algo/src/automaton/FSMSingleInitialState.cpp b/alib2algo/src/automaton/FSMSingleInitialState.cpp
index 4f615c4d4c..9172dece3d 100644
--- a/alib2algo/src/automaton/FSMSingleInitialState.cpp
+++ b/alib2algo/src/automaton/FSMSingleInitialState.cpp
@@ -64,10 +64,6 @@ T FSMSingleInitialState::convert(const T& automaton) {
 	return res;
 }
 
-void FSMSingleInitialState::Visit(void*, const UnknownAutomaton&) const {
-	throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void FSMSingleInitialState::Visit(void* data, const EpsilonNFA& automaton) const {
 	automaton::Automaton*& out = *((automaton::Automaton**) data);
 	out = new automaton::Automaton(this->convert(automaton));
diff --git a/alib2algo/src/automaton/FSMSingleInitialState.h b/alib2algo/src/automaton/FSMSingleInitialState.h
index dca46392a4..15f8d6e593 100644
--- a/alib2algo/src/automaton/FSMSingleInitialState.h
+++ b/alib2algo/src/automaton/FSMSingleInitialState.h
@@ -33,7 +33,6 @@ public:
 	//static automaton::CompactNFA convert(const automaton::CompactNFA& automaton);
 
 private:
-	void Visit(void*, const UnknownAutomaton& automaton) const;
 	void Visit(void*, const EpsilonNFA& automaton) const;
 	void Visit(void*, const NFA& automaton) const;
 	void Visit(void*, const DFA& automaton) const;
diff --git a/alib2algo/src/automaton/FSMTotal.cpp b/alib2algo/src/automaton/FSMTotal.cpp
index b22570c26e..0f2d3cdd82 100644
--- a/alib2algo/src/automaton/FSMTotal.cpp
+++ b/alib2algo/src/automaton/FSMTotal.cpp
@@ -58,10 +58,6 @@ automaton::DFA FSMTotal::total(const automaton::DFA& automaton) {
 	return res;
 }
 
-void FSMTotal::Visit(void*, const UnknownAutomaton&) const {
-	throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void FSMTotal::Visit(void*, const EpsilonNFA&) const {
 	throw exception::AlibException("Unsupported automaton type EpsilonNFA");
 }
diff --git a/alib2algo/src/automaton/FSMTotal.h b/alib2algo/src/automaton/FSMTotal.h
index ef0b7a1ee5..720eed9592 100644
--- a/alib2algo/src/automaton/FSMTotal.h
+++ b/alib2algo/src/automaton/FSMTotal.h
@@ -32,7 +32,6 @@ public:
 	static automaton::DFA total(const automaton::DFA& automaton);
 
 private:
-	void Visit(void*, const UnknownAutomaton& automaton) const;
 	void Visit(void*, const EpsilonNFA& automaton) const;
 	void Visit(void*, const NFA& automaton) const;
 	void Visit(void*, const DFA& automaton) const;
diff --git a/alib2algo/src/automaton/PDAToRHPDA.cpp b/alib2algo/src/automaton/PDAToRHPDA.cpp
index 341b79e86e..a296dbea46 100644
--- a/alib2algo/src/automaton/PDAToRHPDA.cpp
+++ b/alib2algo/src/automaton/PDAToRHPDA.cpp
@@ -168,10 +168,6 @@ automaton::Automaton PDAToRHPDA::convert(const Automaton& automaton) {
 	return std::move(res);
 }
 
-void PDAToRHPDA::Visit(void*, const UnknownAutomaton&) const {
-	throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void PDAToRHPDA::Visit(void*, const EpsilonNFA&) const {
 	throw exception::AlibException("Unsupported automaton type EpsilonNFA");
 }
diff --git a/alib2algo/src/automaton/PDAToRHPDA.h b/alib2algo/src/automaton/PDAToRHPDA.h
index 677713a00b..fb6568658d 100644
--- a/alib2algo/src/automaton/PDAToRHPDA.h
+++ b/alib2algo/src/automaton/PDAToRHPDA.h
@@ -29,7 +29,6 @@ public:
 	 */
 	static automaton::Automaton convert( const automaton::Automaton & automaton );
 private:
-	void Visit(void*, const UnknownAutomaton& automaton) const;
 	void Visit(void*, const EpsilonNFA& automaton) const;
 	void Visit(void*, const NFA& automaton) const;
 	void Visit(void*, const DFA& automaton) const;
diff --git a/alib2algo/src/automaton/RHPDAToPDA.cpp b/alib2algo/src/automaton/RHPDAToPDA.cpp
index d4beb955c9..710ed1f998 100644
--- a/alib2algo/src/automaton/RHPDAToPDA.cpp
+++ b/alib2algo/src/automaton/RHPDAToPDA.cpp
@@ -258,10 +258,6 @@ automaton::Automaton RHPDAToPDA::convert(const Automaton& automaton) {
 	return std::move(res);
 }
 
-void RHPDAToPDA::Visit(void*, const UnknownAutomaton&) const {
-	throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void RHPDAToPDA::Visit(void*, const EpsilonNFA&) const {
 	throw exception::AlibException("Unsupported automaton type EpsilonNFA");
 }
diff --git a/alib2algo/src/automaton/RHPDAToPDA.h b/alib2algo/src/automaton/RHPDAToPDA.h
index 2ad7a041f2..9d1374eff0 100644
--- a/alib2algo/src/automaton/RHPDAToPDA.h
+++ b/alib2algo/src/automaton/RHPDAToPDA.h
@@ -29,7 +29,6 @@ public:
 	 */
 	static automaton::Automaton convert( const automaton::Automaton & automaton );
 private:
-	void Visit(void*, const UnknownAutomaton& automaton) const;
 	void Visit(void*, const EpsilonNFA& automaton) const;
 	void Visit(void*, const NFA& automaton) const;
 	void Visit(void*, const DFA& automaton) const;
diff --git a/alib2algo/src/conversions/fa2re/Algebraic.cpp b/alib2algo/src/conversions/fa2re/Algebraic.cpp
index eb7aabaa8f..77abf0d0ee 100644
--- a/alib2algo/src/conversions/fa2re/Algebraic.cpp
+++ b/alib2algo/src/conversions/fa2re/Algebraic.cpp
@@ -115,10 +115,6 @@ regexp::UnboundedRegExp Algebraic::convert( const automaton::DFA & automaton ) {
 }
 
 
-void Algebraic::Visit(void*, const automaton::UnknownAutomaton&) const {
-	throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void Algebraic::Visit(void* data, const automaton::EpsilonNFA& automaton) const {
 	regexp::RegExp* & out = *((regexp::RegExp**) data);
 	out = new regexp::RegExp(this->convert(automaton));
diff --git a/alib2algo/src/conversions/fa2re/Algebraic.h b/alib2algo/src/conversions/fa2re/Algebraic.h
index da0c67e7f6..5c87df1cb6 100644
--- a/alib2algo/src/conversions/fa2re/Algebraic.h
+++ b/alib2algo/src/conversions/fa2re/Algebraic.h
@@ -42,7 +42,6 @@ public:
 	static regexp::UnboundedRegExp convert(const T& automaton);
 
 private:
-	void Visit(void*, const automaton::UnknownAutomaton&) const;
 	void Visit(void*, const automaton::EpsilonNFA&) const;
 	void Visit(void*, const automaton::NFA&) const;
 	void Visit(void*, const automaton::DFA&) const;
diff --git a/alib2algo/src/conversions/fa2re/formal/StateEliminationFormal.cpp b/alib2algo/src/conversions/fa2re/formal/StateEliminationFormal.cpp
index b4418f1324..ec6c94cd4d 100644
--- a/alib2algo/src/conversions/fa2re/formal/StateEliminationFormal.cpp
+++ b/alib2algo/src/conversions/fa2re/formal/StateEliminationFormal.cpp
@@ -58,11 +58,6 @@ regexp::FormalRegExp StateEliminationFormal::convert(const T& automaton)
 }
 
 
-void StateEliminationFormal::Visit(void*, const automaton::UnknownAutomaton&) const
-{
-    throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void StateEliminationFormal::Visit(void* data, const automaton::EpsilonNFA& automaton) const
 {
     regexp::RegExp* & out = *((regexp::RegExp**) data);
diff --git a/alib2algo/src/conversions/fa2re/formal/StateEliminationFormal.h b/alib2algo/src/conversions/fa2re/formal/StateEliminationFormal.h
index 8eba365ccf..000b885067 100644
--- a/alib2algo/src/conversions/fa2re/formal/StateEliminationFormal.h
+++ b/alib2algo/src/conversions/fa2re/formal/StateEliminationFormal.h
@@ -40,7 +40,6 @@ public:
     static regexp::FormalRegExp convert(const T& automaton);
 
 private:
-    void Visit(void*, const automaton::UnknownAutomaton& automaton) const;
     void Visit(void*, const automaton::EpsilonNFA& automaton) const;
     void Visit(void*, const automaton::NFA& automaton) const;
     void Visit(void*, const automaton::DFA& automaton) const;
diff --git a/alib2algo/src/conversions/fa2re/unbounded/StateEliminationUnbounded.cpp b/alib2algo/src/conversions/fa2re/unbounded/StateEliminationUnbounded.cpp
index 1a0cafd101..75cff46c8a 100644
--- a/alib2algo/src/conversions/fa2re/unbounded/StateEliminationUnbounded.cpp
+++ b/alib2algo/src/conversions/fa2re/unbounded/StateEliminationUnbounded.cpp
@@ -56,11 +56,6 @@ regexp::UnboundedRegExp StateEliminationUnbounded::convert(const T& automaton)
 }
 
 
-void StateEliminationUnbounded::Visit(void*, const automaton::UnknownAutomaton&) const
-{
-    throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void StateEliminationUnbounded::Visit(void* data, const automaton::EpsilonNFA& automaton) const
 {
     regexp::RegExp* & out = *((regexp::RegExp**) data);
diff --git a/alib2algo/src/conversions/fa2re/unbounded/StateEliminationUnbounded.h b/alib2algo/src/conversions/fa2re/unbounded/StateEliminationUnbounded.h
index 29e101811f..fcb32c7d21 100644
--- a/alib2algo/src/conversions/fa2re/unbounded/StateEliminationUnbounded.h
+++ b/alib2algo/src/conversions/fa2re/unbounded/StateEliminationUnbounded.h
@@ -41,7 +41,6 @@ public:
     static regexp::UnboundedRegExp convert(const T& automaton);
 
 private:
-    void Visit(void*, const automaton::UnknownAutomaton& automaton) const;
     void Visit(void*, const automaton::EpsilonNFA& automaton) const;
     void Visit(void*, const automaton::NFA& automaton) const;
     void Visit(void*, const automaton::DFA& automaton) const;
diff --git a/alib2algo/src/conversions/fa2rg/fa2lrg/FAtoLRGConverter.cpp b/alib2algo/src/conversions/fa2rg/fa2lrg/FAtoLRGConverter.cpp
index 2a90f93f29..c4681a2031 100644
--- a/alib2algo/src/conversions/fa2rg/fa2lrg/FAtoLRGConverter.cpp
+++ b/alib2algo/src/conversions/fa2rg/fa2lrg/FAtoLRGConverter.cpp
@@ -115,10 +115,6 @@ grammar::Grammar FAtoLRGConverter::convert(const automaton::Automaton& automaton
 	return res;
 }
 
-void FAtoLRGConverter::Visit(void*, const automaton::UnknownAutomaton&) const {
-	throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void FAtoLRGConverter::Visit(void*, const automaton::EpsilonNFA& ) const {
 	throw exception::AlibException("Unsupported automaton type EpsilonNFA");
 }
diff --git a/alib2algo/src/conversions/fa2rg/fa2lrg/FAtoLRGConverter.h b/alib2algo/src/conversions/fa2rg/fa2lrg/FAtoLRGConverter.h
index d6b6e7a3db..b6944c9b04 100644
--- a/alib2algo/src/conversions/fa2rg/fa2lrg/FAtoLRGConverter.h
+++ b/alib2algo/src/conversions/fa2rg/fa2lrg/FAtoLRGConverter.h
@@ -31,7 +31,6 @@ public:
 	static grammar::LeftRG convert(const automaton::DFA& automaton);
 
 private:
-	void Visit(void*, const automaton::UnknownAutomaton& automaton) const;
 	void Visit(void*, const automaton::EpsilonNFA& automaton) const;
 	void Visit(void*, const automaton::NFA& automaton) const;
 	void Visit(void*, const automaton::DFA& automaton) const;
diff --git a/alib2algo/src/conversions/fa2rg/fa2rrg/FAtoRRGConverter.cpp b/alib2algo/src/conversions/fa2rg/fa2rrg/FAtoRRGConverter.cpp
index 40f0dbfe54..83cb5e59c6 100644
--- a/alib2algo/src/conversions/fa2rg/fa2rrg/FAtoRRGConverter.cpp
+++ b/alib2algo/src/conversions/fa2rg/fa2rrg/FAtoRRGConverter.cpp
@@ -109,10 +109,6 @@ grammar::Grammar FAtoRRGConverter::convert(const automaton::Automaton& automaton
 	return res;
 }
 
-void FAtoRRGConverter::Visit(void*, const automaton::UnknownAutomaton&) const {
-	throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void FAtoRRGConverter::Visit(void*, const automaton::EpsilonNFA& ) const {
 	throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
 }
diff --git a/alib2algo/src/conversions/fa2rg/fa2rrg/FAtoRRGConverter.h b/alib2algo/src/conversions/fa2rg/fa2rrg/FAtoRRGConverter.h
index a3c9c7c005..82b8955cb5 100644
--- a/alib2algo/src/conversions/fa2rg/fa2rrg/FAtoRRGConverter.h
+++ b/alib2algo/src/conversions/fa2rg/fa2rrg/FAtoRRGConverter.h
@@ -31,7 +31,6 @@ public:
 	static grammar::RightRG convert(const automaton::DFA& automaton);
 
 private:
-	void Visit(void*, const automaton::UnknownAutomaton& automaton) const;
 	void Visit(void*, const automaton::EpsilonNFA& automaton) const;
 	void Visit(void*, const automaton::NFA& automaton) const;
 	void Visit(void*, const automaton::DFA& automaton) const;
diff --git a/alib2algo/src/conversions/rg2fa/RGtoFA.cpp b/alib2algo/src/conversions/rg2fa/RGtoFA.cpp
index 8131962e8f..ea4f4c4342 100644
--- a/alib2algo/src/conversions/rg2fa/RGtoFA.cpp
+++ b/alib2algo/src/conversions/rg2fa/RGtoFA.cpp
@@ -121,11 +121,6 @@ automaton::NFA RGtoFA::convert(const grammar::RightRG& grammar)
     return automaton;
 }
 
-void RGtoFA::Visit(void*, const grammar::UnknownGrammar&) const
-{
-    throw exception::AlibException("Unsupported grammar type UnknownGrammar");
-}
-
 void RGtoFA::Visit(void*, const grammar::ContextPreservingUnrestrictedGrammar&) const
 {
     throw exception::AlibException("Unsupported grammar type ContextPreservingUnrestrictedGrammar");
diff --git a/alib2algo/src/conversions/rg2fa/RGtoFA.h b/alib2algo/src/conversions/rg2fa/RGtoFA.h
index 280f840ffd..0e3cdfeec2 100644
--- a/alib2algo/src/conversions/rg2fa/RGtoFA.h
+++ b/alib2algo/src/conversions/rg2fa/RGtoFA.h
@@ -39,8 +39,6 @@ public:
     static automaton::NFA convert(const grammar::RightRG& grammar);
 
 private:
-    void Visit(void*, const grammar::UnknownGrammar& grammar) const;
-
     void Visit(void*, const grammar::ContextPreservingUnrestrictedGrammar& grammar) const;
     void Visit(void*, const grammar::UnrestrictedGrammar& grammar) const;
 
diff --git a/alib2algo/src/conversions/rg2re/Algebraic.cpp b/alib2algo/src/conversions/rg2re/Algebraic.cpp
index 509e463059..ff80e73de9 100644
--- a/alib2algo/src/conversions/rg2re/Algebraic.cpp
+++ b/alib2algo/src/conversions/rg2re/Algebraic.cpp
@@ -89,11 +89,6 @@ regexp::RegExp Algebraic::convert(const grammar::RightRG& grammar)
     return regexp::RegExp{solver.solve(grammar.getInitialSymbol())};
 }
 
-void Algebraic::Visit(void*, const grammar::UnknownGrammar&) const
-{
-    throw exception::AlibException("Unsupported grammar type UnknownGrammar");
-}
-
 void Algebraic::Visit(void*, const grammar::ContextPreservingUnrestrictedGrammar&) const
 {
     throw exception::AlibException("Unsupported grammar type ContextPreservingUnrestrictedGrammar");
diff --git a/alib2algo/src/conversions/rg2re/Algebraic.h b/alib2algo/src/conversions/rg2re/Algebraic.h
index 83cd032797..97bb54cde7 100644
--- a/alib2algo/src/conversions/rg2re/Algebraic.h
+++ b/alib2algo/src/conversions/rg2re/Algebraic.h
@@ -33,8 +33,6 @@ public:
     static regexp::RegExp convert(const grammar::LeftRG& grammar);
 
 protected:
-    void Visit(void*, const grammar::UnknownGrammar& grammar) const;
-
     void Visit(void*, const grammar::ContextPreservingUnrestrictedGrammar& grammar) const;
     void Visit(void*, const grammar::UnrestrictedGrammar& grammar) const;
 
diff --git a/alib2algo/src/conversions/rg2rg/LeftToRightRegularGrammar.cpp b/alib2algo/src/conversions/rg2rg/LeftToRightRegularGrammar.cpp
index ab6089d162..fb4047b166 100644
--- a/alib2algo/src/conversions/rg2rg/LeftToRightRegularGrammar.cpp
+++ b/alib2algo/src/conversions/rg2rg/LeftToRightRegularGrammar.cpp
@@ -71,11 +71,6 @@ grammar::RightRG LeftToRightRegularGrammar::convert(const grammar::LeftRG& gramm
 	return rrg;
 }
 
-void LeftToRightRegularGrammar::Visit(void*, const grammar::UnknownGrammar&) const
-{
-	throw exception::AlibException("Unsupported grammar type UnknownGrammar");
-}
-
 void LeftToRightRegularGrammar::Visit(void*, const grammar::ContextPreservingUnrestrictedGrammar&) const
 {
 	throw exception::AlibException("Unsupported grammar type ContextPreservingUnrestrictedGrammar");
diff --git a/alib2algo/src/conversions/rg2rg/LeftToRightRegularGrammar.h b/alib2algo/src/conversions/rg2rg/LeftToRightRegularGrammar.h
index ab25664de2..46945743f3 100644
--- a/alib2algo/src/conversions/rg2rg/LeftToRightRegularGrammar.h
+++ b/alib2algo/src/conversions/rg2rg/LeftToRightRegularGrammar.h
@@ -32,8 +32,6 @@ public:
     static grammar::RightRG convert(const grammar::LeftRG& grammar);
 
 private:
-    void Visit(void*, const grammar::UnknownGrammar& grammar) const;
-
     void Visit(void*, const grammar::ContextPreservingUnrestrictedGrammar& grammar) const;
     void Visit(void*, const grammar::UnrestrictedGrammar& grammar) const;
 
diff --git a/alib2algo/src/conversions/rg2rg/RightToLeftRegularGrammar.cpp b/alib2algo/src/conversions/rg2rg/RightToLeftRegularGrammar.cpp
index d1da71429b..dab08265b2 100644
--- a/alib2algo/src/conversions/rg2rg/RightToLeftRegularGrammar.cpp
+++ b/alib2algo/src/conversions/rg2rg/RightToLeftRegularGrammar.cpp
@@ -73,11 +73,6 @@ grammar::LeftRG RightToLeftRegularGrammar::convert(const grammar::RightRG& gramm
 	return lrg;
 }
 
-void RightToLeftRegularGrammar::Visit(void*, const grammar::UnknownGrammar&) const
-{
-	throw exception::AlibException("Unsupported grammar type UnknownGrammar");
-}
-
 void RightToLeftRegularGrammar::Visit(void*, const grammar::ContextPreservingUnrestrictedGrammar&) const
 {
 	throw exception::AlibException("Unsupported grammar type ContextPreservingUnrestrictedGrammar");
diff --git a/alib2algo/src/conversions/rg2rg/RightToLeftRegularGrammar.h b/alib2algo/src/conversions/rg2rg/RightToLeftRegularGrammar.h
index bccd75f130..6b2713234e 100644
--- a/alib2algo/src/conversions/rg2rg/RightToLeftRegularGrammar.h
+++ b/alib2algo/src/conversions/rg2rg/RightToLeftRegularGrammar.h
@@ -33,8 +33,6 @@ public:
     static grammar::LeftRG convert(const grammar::RightRG& grammar);
 
 private:
-    void Visit(void*, const grammar::UnknownGrammar& grammar) const;
-
     void Visit(void*, const grammar::ContextPreservingUnrestrictedGrammar& grammar) const;
     void Visit(void*, const grammar::UnrestrictedGrammar& grammar) const;
 
diff --git a/alib2algo/src/determinize/nfa/NFADeterminizer.cpp b/alib2algo/src/determinize/nfa/NFADeterminizer.cpp
index 0aeb51dd04..30dc42c626 100644
--- a/alib2algo/src/determinize/nfa/NFADeterminizer.cpp
+++ b/alib2algo/src/determinize/nfa/NFADeterminizer.cpp
@@ -68,10 +68,6 @@ automaton::DFA NFADeterminizer::determinize(const automaton::NFA& nfa) {
 	return res;
 }
 
-void NFADeterminizer::Visit(void*, const automaton::UnknownAutomaton&) const {
-	throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void NFADeterminizer::Visit(void*, const automaton::EpsilonNFA&) const {
 	throw exception::AlibException("Unsupported automaton type EpsilonNFA");
 }
diff --git a/alib2algo/src/determinize/nfa/NFADeterminizer.h b/alib2algo/src/determinize/nfa/NFADeterminizer.h
index a0460772ec..a9a8fb3341 100644
--- a/alib2algo/src/determinize/nfa/NFADeterminizer.h
+++ b/alib2algo/src/determinize/nfa/NFADeterminizer.h
@@ -24,7 +24,6 @@ namespace determinize {
  */
 class NFADeterminizer : public automaton::VisitableAutomatonBase::const_visitor_type {
 private:
-	void Visit(void*, const automaton::UnknownAutomaton& automaton) const;
 	void Visit(void*, const automaton::EpsilonNFA& automaton) const;
 	void Visit(void*, const automaton::NFA& automaton) const;
 	void Visit(void*, const automaton::DFA& automaton) const;
diff --git a/alib2algo/src/epsilon/fsm/FSMEpsilonRemover.cpp b/alib2algo/src/epsilon/fsm/FSMEpsilonRemover.cpp
index b6003de68b..da30a5e529 100644
--- a/alib2algo/src/epsilon/fsm/FSMEpsilonRemover.cpp
+++ b/alib2algo/src/epsilon/fsm/FSMEpsilonRemover.cpp
@@ -73,10 +73,6 @@ automaton::Automaton FSMEpsilonRemover::remove(const automaton::Automaton& autom
 	return res;
 }
 
-void FSMEpsilonRemover::Visit(void*, const automaton::UnknownAutomaton&) const {
-	throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void FSMEpsilonRemover::Visit(void* data, const automaton::EpsilonNFA& automaton) const {
 	automaton::Automaton* & out = *((automaton::Automaton**) data);
 	out = new automaton::Automaton(this->remove(automaton));
diff --git a/alib2algo/src/epsilon/fsm/FSMEpsilonRemover.h b/alib2algo/src/epsilon/fsm/FSMEpsilonRemover.h
index 4e4781caa5..29c2e5ed4c 100644
--- a/alib2algo/src/epsilon/fsm/FSMEpsilonRemover.h
+++ b/alib2algo/src/epsilon/fsm/FSMEpsilonRemover.h
@@ -32,7 +32,6 @@ public:
 	static automaton::DFA remove( const automaton::DFA & fsm );
 
 private:
-	void Visit(void*, const automaton::UnknownAutomaton& automaton) const;
 	void Visit(void*, const automaton::EpsilonNFA& automaton) const;
 	void Visit(void*, const automaton::NFA& automaton) const;
 	void Visit(void*, const automaton::DFA& automaton) const;
diff --git a/alib2algo/src/minimize/dfa/MinimizeDFA.cpp b/alib2algo/src/minimize/dfa/MinimizeDFA.cpp
index 06bdaf0cbd..de600843a9 100644
--- a/alib2algo/src/minimize/dfa/MinimizeDFA.cpp
+++ b/alib2algo/src/minimize/dfa/MinimizeDFA.cpp
@@ -140,10 +140,6 @@ automaton::DFA MinimizeDFA::minimize(const automaton::DFA& dfa) {
 	return result;
 }
 
-void MinimizeDFA::Visit(void*, const automaton::UnknownAutomaton&) const {
-	throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void MinimizeDFA::Visit(void*, const automaton::EpsilonNFA&) const {
 	throw exception::AlibException("Unsupported automaton type EpsilonNFA");
 }
diff --git a/alib2algo/src/minimize/dfa/MinimizeDFA.h b/alib2algo/src/minimize/dfa/MinimizeDFA.h
index b1d50f2c81..03d122da14 100644
--- a/alib2algo/src/minimize/dfa/MinimizeDFA.h
+++ b/alib2algo/src/minimize/dfa/MinimizeDFA.h
@@ -23,7 +23,6 @@ public:
 	static automaton::DFA minimize(const automaton::DFA& dfa);
 
 protected:
-	void Visit(void*, const automaton::UnknownAutomaton& automaton) const;
 	void Visit(void*, const automaton::EpsilonNFA& automaton) const;
 	void Visit(void*, const automaton::NFA& automaton) const;
 	void Visit(void*, const automaton::DFA& automaton) const;
diff --git a/alib2data/src/Api.cpp b/alib2data/src/Api.cpp
index 8e626c6e69..eaff1036f2 100644
--- a/alib2data/src/Api.cpp
+++ b/alib2data/src/Api.cpp
@@ -146,14 +146,6 @@ std::list<sax::Token> api<automaton::Automaton>::compose(const automaton::Automa
 	return ToXMLComposers::automatonComposer.compose(data);
 }
 
-automaton::UnknownAutomaton api<automaton::UnknownAutomaton>::parse(std::list<sax::Token>& input) {
-	return FromXMLParsers::automatonParser.parseUnknownAutomaton(input);
-}
-
-std::list<sax::Token> api<automaton::UnknownAutomaton>::compose(const automaton::UnknownAutomaton& data) {
-	return ToXMLComposers::automatonComposer.compose(data);
-}
-
 automaton::EpsilonNFA api<automaton::EpsilonNFA>::parse(std::list<sax::Token>& input) {
 	return FromXMLParsers::automatonParser.parseEpsilonNFA(input);
 }
@@ -291,14 +283,6 @@ std::list<sax::Token> api<grammar::Grammar>::compose(const grammar::Grammar& dat
 	return ToXMLComposers::grammarComposer.compose(data);
 }
 
-grammar::UnknownGrammar api<grammar::UnknownGrammar>::parse(std::list<sax::Token>& input) {
-	return FromXMLParsers::grammarParser.parseUnknownGrammar(input);
-}
-
-std::list<sax::Token> api<grammar::UnknownGrammar>::compose(const grammar::UnknownGrammar& data) {
-	return ToXMLComposers::grammarComposer.compose(data);
-}
-
 grammar::LeftLG api<grammar::LeftLG>::parse(std::list<sax::Token>& input) {
 	return FromXMLParsers::grammarParser.parseLeftLG(input);
 }
@@ -584,10 +568,6 @@ void ToXMLComposers::Visit(void* data, const alphabet::LabeledSymbol& symbol) co
 	*((std::list<sax::Token>*) data) = std::move(api<alphabet::LabeledSymbol>::compose(symbol));
 }
 
-void ToXMLComposers::Visit(void* data, const automaton::UnknownAutomaton& automaton) const {
-	*((std::list<sax::Token>*) data) = std::move(api<automaton::UnknownAutomaton>::compose(automaton));
-}
-
 void ToXMLComposers::Visit(void* data, const automaton::EpsilonNFA& automaton) const {
 	*((std::list<sax::Token>*) data) = std::move(api<automaton::EpsilonNFA>::compose(automaton));
 }
@@ -648,10 +628,6 @@ void ToXMLComposers::Visit(void* data, const automaton::OneTapeDTM& automaton) c
 	*((std::list<sax::Token>*) data) = std::move(api<automaton::OneTapeDTM>::compose(automaton));
 }
 
-void ToXMLComposers::Visit(void* data, const grammar::UnknownGrammar& grammar) const {
-	*((std::list<sax::Token>*) data) = std::move(api<grammar::UnknownGrammar>::compose(grammar));
-}
-
 void ToXMLComposers::Visit(void* data, const grammar::LeftLG& grammar) const {
 	*((std::list<sax::Token>*) data) = std::move(api<grammar::LeftLG>::compose(grammar));
 }
diff --git a/alib2data/src/Api.hpp b/alib2data/src/Api.hpp
index 0f5dd1f5d0..5a7e32ba14 100644
--- a/alib2data/src/Api.hpp
+++ b/alib2data/src/Api.hpp
@@ -144,12 +144,6 @@ struct api<automaton::Automaton> {
 	static std::list<sax::Token> compose(const automaton::Automaton& data);
 };
 
-template<>
-struct api<automaton::UnknownAutomaton> {
-	static automaton::UnknownAutomaton parse(std::list<sax::Token>& input);
-	static std::list<sax::Token> compose(const automaton::UnknownAutomaton& data);
-};
-
 template<>
 struct api<automaton::EpsilonNFA> {
 	static automaton::EpsilonNFA parse(std::list<sax::Token>& input);
@@ -252,12 +246,6 @@ struct api<grammar::Grammar> {
 	static std::list<sax::Token> compose(const grammar::Grammar& data);
 };
 
-template<>
-struct api<grammar::UnknownGrammar> {
-	static grammar::UnknownGrammar parse(std::list<sax::Token>& input);
-	static std::list<sax::Token> compose(const grammar::UnknownGrammar& data);
-};
-
 template<>
 struct api<grammar::LeftLG> {
 	static grammar::LeftLG parse(std::list<sax::Token>& input);
@@ -485,7 +473,6 @@ class ToXMLComposers : public VisitableObjectBase::const_visitor_type {
 	void Visit(void*, const alphabet::BottomOfTheStackSymbol& symbol) const;
 	void Visit(void*, const alphabet::EndSymbol& symbol) const;
 
-	void Visit(void*, const automaton::UnknownAutomaton& automaton) const;
 	void Visit(void*, const automaton::EpsilonNFA& automaton) const;
 	void Visit(void*, const automaton::NFA& automaton) const;
 	void Visit(void*, const automaton::DFA& automaton) const;
@@ -502,7 +489,6 @@ class ToXMLComposers : public VisitableObjectBase::const_visitor_type {
 	void Visit(void*, const automaton::SinglePopNPDA& automaton) const;
 	void Visit(void*, const automaton::OneTapeDTM& automaton) const;
 
-	void Visit(void*, const grammar::UnknownGrammar& grammar) const;
 	void Visit(void*, const grammar::LeftLG& grammar) const;
 	void Visit(void*, const grammar::LeftRG& grammar) const;
 	void Visit(void*, const grammar::RightLG& grammar) const;
diff --git a/alib2data/src/automaton/AutomatonBase.h b/alib2data/src/automaton/AutomatonBase.h
index 6869ac08c7..f1c136aced 100644
--- a/alib2data/src/automaton/AutomatonBase.h
+++ b/alib2data/src/automaton/AutomatonBase.h
@@ -14,7 +14,7 @@
 namespace automaton {
 
 typedef std::acceptor_base<
-			automaton::UnknownAutomaton, automaton::DFA, automaton::NFA, automaton::EpsilonNFA, automaton::CompactNFA, automaton::ExtendedNFA, automaton::DPDA, automaton::SinglePopDPDA, automaton::InputDrivenNPDA, automaton::VisiblyPushdownDPDA, automaton::VisiblyPushdownNPDA, automaton::RealTimeHeightDeterministicDPDA, automaton::RealTimeHeightDeterministicNPDA, automaton::NPDA, automaton::SinglePopNPDA, automaton::OneTapeDTM
+			automaton::DFA, automaton::NFA, automaton::EpsilonNFA, automaton::CompactNFA, automaton::ExtendedNFA, automaton::DPDA, automaton::SinglePopDPDA, automaton::InputDrivenNPDA, automaton::VisiblyPushdownDPDA, automaton::VisiblyPushdownNPDA, automaton::RealTimeHeightDeterministicDPDA, automaton::RealTimeHeightDeterministicNPDA, automaton::NPDA, automaton::SinglePopNPDA, automaton::OneTapeDTM
 	> VisitableAutomatonBase;
 
 /**
diff --git a/alib2data/src/automaton/AutomatonFeatures.h b/alib2data/src/automaton/AutomatonFeatures.h
index 9e0776ee8e..aa0c558487 100644
--- a/alib2data/src/automaton/AutomatonFeatures.h
+++ b/alib2data/src/automaton/AutomatonFeatures.h
@@ -11,7 +11,6 @@
 namespace automaton {
 
 enum class FEATURES {
-	AUTOMATON,
 	EPSILON_NFA,
 	NFA,
 	DFA,
diff --git a/alib2data/src/automaton/AutomatonFromXMLParser.cpp b/alib2data/src/automaton/AutomatonFromXMLParser.cpp
index 2c75a1e0c4..392ce7e78e 100644
--- a/alib2data/src/automaton/AutomatonFromXMLParser.cpp
+++ b/alib2data/src/automaton/AutomatonFromXMLParser.cpp
@@ -16,14 +16,11 @@
 namespace automaton {
 
 Automaton AutomatonFromXMLParser::parseAutomaton(std::list<sax::Token> &input) const {
-	return parseAutomaton(input, std::set<FEATURES>({FEATURES::AUTOMATON, FEATURES::EPSILON_NFA, FEATURES::NFA, FEATURES::DFA, FEATURES::COMPACT_NFA, FEATURES::EXTENDED_NFA, FEATURES::DPDA, FEATURES::SINGLE_POP_DPDA, FEATURES::INPUT_DRIVEN_NPDA, FEATURES::VISIBLY_PUSHDOWN_DPDA, FEATURES::VISIBLY_PUSHDOWN_NPDA, FEATURES::REAL_TIME_HEIGHT_DETERMINISTIC_DPDA,  FEATURES::REAL_TIME_HEIGHT_DETERMINISTIC_NPDA, FEATURES::NPDA, FEATURES::SINGLE_POP_NPDA, FEATURES::ONE_TAPE_DTM}));
+	return parseAutomaton(input, std::set<FEATURES>({FEATURES::EPSILON_NFA, FEATURES::NFA, FEATURES::DFA, FEATURES::COMPACT_NFA, FEATURES::EXTENDED_NFA, FEATURES::DPDA, FEATURES::SINGLE_POP_DPDA, FEATURES::INPUT_DRIVEN_NPDA, FEATURES::VISIBLY_PUSHDOWN_DPDA, FEATURES::VISIBLY_PUSHDOWN_NPDA, FEATURES::REAL_TIME_HEIGHT_DETERMINISTIC_DPDA,  FEATURES::REAL_TIME_HEIGHT_DETERMINISTIC_NPDA, FEATURES::NPDA, FEATURES::SINGLE_POP_NPDA, FEATURES::ONE_TAPE_DTM}));
 }
 
 Automaton AutomatonFromXMLParser::parseAutomaton(std::list<sax::Token>& input, const std::set<FEATURES>& features) const {
-	if(isToken(input, sax::Token::TokenType::START_ELEMENT, "automaton")) {
-		if(!features.count(FEATURES::AUTOMATON)) throw exception::AlibException();
-		return Automaton(parseUnknownAutomaton(input));
-	} else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "EpsilonNFA")) {
+	if(isToken(input, sax::Token::TokenType::START_ELEMENT, "EpsilonNFA")) {
 		if(!features.count(FEATURES::EPSILON_NFA)) throw exception::AlibException();
 		return Automaton(parseEpsilonNFA(input));
 	} else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "NFA")) {
@@ -89,39 +86,6 @@ void AutomatonFromXMLParser::parseTransitions(std::list<sax::Token> &input, T& a
 	popToken(input, sax::Token::TokenType::END_ELEMENT, "transitions");
 }
 
-UnknownAutomaton AutomatonFromXMLParser::parseUnknownAutomaton(std::list<sax::Token> &input) const {
-	UnknownAutomaton automaton;
-
-	popToken(input, sax::Token::TokenType::START_ELEMENT, "automaton");
-
-	while (isTokenType(input, sax::Token::TokenType::START_ELEMENT)) {
-		if (isToken(input, sax::Token::TokenType::START_ELEMENT, "states")) {
-			automaton.setStates(parseStates(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "inputAlphabet")) {
-			automaton.setInputSymbols(parseInputAlphabet(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "initialStates")) {
-			automaton.setInitialStates(parseInitialStates(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "finalStates")) {
-			automaton.setFinalStates(parseFinalStates(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "stackAlphabet")) {
-			automaton.setStackSymbols(parseStackAlphabet(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "initialStackSymbols")) {
-			automaton.setInitialSymbols(parseInitialStackSymbols(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "tapeAlphabet")) {
-			automaton.setTapeSymbols(parseTapeAlphabet(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "blankSymbol")) {
-			automaton.setBlankSymbol(parseBlankSymbol(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "transitions")) {
-			parseTransitions(input, automaton);
-		} else {
-			throw sax::ParserException(sax::Token("automaton", sax::Token::TokenType::END_ELEMENT), input.front());
-		}
-	}
-
-	popToken(input, sax::Token::TokenType::END_ELEMENT, "automaton");
-	return automaton;
-}
-
 DFA AutomatonFromXMLParser::parseDFA(std::list<sax::Token>& input) const {
 	popToken(input, sax::Token::TokenType::START_ELEMENT, "DFA");
 
@@ -856,34 +820,6 @@ void AutomatonFromXMLParser::parseTransition(std::list<sax::Token>& input, OneTa
 	automaton.addTransition(from, inputSymbol, to, outputSymbol, shift);
 }
 
-void AutomatonFromXMLParser::parseTransition(std::list<sax::Token>& input, UnknownAutomaton& automaton) const {
-	popToken(input, sax::Token::TokenType::START_ELEMENT, "transition");
-	UnknownTransition transition;
-
-	while (isTokenType(input, sax::Token::TokenType::START_ELEMENT)) {
-		if (isToken(input, sax::Token::TokenType::START_ELEMENT, "from")) {
-			transition.setFrom(parseTransitionFrom(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "input")) {
-			transition.setInput(parseTransitionInputEpsilonSymbol(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "to")) {
-			transition.setTo(parseTransitionTo(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "pop")) {
-			transition.setPop(parseTransitionPop(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "push")) {
-			transition.setPush(parseTransitionPush(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "output")) {
-			transition.setOutput(parseTransitionOutputEpsilonSymbol(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "shift")) {
-			transition.setShift(parseTransitionShift(input));
-		} else {
-			throw sax::ParserException(sax::Token("transitions", sax::Token::TokenType::END_ELEMENT), input.front());
-		}
-	}
-	popToken(input, sax::Token::TokenType::END_ELEMENT, "transition");
-
-	automaton.addTransition(transition);
-}
-
 State AutomatonFromXMLParser::parseTransitionTo(std::list<sax::Token> &input) const {
 	popToken(input, sax::Token::TokenType::START_ELEMENT, "to");
 	State state(alib::api<label::Label>::parse(input));
diff --git a/alib2data/src/automaton/AutomatonFromXMLParser.h b/alib2data/src/automaton/AutomatonFromXMLParser.h
index fc74412c3c..2a9155105b 100644
--- a/alib2data/src/automaton/AutomatonFromXMLParser.h
+++ b/alib2data/src/automaton/AutomatonFromXMLParser.h
@@ -11,7 +11,6 @@
 #include "../sax/FromXMLParserHelper.h"
 #include "Automaton.h"
 #include "AutomatonFeatures.h"
-#include "UnknownAutomaton.h"
 #include "FSM/EpsilonNFA.h"
 #include "FSM/NFA.h"
 #include "FSM/DFA.h"
@@ -74,7 +73,6 @@ class AutomatonFromXMLParser : public sax::FromXMLParserHelper {
 	template<class T>
 	void parseTransitions(std::list<sax::Token> &input, T& automaton) const;
 
-	void parseTransition(std::list<sax::Token>& input, UnknownAutomaton& automaton) const;
 	void parseTransition(std::list<sax::Token>& input, EpsilonNFA& automaton) const;
 	void parseTransition(std::list<sax::Token>& input, NFA& automaton) const;
 	void parseTransition(std::list<sax::Token>& input, DFA& automaton) const;
@@ -107,7 +105,6 @@ class AutomatonFromXMLParser : public sax::FromXMLParserHelper {
 	Automaton parseAutomaton(std::list<sax::Token>& input) const;
 	Automaton parseAutomaton(std::list<sax::Token>& input, const std::set<FEATURES>& features) const;
 
-	UnknownAutomaton parseUnknownAutomaton(std::list<sax::Token>& input) const;
 	EpsilonNFA parseEpsilonNFA(std::list<sax::Token>& input) const;
 	NFA parseNFA(std::list<sax::Token>& input) const;
 	DFA parseDFA(std::list<sax::Token>& input) const;
diff --git a/alib2data/src/automaton/AutomatonToXMLComposer.cpp b/alib2data/src/automaton/AutomatonToXMLComposer.cpp
index fd926bb052..245151a54a 100644
--- a/alib2data/src/automaton/AutomatonToXMLComposer.cpp
+++ b/alib2data/src/automaton/AutomatonToXMLComposer.cpp
@@ -132,39 +132,6 @@ void AutomatonToXMLComposer::composeInputToPushdownStoreOperation(std::list<sax:
 	out.push_back(sax::Token("inputToPushdownStoreOperations", sax::Token::TokenType::END_ELEMENT));
 }
 
-void AutomatonToXMLComposer::composeTransitions(std::list<sax::Token>& out, const UnknownAutomaton& automaton) const {
-	out.push_back(sax::Token("transitions", sax::Token::TokenType::START_ELEMENT));
-	for (const auto& transition : automaton.getTransitions()) {
-		out.push_back(sax::Token("transition", sax::Token::TokenType::START_ELEMENT));
-
-		if (transition.hasFrom())
-			composeTransitionFrom(out, transition.getFrom());
-
-		if(transition.hasInput())
-			composeTransitionInputEpsilonSymbol(out, transition.getInput());
-
-		if(transition.hasTo())
-			composeTransitionTo(out, transition.getTo());
-
-		if (transition.getPop().size() > 0)
-			composeTransitionPop(out, transition.getPop());
-
-		if (transition.getPush().size() > 0)
-			composeTransitionPush(out, transition.getPush());
-
-		if (transition.hasOutput())
-			composeTransitionOutputEpsilonSymbol(out, transition.getOutput());
-
-		if (transition.getShift() != Shift::NOT_SET)
-			composeTransitionShift(out, transition.getShift());
-
-		out.push_back(sax::Token("transition", sax::Token::TokenType::END_ELEMENT));
-	}
-
-	out.push_back(sax::Token("transitions", sax::Token::TokenType::END_ELEMENT));
-}
-
-
 void AutomatonToXMLComposer::composeTransitions(std::list<sax::Token>& out, const DFA& automaton) const {
 	out.push_back(sax::Token("transitions", sax::Token::TokenType::START_ELEMENT));
 	for(const auto& transition : automaton.getTransitions()) {
@@ -606,41 +573,6 @@ std::list<sax::Token> AutomatonToXMLComposer::compose(const AutomatonBase& autom
 	return out;
 }
 
-std::list<sax::Token> AutomatonToXMLComposer::compose(const UnknownAutomaton& automaton) const {
-	std::list<sax::Token> out;
-	out.push_back(sax::Token("automaton", sax::Token::TokenType::START_ELEMENT));
-	
-	if (automaton.getStates().size() > 0)
-		composeStates(out, automaton.getStates());
-
-	if (automaton.getInputSymbols().size() > 0)
-		composeInputAlphabet(out, automaton.getInputSymbols());
-
-	if (automaton.getTapeSymbols().size() > 0)
-		composeTapeAlphabet(out, automaton.getTapeSymbols());
-
-	if (automaton.getStackSymbols().size() > 0)
-		composeStackAlphabet(out, automaton.getStackSymbols());
-
-	if (automaton.hasBlankSymbol())
-		composeBlankSymbol(out, automaton.getBlankSymbol());
-
-	if (automaton.getInitialSymbols().size() > 0)
-		composeInitialStackSymbols(out, automaton.getInitialSymbols());
-
-	if (automaton.getInitialStates().size() > 0)
-		composeInitialStates(out, automaton.getInitialStates());
-
-	if (automaton.getFinalStates().size() > 0)
-		composeFinalStates(out, automaton.getFinalStates());
-
-	if (automaton.getTransitions().size() > 0)
-		composeTransitions(out, automaton);
-
-	out.push_back(sax::Token("automaton", sax::Token::TokenType::END_ELEMENT));
-	return out;
-}
-
 std::list<sax::Token> AutomatonToXMLComposer::compose(const DFA& automaton) const {
 	std::list<sax::Token> out;
 	out.push_back(sax::Token("DFA", sax::Token::TokenType::START_ELEMENT));
diff --git a/alib2data/src/automaton/AutomatonToXMLComposer.h b/alib2data/src/automaton/AutomatonToXMLComposer.h
index 19157b00b0..46817ff75f 100644
--- a/alib2data/src/automaton/AutomatonToXMLComposer.h
+++ b/alib2data/src/automaton/AutomatonToXMLComposer.h
@@ -11,7 +11,6 @@
 #include <string>
 #include <list>
 #include "Automaton.h"
-#include "UnknownAutomaton.h"
 #include "FSM/EpsilonNFA.h"
 #include "FSM/NFA.h"
 #include "FSM/DFA.h"
@@ -56,7 +55,6 @@ class AutomatonToXMLComposer {
 	void composeBottomOfTheStackSymbol(std::list<sax::Token>&, const alphabet::Symbol& symbol) const;
 	void composeInputToPushdownStoreOperation(std::list<sax::Token>&, const automaton::InputDrivenNPDA& automaton) const;
 
-	void composeTransitions(std::list<sax::Token>&, const UnknownAutomaton& automaton) const;
 	void composeTransitions(std::list<sax::Token>&, const EpsilonNFA& automaton) const;
 	void composeTransitions(std::list<sax::Token>&, const CompactNFA& automaton) const;
 	void composeTransitions(std::list<sax::Token>&, const ExtendedNFA& automaton) const;
@@ -88,7 +86,7 @@ class AutomatonToXMLComposer {
 	void composeTransitionInputRegexp(std::list<sax::Token>&, const regexp::RegExp& regexp) const;
 
 	/**
-	 * Prints XML representation of UnknownAutomaton to the output stream.
+	 * Prints XML representation of Automaton to the output stream.
 	 * @param automaton automaton to print
 	 * @return list of xml tokens representing the automaton
 	 */
@@ -96,7 +94,6 @@ class AutomatonToXMLComposer {
 
 	std::list<sax::Token> compose(const Automaton& automaton) const;
 	
-	std::list<sax::Token> compose(const UnknownAutomaton& automaton) const;
 	std::list<sax::Token> compose(const DFA& automaton) const;
 	std::list<sax::Token> compose(const NFA& automaton) const;
 	std::list<sax::Token> compose(const EpsilonNFA& automaton) const;
diff --git a/alib2data/src/automaton/FSM/FiniteAutomatonToStringComposer.cpp b/alib2data/src/automaton/FSM/FiniteAutomatonToStringComposer.cpp
index 131453e23c..87c7334f44 100644
--- a/alib2data/src/automaton/FSM/FiniteAutomatonToStringComposer.cpp
+++ b/alib2data/src/automaton/FSM/FiniteAutomatonToStringComposer.cpp
@@ -162,10 +162,6 @@ std::string FiniteAutomatonToStringComposer::compose(const Automaton& automaton)
 	return out.str();
 }
 
-void FiniteAutomatonToStringComposer::Visit(void*, const UnknownAutomaton&) const {
-	throw exception::AlibException();
-}
-
 void FiniteAutomatonToStringComposer::Visit(void* data, const EpsilonNFA& automaton) const {
 	*((std::stringstream*) data) << this->compose(automaton);
 }
diff --git a/alib2data/src/automaton/FSM/FiniteAutomatonToStringComposer.h b/alib2data/src/automaton/FSM/FiniteAutomatonToStringComposer.h
index 7fa8f73e32..d4460d7a93 100644
--- a/alib2data/src/automaton/FSM/FiniteAutomatonToStringComposer.h
+++ b/alib2data/src/automaton/FSM/FiniteAutomatonToStringComposer.h
@@ -10,7 +10,6 @@
 namespace automaton {
 
 class FiniteAutomatonToStringComposer : public VisitableAutomatonBase::const_visitor_type {
-	void Visit(void*, const UnknownAutomaton& automaton) const;
 	void Visit(void*, const EpsilonNFA& automaton) const;
 	void Visit(void*, const NFA& automaton) const;
 	void Visit(void*, const DFA& automaton) const;
diff --git a/alib2data/src/automaton/UnknownAutomaton.cpp b/alib2data/src/automaton/UnknownAutomaton.cpp
deleted file mode 100644
index b106fe4636..0000000000
--- a/alib2data/src/automaton/UnknownAutomaton.cpp
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * UnknownAutomaton.cpp
- *
- *  Created on: Oct 12, 2013
- *      Author: Martin Zak
- */
-
-#include "UnknownAutomaton.h"
-#include "../std/set.hpp"
-#include <sstream>
-#include "../std/pointer.hpp"
-
-#include "AutomatonException.h"
-
-namespace automaton {
-
-UnknownAutomaton::UnknownAutomaton() :
-		blankSymbol(NULL) {
-
-}
-
-UnknownAutomaton::UnknownAutomaton(const UnknownAutomaton& other) :
-		states(other.states), initialStates(other.initialStates), finalStates(other.finalStates), inputAlphabet(other.inputAlphabet), stackAlphabet(other.stackAlphabet), initialSymbols(other.initialSymbols), tapeAlphabet(other.tapeAlphabet), blankSymbol(NULL), transitions(other.transitions) {
-	if(other.blankSymbol)
-		blankSymbol = new alphabet::Symbol(*other.blankSymbol);
-}
-
-UnknownAutomaton::UnknownAutomaton(UnknownAutomaton&& other) noexcept :
-		states(std::move(other.states)), initialStates(std::move(other.initialStates)), finalStates(std::move(other.finalStates)), inputAlphabet(std::move(other.inputAlphabet)), stackAlphabet(std::move(other.stackAlphabet)), initialSymbols(std::move(other.initialSymbols)), tapeAlphabet(std::move(other.tapeAlphabet)), blankSymbol(NULL), transitions(std::move(other.transitions)) {
-	if(other.blankSymbol)
-		blankSymbol = new alphabet::Symbol(std::move(*other.blankSymbol));
-
-}
-
-const UnknownAutomaton& UnknownAutomaton::operator=(const UnknownAutomaton& other) {
-	UnknownAutomaton tmp(other);
-
-	std::swap(states, tmp.states);
-	std::swap(inputAlphabet, tmp.inputAlphabet);
-	std::swap(initialStates, tmp.initialStates);
-	std::swap(finalStates, tmp.finalStates);
-	std::swap(stackAlphabet, tmp.stackAlphabet);
-	std::swap(initialSymbols, tmp.initialSymbols);
-	std::swap(tapeAlphabet, tmp.tapeAlphabet);
-	std::swap(blankSymbol, tmp.blankSymbol);
-	std::swap(transitions, tmp.transitions);
-
-	return *this;
-}
-
-const UnknownAutomaton& UnknownAutomaton::operator=(UnknownAutomaton&& other) noexcept {
-	std::swap(states, other.states);
-	std::swap(inputAlphabet, other.inputAlphabet);
-	std::swap(initialStates, other.initialStates);
-	std::swap(finalStates, other.finalStates);
-	std::swap(stackAlphabet, other.stackAlphabet);
-	std::swap(initialSymbols, other.initialSymbols);
-	std::swap(tapeAlphabet, other.tapeAlphabet);
-	std::swap(blankSymbol, other.blankSymbol);
-	std::swap(transitions, other.transitions);
-
-	return *this;
-}
-
-UnknownAutomaton::~UnknownAutomaton() {
-	delete blankSymbol;
-}
-
-AutomatonBase* UnknownAutomaton::clone() const {
-	return new UnknownAutomaton(*this);
-}
-
-AutomatonBase* UnknownAutomaton::plunder() && {
-	return new UnknownAutomaton(std::move(*this));
-}
-
-bool UnknownAutomaton::addState(const State& state) {
-	return states.insert(state).second;
-}
-
-void UnknownAutomaton::setStates(const std::set<State>& states) {
-	this->states = states; 
-}
-
-bool UnknownAutomaton::removeState(const State& state) {
-	return states.erase(state);
-}
-
-const std::set<State>& UnknownAutomaton::getStates() const {
-	return states;
-}
-
-
-bool UnknownAutomaton::addInitialState(const State& state) {
-	return initialStates.insert(state).second;
-}
-
-void UnknownAutomaton::setInitialStates(const std::set<State>& states) {
-	initialStates = states;
-}
-
-bool UnknownAutomaton::removeInitialState(const State& state) {
-	return initialStates.erase(state);
-}
-
-const std::set<State>& UnknownAutomaton::getInitialStates() const {
-	return initialStates;
-}
-
-
-bool UnknownAutomaton::addFinalState(const State& state) {
-	return finalStates.insert(state).second;
-}
-
-void UnknownAutomaton::setFinalStates(const std::set<State>& states) {
-	finalStates = states;
-}
-
-bool UnknownAutomaton::removeFinalState(const State& state) {
-	return finalStates.erase(state);
-}
-
-const std::set<State>& UnknownAutomaton::getFinalStates() const {
-	return finalStates;
-}
-
-
-bool UnknownAutomaton::addInputSymbol(const alphabet::Symbol& symbol) {
-	return inputAlphabet.insert(symbol).second;
-}
-
-const std::set<alphabet::Symbol>& UnknownAutomaton::getInputSymbols() const {
-	return this->inputAlphabet;
-}
-
-void UnknownAutomaton::setInputSymbols(const std::set<alphabet::Symbol>& symbols) {
-	this->inputAlphabet = symbols;
-}
-
-bool UnknownAutomaton::removeInputSymbol(const alphabet::Symbol& symbol) {
-	return inputAlphabet.erase(symbol);
-}
-
-
-bool UnknownAutomaton::addStackSymbol(const alphabet::Symbol& symbol) {
-	return stackAlphabet.insert(symbol).second;
-}
-
-void UnknownAutomaton::setStackSymbols(const std::set<alphabet::Symbol>& symbols) {
-	stackAlphabet = symbols;
-}
-
-bool UnknownAutomaton::removeStackSymbol(const alphabet::Symbol& symbol) {
-	return stackAlphabet.erase(symbol);
-}
-
-const std::set<alphabet::Symbol>& UnknownAutomaton::getStackSymbols() const {
-	return stackAlphabet;
-}
-
-
-bool UnknownAutomaton::addInitialSymbol(const alphabet::Symbol& symbol) {
-	return stackAlphabet.insert(symbol).second;
-}
-
-void UnknownAutomaton::setInitialSymbols(const std::set<alphabet::Symbol>& symbols) {
-	this->initialSymbols = symbols;
-}
-
-bool UnknownAutomaton::removeInitialSymbol(const alphabet::Symbol& symbol) {
-	return stackAlphabet.erase(symbol);
-}
-
-const std::set<alphabet::Symbol>& UnknownAutomaton::getInitialSymbols() const {
-	return initialSymbols;
-}
-
-
-bool UnknownAutomaton::addTapeSymbol(const alphabet::Symbol& symbol) {
-	return tapeAlphabet.insert(symbol).second;
-}
-
-void UnknownAutomaton::setTapeSymbols(const std::set<alphabet::Symbol>& symbols) {
-	tapeAlphabet = symbols;
-}
-
-bool UnknownAutomaton::removeTapeSymbol(const alphabet::Symbol& symbol) {
-	return tapeAlphabet.erase(symbol);
-}
-
-const std::set<alphabet::Symbol>& UnknownAutomaton::getTapeSymbols() const {
-	return tapeAlphabet;
-}
-
-
-void UnknownAutomaton::setBlankSymbol(const alphabet::Symbol& symbol) {
-	delete blankSymbol;
-	blankSymbol = new alphabet::Symbol(symbol);
-}
-
-bool UnknownAutomaton::hasBlankSymbol() const {
-	return blankSymbol != NULL;
-}
-
-void UnknownAutomaton::clearBlankSymbol() {
-	delete blankSymbol;
-	blankSymbol = NULL;
-}
-
-const alphabet::Symbol& UnknownAutomaton::getBlankSymbol() const {
-	return *blankSymbol;
-}
-
-
-bool UnknownAutomaton::addTransition(const UnknownTransition& transition) {
-	return transitions.insert(transition).second;
-}
-
-bool UnknownAutomaton::removeTransition(const UnknownTransition& transition) {
-	return transitions.erase(transition);
-}
-
-const std::set<UnknownTransition>& UnknownAutomaton::getTransitions() const {
-	return transitions;
-}
-
-
-bool UnknownAutomaton::operator==(const ObjectBase& other) const {
-	return other == *this;
-}
-
-bool UnknownAutomaton::operator<(const ObjectBase& other) const {
-	return other > *this;
-}
-
-bool UnknownAutomaton::operator>(const ObjectBase& other) const {
-	return other < *this;
-}
-
-bool UnknownAutomaton::operator==(const UnknownAutomaton& other) const {
-	std::pointer<alphabet::Symbol> blankSymbolPointer(blankSymbol);
-	std::pointer<alphabet::Symbol> otherBlankSymbolPointer(other.blankSymbol);
-
-	return states == other.states
-		&& inputAlphabet == other.inputAlphabet
-		&& initialStates == other.initialStates
-		&& finalStates == other.finalStates
-		&& stackAlphabet == other.stackAlphabet
-		&& initialSymbols == other.initialSymbols
-		&& tapeAlphabet == other.tapeAlphabet
-		&& blankSymbolPointer == otherBlankSymbolPointer
-		&& transitions == other.transitions;
-}
-
-bool UnknownAutomaton::operator<(const UnknownAutomaton& other) const {
-	std::pointer<alphabet::Symbol> blankSymbolPointer(blankSymbol);
-	std::pointer<alphabet::Symbol> otherBlankSymbolPointer(other.blankSymbol);
-
-	return std::tie(states, inputAlphabet, initialStates, finalStates, stackAlphabet, initialSymbols, tapeAlphabet, blankSymbolPointer, transitions) < std::tie(other.states, other.inputAlphabet, other.initialStates, other.finalStates, other.stackAlphabet, other.initialSymbols, other.tapeAlphabet, otherBlankSymbolPointer, other.transitions);
-}
-
-void UnknownAutomaton::operator>>(std::ostream& out) const {
-	std::pointer<alphabet::Symbol> blankSymbolPointer(blankSymbol);
-
-	out << "(UnknownAutomaton"
-		<< " states = " << states
-		<< " inputAlphabet = " << inputAlphabet
-		<< " initialStates = " << initialStates
-		<< " finalStates = " << finalStates
-		<< " stackAlphabet = " << stackAlphabet
-		<< " initialSymbols = " << initialSymbols
-		<< " tapeAlphabet = " << tapeAlphabet
-		<< " blankSymbol = " << blankSymbolPointer
-		<< " transitions = " << transitions
-		<< ")";
-}
-
-UnknownAutomaton::operator std::string () const {
-	std::stringstream ss;
-	ss << *this;
-	return ss.str();
-}
-
-} /* namespace automaton */
-
diff --git a/alib2data/src/automaton/UnknownAutomaton.h b/alib2data/src/automaton/UnknownAutomaton.h
deleted file mode 100644
index e739898d4b..0000000000
--- a/alib2data/src/automaton/UnknownAutomaton.h
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * UnknownAutomaton.h
- *
- *  Created on: Oct 12, 2013
- *      Author: Martin Zak
- */
-
-#ifndef UNKNOWN_AUTOMATON_H_
-#define UNKNOWN_AUTOMATON_H_
-
-#include <set>
-#include <list>
-
-#include "AutomatonBase.h"
-#include "common/State.h"
-#include "../alphabet/Symbol.h"
-#include "UnknownTransition.h"
-
-namespace automaton {
-
-/**
- * Class representing unknown automaton parsed from XML.
- */
-class UnknownAutomaton : public std::acceptor<UnknownAutomaton, VisitableAutomatonBase, std::acceptor<UnknownAutomaton, alib::VisitableObjectBase, AutomatonBase> > {
-protected:
-	std::set<State> states;
-	std::set<State> initialStates;
-	std::set<State> finalStates;
-	std::set<alphabet::Symbol> inputAlphabet;
-	std::set<alphabet::Symbol> stackAlphabet;
-	std::set<alphabet::Symbol> initialSymbols;
-	std::set<alphabet::Symbol> tapeAlphabet;
-	alphabet::Symbol* blankSymbol;
-
-	std::set<UnknownTransition> transitions;
-public:
-	explicit UnknownAutomaton();
-
-	UnknownAutomaton(const UnknownAutomaton& other);
-	UnknownAutomaton(UnknownAutomaton&& other) noexcept;
-	const UnknownAutomaton& operator=(const UnknownAutomaton& other);
-	const UnknownAutomaton& operator=(UnknownAutomaton&& other) noexcept;
-
-	~UnknownAutomaton() noexcept;
-
-	virtual AutomatonBase* clone() const;
-	
-	virtual AutomatonBase* plunder() &&;
-
-	/**
-	 * Adds new state to the automaton.
-	 * @param state State to add
-	 * @throws AutomatonException when state already exist in the automaton
-	 */
-	bool addState(const State& state);
-
-	/**
-	 * Set new states of the automaton.
-	 * @param states New states of the automaton
-	 */
-	void setStates(const std::set<State>& states);
-
-	/**
-	 * Removes the state from the automaton.
-	 * @param state State to remove
-	 * @throws AutomatonException when state is not present in the automaton
-	 */
-	bool removeState(const State& state);
-
-	/**
-	 * @return list of states
-	 */
-	const std::set<State>& getStates() const;
-
-
-	/**
-	 * Adds the State to the initial states.
-	 * @param state State to add
-	 * @throws AutomatonException when state is not present
-	 * in the automaton or when it's already initial state
-	 */
-	bool addInitialState(const State& state);
-
-	/**
-	 * Sets the initial states of the automaton.
-	 * @param state State to set
-	 * @throws AutomatonException when state is not present
-	 * in the automaton or when it's already initial state
-	 */
-	void setInitialStates(const std::set<State>& states);
-
-	/**
-	 * Removes the state from the initial states.
-	 * @param state State to remove
-	 * @throws AutomatonException when State is not initial state
-	 */
-	bool removeInitialState(const State& state);
-
-	/**
-	 * @return initial states
-	 */
-	const std::set<State>& getInitialStates() const;
-
-
-	/**
-	 * Adds the State to the final states.
-	 * @param state State to add
-	 * @throws AutomatonException when state is not present
-	 * in the automaton or when it's already final state
-	 */
-	bool addFinalState(const State& state);
-
-	/**
-	 * Sets the final state of the automaton.
-	 * @param state State to set
-	 * @throws AutomatonException when state is not present
-	 * in the automaton or when it's already final state
-	 */
-	void setFinalStates(const std::set<State>& states);
-
-	/**
-	 * Removes the state from the final states.
-	 * @param state State to remove
-	 * @throws AutomatonException when State is not final state
-	 */
-	bool removeFinalState(const State& state);
-
-	/**
-	 * @return final states
-	 */
-	const std::set<State>& getFinalStates() const;
-
-
-	/**
-	 * Adds the input symbol to the automaton.
-	 * @param symbol Symbol to add
-	 * @throws AutomatonException when symbol is already present in the automaton
-	 */
-	bool addInputSymbol(const alphabet::Symbol& symbol);
-
-	/**
-	 * @return the input alphabet
-	 */
-	const std::set<alphabet::Symbol>& getInputSymbols() const;
-
-	/**
-	 * Sets the input symbols of the automaton.
-	 * @param symbols Symbol to be new input symbol of the automaton
-	 */
-	void setInputSymbols(const std::set<alphabet::Symbol>& symbols);
-
-	/**
-	 * Removes input symbol from the input alphabet.
-	 * @param symbol Symbol to remove
-	 * @throws AutomatonException when symbol is not present in input alphabet
-	 */
-	bool removeInputSymbol(const alphabet::Symbol& symbol);
-
-
-	/**
-	 * Adds symbol to the stack alphabet.
-	 * @param symbol Symbol to add
-	 * @throw AutomatonException when Symbol is already present in stack alphabet
-	 */
-	bool addStackSymbol(const alphabet::Symbol& symbol);
-
-	/**
-	 * Sets symbols of the stack alphabet.
-	 * @param symbol Symbol to add
-	 */
-	void setStackSymbols(const std::set<alphabet::Symbol>& symbols);
-
-	/**
-	 * Removes symbol from the stack alphabet.
-	 * @param symbol Symbol to remove
-	 * @throw AutomatonException when Symbol is not present in input alphabet
-	 */
-	bool removeStackSymbol(const alphabet::Symbol& symbol);
-
-	/**
-	 * @return the stack alphabet
-	 */
-	const std::set<alphabet::Symbol>& getStackSymbols() const;
-
-
-	/**
-	 * Adds symbol to the set of initial stack symbols.
-	 * @param symbol Symbol to add
-	 * @throw AutomatonException when Symbol is already present in the set of initial symbols
-	 */
-	bool addInitialSymbol(const alphabet::Symbol& symbol);
-
-	/**
-	 * Set the initial symbol list.
-	 * @param symbols symbols to set
-	 */
-	void setInitialSymbols(const std::set<alphabet::Symbol>& symbols);
-
-	/**
-	 * Removes symbol from the set of initial stack symbols.
-	 * @param symbol Symbol to remove
-	 * @throw AutomatonException when Symbol is not present in the set of initial symbols
-	 */
-	bool removeInitialSymbol(const alphabet::Symbol& symbol);
-
-	/**
-	 * @return list of initial symbols
-	 */
-	const std::set<alphabet::Symbol>& getInitialSymbols() const;
-
-
-	/**
-	 * Adds symbol to the tape alphabet.
-	 * @param symbol Symbol to add
-	 * @throw AutomatonException when Symbol is already present in tape alphabet
-	 */
-	bool addTapeSymbol(const alphabet::Symbol& symbol);
-
-	/**
-	 * Sets the tape alphabet.
-	 * @param symbols Symbols to become new tape alphabet
-	 */
-	void setTapeSymbols(const std::set<alphabet::Symbol>& symbols);
-
-	/**
-	 * Removes symbol from the tape alphabet.
-	 * @param symbol Symbol to remove
-	 * @throw AutomatonException when Symbol is not present in tape alphabet
-	 */
-	bool removeTapeSymbol(const alphabet::Symbol& symbol);
-
-	/**
-	 * @return the tape alphabet
-	 */
-	const std::set<alphabet::Symbol>& getTapeSymbols() const;
-
-
-	/**
-	 * Sets the blank symbol.
-	 * @param symbol the Symbol to set
-	 */
-	void setBlankSymbol(const alphabet::Symbol& symbol);
-
-	/**
-	 * Tests if the automaton has blank symbol set
-	 * @return true if blank symbol is set
-	 */
-	bool hasBlankSymbol() const;
-
-	/**
-	 * Clears setting of blank symbol
-	 */
-	void clearBlankSymbol();
-	
-	/**
-	 * @return the blank symbol
-	 */
-	const alphabet::Symbol& getBlankSymbol() const;
-
-
-	/**
-	 * Adds new transition to the automaton.
-	 * @param transition UnknownTransition to add
-	 * @throws AutomatonException when transition is already present in the automaton
-	 */
-	bool addTransition(const UnknownTransition& transition);
-
-	/**
-	 * Removes the transition from the automaton.
-	 * @param transition UnknownTransition to remove
-	 * @throws AutomatonException when transition is not present in the automaton
-	 */
-	bool removeTransition(const UnknownTransition& transition);
-
-	/**
-	 * @return transitions of the automaton
-	 */
-	const std::set<UnknownTransition>& getTransitions() const;
-
-	virtual bool operator>(const alib::ObjectBase& other) const;
-	virtual bool operator==(const alib::ObjectBase& other) const;
-	virtual bool operator<(const alib::ObjectBase& other) const;
-
-	/**
-	 * Compares two instances of UnknownAutomata
-	 * @return true if this and other instance are same
-	 */
-	virtual bool operator<(const UnknownAutomaton& other) const;
-	virtual bool operator==(const UnknownAutomaton& other) const;
-
-	virtual void operator>>(std::ostream& os) const;
-
-	virtual operator std::string() const;
-
-	virtual int selfTypeId() const {
-		return typeId(*this);
-	}
-};
-
-} /* namespace automaton */
-
-#endif /* UNKNOWN_AUTOMATON_H_ */
-
diff --git a/alib2data/src/automaton/UnknownTransition.cpp b/alib2data/src/automaton/UnknownTransition.cpp
deleted file mode 100644
index 3ff83818eb..0000000000
--- a/alib2data/src/automaton/UnknownTransition.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * UnknownTransition.cpp
- *
- *  Created on: Oct 13, 2013
- *      Author: Martin Zak
- */
-
-#include "UnknownTransition.h"
-#include "../std/vector.hpp"
-#include "../std/pointer.hpp"
-
-namespace automaton {
-
-UnknownTransition::UnknownTransition() : from(NULL), to(NULL), input(NULL), output(NULL), shift(NOT_SET) {
-
-}
-
-UnknownTransition::UnknownTransition(const State& from, const State& to, const std::vector<alphabet::Symbol>& pop, const std::vector<alphabet::Symbol>& push, const std::variant<string::Epsilon, alphabet::Symbol>& input, const std::variant<string::Epsilon, alphabet::Symbol>& output, Shift shift) :
-		from(new State(from)), to(new State(to)), pop(pop), push(push), input(new std::variant<string::Epsilon, alphabet::Symbol>(input)), output(new std::variant<string::Epsilon, alphabet::Symbol>(output)), shift(shift) {
-
-}
-
-UnknownTransition::UnknownTransition(const UnknownTransition& other) :
-		from(NULL), to(NULL), pop(other.pop), push(other.push), input(NULL), output(NULL), shift(other.shift) {
-	if(other.from)
-		from = new State(*other.from);
-	if(other.to)
-		to = new State(*other.to);
-	if(other.input)
-		input = new std::variant<string::Epsilon, alphabet::Symbol>(*other.input);
-	if(other.output)
-		output = new std::variant<string::Epsilon, alphabet::Symbol>(*other.output);
-}
-
-UnknownTransition::UnknownTransition(UnknownTransition&& other) noexcept :
-		from(NULL), to(NULL), pop(std::move(other.pop)), push(std::move(other.push)), input(NULL), output(NULL), shift(std::move(other.shift)) {
-	if(other.from)
-		from = new State(std::move(*other.from));
-	if(other.to)
-		to = new State(std::move(*other.to));
-	if(other.input)
-		input = new std::variant<string::Epsilon, alphabet::Symbol>(std::move(*other.input));
-	if(other.output)
-		output = new std::variant<string::Epsilon, alphabet::Symbol>(std::move(*other.output));
-}
-
-const UnknownTransition& UnknownTransition::operator=(const UnknownTransition& other) {
-	UnknownTransition tmp(other);
-
-	std::swap(from, tmp.from);
-	std::swap(to, tmp.to);
-	std::swap(pop, tmp.pop);
-	std::swap(push, tmp.push);
-	std::swap(input, tmp.input);
-	std::swap(output, tmp.output);
-	std::swap(shift, tmp.shift);
-
-	return *this;
-}
-
-const UnknownTransition& UnknownTransition::operator=(UnknownTransition&& other) noexcept {
-	std::swap(from, other.from);
-	std::swap(to, other.to);
-	std::swap(pop, other.pop);
-	std::swap(push, other.push);
-	std::swap(input, other.input);
-	std::swap(output, other.output);
-	std::swap(shift, other.shift);
-
-	return *this;
-}
-
-UnknownTransition::~UnknownTransition() noexcept {
-	delete from;
-	delete to;
-}
-
-void UnknownTransition::setFrom(const State& state) {
-	delete from;
-	from = new State(state);
-}
-
-bool UnknownTransition::hasFrom() const {
-	return from != NULL;
-}
-
-void UnknownTransition::clearFrom() {
-	delete from;
-	from = NULL;
-}
-
-const State& UnknownTransition::getFrom() const {
-	return *from;
-}
-
-void UnknownTransition::setTo(const State& state) {
-	delete to;
-	to = new State(state);
-}
-
-bool UnknownTransition::hasTo() const {
-	return to != NULL;
-}
-
-void UnknownTransition::clearTo() {
-	delete to;
-	to = NULL;
-}
-
-const State& UnknownTransition::getTo() const {
-	return *to;
-}
-
-void UnknownTransition::setPop(const std::vector<alphabet::Symbol>& pop) {
-	this->pop = pop;
-}
-
-const std::vector<alphabet::Symbol>& UnknownTransition::getPop() const {
-	return pop;
-}
-
-void UnknownTransition::addPop(const alphabet::Symbol& symbol) {
-	pop.push_back(symbol);
-}
-
-void UnknownTransition::setPush(const std::vector<alphabet::Symbol>& push) {
-	this->push = push;
-}
-
-const std::vector<alphabet::Symbol>& UnknownTransition::getPush() const {
-	return push;
-}
-
-void UnknownTransition::addPush(const alphabet::Symbol& symbol) {
-	push.push_back(symbol);
-}
-
-void UnknownTransition::setOutput(const std::variant<string::Epsilon, alphabet::Symbol>& symbol) {
-	delete output;
-	output = new std::variant<string::Epsilon, alphabet::Symbol>(symbol);
-}
-
-bool UnknownTransition::hasOutput() const {
-	return output != NULL;
-}
-
-void UnknownTransition::clearOutput() {
-	delete output;
-	output = NULL;
-}
-
-const std::variant<string::Epsilon, alphabet::Symbol>& UnknownTransition::getOutput() const {
-	return *output;
-}
-
-void UnknownTransition::setInput(const std::variant<string::Epsilon, alphabet::Symbol>& symbol) {
-	delete input;
-	input = new std::variant<string::Epsilon, alphabet::Symbol>(symbol);
-}
-
-bool UnknownTransition::hasInput() const {
-	return input != NULL;
-}
-
-void UnknownTransition::clearInput() {
-	delete input;
-	input = NULL;
-}
-
-const std::variant<string::Epsilon, alphabet::Symbol>& UnknownTransition::getInput() const {
-	return *input;
-}
-
-const Shift& UnknownTransition::getShift() const {
-	return shift;
-}
-
-void UnknownTransition::setShift(const Shift& shift) {
-	this->shift = shift;
-}
-
-bool UnknownTransition::operator <(const UnknownTransition& other) const {
-	std::pointer<automaton::State> fromPointer(from);
-	std::pointer<automaton::State> otherFromPointer(other.from);
-
-	std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> inputPointer(input);
-	std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> otherInputPointer(other.input);
-
-	std::pointer<automaton::State> toPointer(to);
-	std::pointer<automaton::State> otherToPointer(other.to);
-
-	std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> outputPointer(output);
-	std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> otherOutputPointer(other.output);
-
-	return std::tie(fromPointer, inputPointer, pop, shift, toPointer, outputPointer, push) < std::tie(otherFromPointer, otherInputPointer, pop, shift, otherToPointer, otherOutputPointer, push);
-}
-
-bool UnknownTransition::operator ==(const UnknownTransition& other) const {
-	std::pointer<automaton::State> fromPointer(from);
-	std::pointer<automaton::State> otherFromPointer(other.from);
-
-	std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> inputPointer(input);
-	std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> otherInputPointer(other.input);
-
-	std::pointer<automaton::State> toPointer(to);
-	std::pointer<automaton::State> otherToPointer(other.to);
-
-	std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> outputPointer(output);
-	std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> otherOutputPointer(other.output);
-
-	return fromPointer == otherFromPointer && inputPointer == otherInputPointer && pop == other.pop && shift == other.shift && toPointer == otherToPointer && outputPointer == otherOutputPointer && push == other.push;
-}
-
-bool UnknownTransition::operator !=(const UnknownTransition& other) const {
-	return !(*this == other);
-}
-
-std::ostream& operator<<(std::ostream& out, const UnknownTransition& transition) {
-	std::pointer<automaton::State> fromPointer(transition.from);
-	std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> inputPointer(transition.input);
-	std::pointer<automaton::State> toPointer(transition.to);
-	std::pointer<std::variant<string::Epsilon, alphabet::Symbol>> outputPointer(transition.output);
-
-	out << "(UnknownTransition"
-		<< " from = " << fromPointer
-		<< " input = " << inputPointer
-		<< " to = " << toPointer
-		<< " output = " << outputPointer
-		<< " pop = " << transition.pop
-		<< " push = " << transition.push
-		<< " shift = " << SHIFT_NAMES[transition.shift]
-		<< ")";
-
-	return out;
-}
-
-} /* namespace automaton */
diff --git a/alib2data/src/automaton/UnknownTransition.h b/alib2data/src/automaton/UnknownTransition.h
deleted file mode 100644
index 9a2e0547b8..0000000000
--- a/alib2data/src/automaton/UnknownTransition.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * UnknownTransition.h
- *
- *  Created on: Oct 13, 2013
- *      Author: Martin Zak
- */
-
-#ifndef UNKNOWN_TRANSITION_H_
-#define UNKNOWN_TRANSITION_H_
-
-#include <vector>
-
-#include "common/State.h"
-#include "../alphabet/Symbol.h"
-#include "common/Shift.h"
-#include "../std/variant.hpp"
-#include "../string/Epsilon.h"
-
-namespace automaton {
-
-/**
- * Class representing unknown transition parsed from XML. Part of UnknownAutomaton.
- */
-class UnknownTransition {
-protected:
-	State* from;
-	State* to;
-	
-	std::vector<alphabet::Symbol> pop;
-	std::vector<alphabet::Symbol> push;
-
-	std::variant<string::Epsilon, alphabet::Symbol>* input;
-	std::variant<string::Epsilon, alphabet::Symbol>* output;
-
-	Shift shift;
-
-public:
-	explicit UnknownTransition();
-
-	explicit UnknownTransition(const State& from, const State& to, const std::vector<alphabet::Symbol>& pop, const std::vector<alphabet::Symbol>& push, const std::variant<string::Epsilon, alphabet::Symbol>& input, const std::variant<string::Epsilon, alphabet::Symbol>& output, Shift shift);
-
-	UnknownTransition(const UnknownTransition& other);
-	UnknownTransition(UnknownTransition&& other) noexcept;
-	const UnknownTransition& operator=(const UnknownTransition& other);
-	const UnknownTransition& operator=(UnknownTransition&& other) noexcept;
-
-	~UnknownTransition() noexcept;
-
-	/**
-	 * @param state State from which the transition goes
-	 */
-	void setFrom(const State& state);
-
-	/**
-	 * @return true if the from is set
-	 */
-	bool hasFrom() const;
-
-	/**
-	 * Clears the setting of from state
-	 */
-	void clearFrom();
-
-	/**
-	 * @return State form which the transition goes
-	 */
-	const State& getFrom() const;
-
-	/**
-	 * @param state State to which the transition goes
-	 */
-	void setTo(const State& state);
-
-	/**
-	 * @return true if the to is set
-	 */
-	bool hasTo() const;
-
-	/**
-	 * Clears the setting of to state
-	 */
-	void clearTo();
-
-	/**
-	 * @return State to which the transition goes
-	 */
-	const State& getTo() const;
-	
-	/**
-	 * @param pop vector of symbols that are popped from the stack
-	 */
-	void setPop(const std::vector<alphabet::Symbol>& pop);
-
-	/**
-	 * @return vector of symbols that are popped from the stack
-	 */
-	const std::vector<alphabet::Symbol>& getPop() const;
-
-	/**
-	 * Add symbol to the end of the vector of symbols that are popped from the stack.
-	 * @param symbol Symbol to add
-	 */
-	void addPop(const alphabet::Symbol& symbol);
-	
-	/**
-	 * @param push vector of symbols that are pushed to the stack
-	 */
-	void setPush(const std::vector<alphabet::Symbol>& push);
-
-	/**
-	 * @return vector of symbols that are pushed to the stack
-	 */
-	const std::vector<alphabet::Symbol>& getPush() const;
-
-	/**
-	 * Add symbol to the end of the vector of symbols that are pushed to the stack.
-	 * @param symbol Symbol to add
-	 */
-	void addPush(const alphabet::Symbol& symbol);
-
-	/**
-	 * @return the output symbol of the transition
-	 */
-	const std::variant<string::Epsilon, alphabet::Symbol>& getInput() const;
-
-	/**
-	 * Sets the output Symbol of the transition.
-	 * @param symbol Symbol to set
-	 */
-	void setInput(const std::variant<string::Epsilon, alphabet::Symbol>& symbol);
-
-	/**
-	 * @return true if the input symbol is set
-	 */
-	bool hasInput() const;
-
-	/**
-	 * Clears the setting of input symbol
-	 */
-	void clearInput();
-
-	/**
-	 * @return the output symbol of the transition
-	 */
-	const std::variant<string::Epsilon, alphabet::Symbol>& getOutput() const;
-
-	/**
-	 * Sets the output Symbol of the transition.
-	 * @param symbol Symbol to set
-	 */
-	void setOutput(const std::variant<string::Epsilon, alphabet::Symbol>& symbol);
-
-	/**
-	 * @return true if the output symbol is set
-	 */
-	bool hasOutput() const;
-
-	/**
-	 * Clears the setting of output symbol
-	 */
-	void clearOutput();
-
-	/**
-	 * @return direction of movement of the reading head
-	 */
-	const Shift& getShift() const;
-
-	/**
-	 * Sets the direction of movement of reading head.
-	 * @param shift the direction
-	 */
-	void setShift(const Shift& shift);
-
-	bool operator <(const UnknownTransition& other) const;
-	bool operator ==(const UnknownTransition& other) const;
-	bool operator !=(const UnknownTransition& other) const;
-
-	friend std::ostream& operator<<(std::ostream&, const UnknownTransition&);
-};
-
-} /* namespace automaton */
-
-#endif /* UNKNOWN_TRANSITION_H_ */
diff --git a/alib2data/src/factory/AutomatonConvertor.cpp b/alib2data/src/factory/AutomatonConvertor.cpp
deleted file mode 100644
index 2d1938cd87..0000000000
--- a/alib2data/src/factory/AutomatonConvertor.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * AutomatonConvertor.cpp
- *
- *  Created on: Apr 23, 2013
- *      Author: Jan Travnicek
- */
-
-#include "AutomatonConvertor.h"
-
-#include <algorithm>
-#include <iostream>
-
-#include "../automaton/AutomatonException.h"
-
-namespace automaton {
-
-Automaton AutomatonConvertor::buildAutomaton(const UnknownAutomaton& automaton) {
-	if (isEpsilonNFA(automaton)) {
-		return Automaton(buildEpsilonNFA(automaton));
-	} else if (isNPDA(automaton)) {
-		return Automaton(buildNPDA(automaton));
-	} else if (isOneTapeDTM(automaton)) {
-		return Automaton(buildOneTapeDTM(automaton));
-	} else {
-		throw AutomatonException("Cannot determine automaton type.");
-	}
-}
-
-bool AutomatonConvertor::isEpsilonNFA(const UnknownAutomaton& automaton) {
-	if (automaton.getStackSymbols().size() > 0 || automaton.getInitialSymbols().size() > 0
-			|| automaton.getTapeSymbols().size() > 0 || automaton.hasBlankSymbol()) {
-		return false;
-	}
-
-	const std::set<UnknownTransition> transitions = automaton.getTransitions();
-	std::set<UnknownTransition>::const_iterator it = transitions.begin();
-	while (it != transitions.end()) {
-		if (!isEpsilonNFATransition(*it)) {
-			return false;
-		}
-		it++;
-	}
-
-	return true;
-}
-
-bool AutomatonConvertor::isEpsilonNFATransition(const UnknownTransition& transition) {
-	return !(transition.getPop().size() > 0 || transition.getPush().size() > 0 || transition.hasOutput()
-			|| transition.getShift() != NOT_SET);
-}
-
-EpsilonNFA AutomatonConvertor::buildEpsilonNFA(const UnknownAutomaton& automaton) {
-	EpsilonNFA fsm;
-
-	fsm.setStates(automaton.getStates());
-	fsm.setInputSymbols(automaton.getInputSymbols());
-	fsm.setInitialStates(automaton.getInitialStates());
-	fsm.setFinalStates(automaton.getFinalStates());
-
-	const std::set<UnknownTransition> transitions = automaton.getTransitions();
-	std::set<UnknownTransition>::const_iterator transition = transitions.begin();
-	while (transition != transitions.end()) {
-		fsm.addTransition(transition->getFrom(), transition->getInput(), transition->getTo());
-		transition++;
-	}
-
-	return fsm;
-}
-
-bool AutomatonConvertor::isNPDA(const UnknownAutomaton& automaton) {
-	if (automaton.getTapeSymbols().size() > 0 || automaton.hasBlankSymbol()) {
-		return false;
-	}
-
-	const std::set<UnknownTransition> transitions = automaton.getTransitions();
-	std::set<UnknownTransition>::const_iterator transition = transitions.begin();
-	while (transition != transitions.end()) {
-		if (!isNPDATransition(*transition)) {
-			return false;
-		}
-		transition++;
-	}
-
-	return true;
-}
-
-bool AutomatonConvertor::isNPDATransition(const UnknownTransition& transition) {
-	return !(transition.hasOutput() || transition.getShift() != NOT_SET);
-}
-
-NPDA AutomatonConvertor::buildNPDA(const UnknownAutomaton& automaton) {
-	NPDA pda;
-	pda.setStates(automaton.getStates());
-	pda.setInputSymbols(automaton.getInputSymbols());
-	pda.setInitialStates(automaton.getInitialStates());
-	pda.setFinalStates(automaton.getFinalStates());
-	pda.setStackSymbols(automaton.getStackSymbols());
-	pda.setInitialSymbols(automaton.getInitialSymbols());
-
-	const std::set<UnknownTransition>& transitions = automaton.getTransitions();
-	std::set<UnknownTransition>::const_iterator transition = transitions.begin();
-	while (transition != transitions.end()) {
-		pda.addTransition(transition->getFrom(), transition->getInput().get<alphabet::Symbol>(), transition->getPop(), transition->getTo(), transition->getPush());
-		transition++;
-	}
-
-	return pda;
-}
-
-bool AutomatonConvertor::isOneTapeDTM(const UnknownAutomaton& automaton) {
-	if(!automaton.hasBlankSymbol()) return false;
-
-	if(automaton.getInitialStates().size() > 1) return false;
-
-	if (automaton.getStackSymbols().size() > 0 || automaton.getInitialSymbols().size() > 0) {
-		return false;
-	}
-
-	const std::set<UnknownTransition>& transitions = automaton.getTransitions();
-	std::set<UnknownTransition>::const_iterator transition = transitions.begin();
-	while (transition != transitions.end()) {
-		if (!isOneTapeDTMTransition(*transition)) {
-			return false;
-		}
-		transition++;
-	}
-
-	return true;
-
-}
-
-bool AutomatonConvertor::isOneTapeDTMTransition(const UnknownTransition& transition) {
-	return !(transition.getPop().size() > 0 || transition.getPush().size() > 0);
-
-}
-
-OneTapeDTM AutomatonConvertor::buildOneTapeDTM(const UnknownAutomaton& automaton) {
-	OneTapeDTM tm(*automaton.getInitialStates().begin(), automaton.getBlankSymbol());
-	
-	tm.setTapeSymbols(automaton.getTapeSymbols());
-	tm.setStates(automaton.getStates());
-	tm.setInputSymbols(automaton.getInputSymbols());
-	tm.setFinalStates(automaton.getFinalStates());
-
-	const std::set<UnknownTransition>& transitions = automaton.getTransitions();
-	std::set<UnknownTransition>::const_iterator transition = transitions.begin();
-	while (transition != transitions.end()) {
-		tm.addTransition(transition->getFrom(), transition->getInput().get<alphabet::Symbol>(), transition->getTo(), transition->getOutput().get<alphabet::Symbol>(), transition->getShift());
-		transition++;
-	}
-
-	return tm;
-
-}
-
-} /* namespace automaton */
diff --git a/alib2data/src/factory/AutomatonConvertor.h b/alib2data/src/factory/AutomatonConvertor.h
deleted file mode 100644
index 468cc2c777..0000000000
--- a/alib2data/src/factory/AutomatonConvertor.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * AutomatonFactory.h
- *
- *  Created on: Apr 23, 2013
- *      Author: Jan Travnicek
- */
-
-#ifndef AUTOMATON_CONVERTOR_H_
-#define AUTOMATON_FONVERTOR_H_
-
-#include "../automaton/Automaton.h"
-#include "../automaton/UnknownAutomaton.h"
-#include "../automaton/FSM/EpsilonNFA.h"
-#include "../automaton/PDA/NPDA.h"
-#include "../automaton/TM/OneTapeDTM.h"
-
-namespace automaton {
-
-/**
- * Builds specific automatons from UnknownAutomaton. It converts an UnknownAutomaton to the most general automaton in the group - EpsilonNFA for FSA, ...
- */
-class AutomatonConvertor {
-public:
-	/**
-	 * Tries to create specific automaton from UnknownAutomaton.
-	 * @param automaton source UnknownAutomaton
-	 * @return pointer to new automaton
-	 * @throws AutomatonException when specific automaton cannot
-	 * be created form UnknownAutomaton (e.g. automaton type is not recognized)
-	 */
-	static Automaton buildAutomaton(const UnknownAutomaton& automaton);
-
-	/**
-	 * Checks that FSM can be build from UnknownAutomaton. That means UnknownAutomaton
-	 * doesn't contain elements that are not present in the FSM.
-	 * @param automaton source UnknownAutomaton
-	 * @return true when FSM can be build from UnknownAutomaton, false otherwise
-	 */
-	static bool isEpsilonNFA(const UnknownAutomaton& automaton);
-
-	/**
-	 * Tries to build FSM from the UnknownAutomaton. Ignores elements that
-	 * are not required for the FSM.
-	 * @param automaton source UnknownAutomaton
-	 * @return EpsilonNFA
-	 */
-	static EpsilonNFA buildEpsilonNFA(const UnknownAutomaton& automaton);
-
-	/**
-	 * Checks that PDA can be build from UnknownAutomaton. That means UnknownAutomaton
-	 * doesn't contain elements that are not present in the PDA.
-	 * @param automaton source UnknownAutomaton
-	 * @return true when PDA can be build from UnknownAutomaton, false otherwise
-	 */
-	static bool isNPDA(const UnknownAutomaton& automaton);
-
-	/**
-	 * Tries to build PDA from the UnknownAutomaton. Ignores elements that
-	 * are not required for the PDA.
-	 * @param automaton source UnknownAutomaton
-	 * @return PDA
-	 */
-	static NPDA buildNPDA(const UnknownAutomaton& automaton);
-
-	/**
-	 * Checks that TM can be build from UnknownAutomaton. That means UnknownAutomaton
-	 * doesn't contain elements that are not present in the TM.
-	 * @param automaton source UnknownAutomaton
-	 * @return true when TM can be build from UnknownAutomaton, false otherwise
-	 */
-	static bool isOneTapeDTM(const UnknownAutomaton& automaton);
-
-	/**
-	 * Tries to build TM from the UnknownAutomaton. Ignores elements that
-	 * are not required for the TM.
-	 * @param automaton source UnknownAutomaton
-	 * @return TM
-	 */
-	static OneTapeDTM buildOneTapeDTM(const UnknownAutomaton& automaton);
-
-protected:
-	/**
-	 * Build common part (states, input alphabet, initial states, final states)
-	 * of the automaton from UnknownAutomaton.
-	 * @param automaton automaton to build (destination)
-	 * @param unknownAutomaton source automaton
-	 */
-	static void buildCommon(Automaton& automaton, const UnknownAutomaton& unknownAutomaton);
-
-	/**
-	 * Checks that transition contains only elements that are valid for FSM.
-	 * @param transition UnknownTransition to check
-	 * @return true when transition is FSM transition
-	 */
-	static bool isEpsilonNFATransition(const UnknownTransition& transition);
-
-	/**
-	 * Checks that transition contains only elements that are valid for PDA.
-	 * @param transition UnknownTransition to check
-	 * @return true when transition is PDA transition
-	 */
-	static bool isNPDATransition(const UnknownTransition& transition);
-
-	/**
-	 * Checks that transition contains only elements that are valid for TM.
-	 * @param transition UnknownTransition to check
-	 * @return true when transition is TM transition
-	 */
-	static bool isOneTapeDTMTransition(const UnknownTransition& transition);
-};
-
-} /* namespace automaton */
-
-#endif /* AUTOMATON_CONVERTOR_H_ */
-
diff --git a/alib2data/src/factory/AutomatonRevertor.cpp b/alib2data/src/factory/AutomatonRevertor.cpp
deleted file mode 100644
index 0d7bb6411b..0000000000
--- a/alib2data/src/factory/AutomatonRevertor.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-#include "AutomatonRevertor.h"
-#include "../exception/AlibException.h"
-
-#include "../automaton/UnknownAutomaton.h"
-#include "../automaton/FSM/DFA.h"
-#include "../automaton/FSM/NFA.h"
-#include "../automaton/FSM/EpsilonNFA.h"
-#include "../automaton/FSM/ExtendedNFA.h"
-#include "../automaton/FSM/CompactNFA.h"
-#include "../automaton/PDA/NPDA.h"
-#include "../automaton/PDA/SinglePopNPDA.h"
-#include "../automaton/TM/OneTapeDTM.h"
-
-namespace automaton {
-
-UnknownAutomaton AutomatonRevertor::revert(const UnknownAutomaton& automaton) const {
-	return automaton;
-}
-
-UnknownAutomaton AutomatonRevertor::revert(const DFA& automaton) const {
-	UnknownAutomaton out;
-	// TODO
-	return out;
-}
-
-UnknownAutomaton AutomatonRevertor::revert(const NFA& automaton) const {
-	UnknownAutomaton out;
-	// TODO
-	return out;
-}
-
-UnknownAutomaton AutomatonRevertor::revert(const EpsilonNFA& automaton) const {
-	UnknownAutomaton out;
-	// TODO
-	return out;
-}
-
-UnknownAutomaton AutomatonRevertor::revert(const ExtendedNFA&) const {
-	throw exception::AlibException("Unable to revert ExtendedNFA to UnknownAutomaton");
-}
-
-UnknownAutomaton AutomatonRevertor::revert(const CompactNFA&) const {
-	throw exception::AlibException("Unable to revert CompactNFA to UnknownAutomaton");
-}
-
-UnknownAutomaton AutomatonRevertor::revert(const NPDA& automaton) const {
-	UnknownAutomaton out;
-	// TODO
-	return out;
-}
-
-UnknownAutomaton AutomatonRevertor::revert(const SinglePopNPDA& automaton) const {
-	UnknownAutomaton out;
-	// TODO
-	return out;
-}
-
-UnknownAutomaton AutomatonRevertor::revert(const OneTapeDTM& automaton) const {
-	UnknownAutomaton out;
-	// TODO
-	return out;
-}
-
-UnknownAutomaton AutomatonRevertor::revert(const Automaton& automaton) const {
-	UnknownAutomaton out;
-	automaton.getData().Accept((void*) &out, *this);
-	return out;
-}
-
-void AutomatonRevertor::Visit(void* data, const UnknownAutomaton& automaton) const {
-	*((UnknownAutomaton*) data) = this->revert(automaton);
-}
-
-void AutomatonRevertor::Visit(void* data, const EpsilonNFA& automaton) const {
-	*((UnknownAutomaton*) data) = this->revert(automaton);
-}
-
-void AutomatonRevertor::Visit(void* data, const NFA& automaton) const {
-	*((UnknownAutomaton*) data) = this->revert(automaton);
-}
-
-void AutomatonRevertor::Visit(void* data, const DFA& automaton) const {
-	*((UnknownAutomaton*) data) = this->revert(automaton);
-}
-
-void AutomatonRevertor::Visit(void* data, const ExtendedNFA& automaton) const {
-	*((UnknownAutomaton*) data) = this->revert(automaton);
-}
-
-void AutomatonRevertor::Visit(void* data, const CompactNFA& automaton) const {
-	*((UnknownAutomaton*) data) = this->revert(automaton);
-}
-
-void AutomatonRevertor::Visit(void* data, const NPDA& automaton) const {
-	*((UnknownAutomaton*) data) = this->revert(automaton);
-}
-
-void AutomatonRevertor::Visit(void* data, const SinglePopNPDA& automaton) const {
-	*((UnknownAutomaton*) data) = this->revert(automaton);
-}
-
-void AutomatonRevertor::Visit(void* data, const OneTapeDTM& automaton) const {
-	*((UnknownAutomaton*) data) = this->revert(automaton);
-}
-
-} /* namespace automaton */
diff --git a/alib2data/src/factory/AutomatonRevertor.h b/alib2data/src/factory/AutomatonRevertor.h
deleted file mode 100644
index c7a4d3ebed..0000000000
--- a/alib2data/src/factory/AutomatonRevertor.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef AUTOMATON_PRINTER_H_
-#define AUTOMATON_PRINTER_H_
-
-#include "../automaton/Automaton.h"
-
-namespace automaton {
-
-class AutomatonRevertor : public VisitableAutomatonBase::const_visitor_type {
-	void Visit(void*, const UnknownAutomaton& automaton) const;
-	void Visit(void*, const EpsilonNFA& automaton) const;
-	void Visit(void*, const NFA& automaton) const;
-	void Visit(void*, const DFA& automaton) const;
-	void Visit(void*, const ExtendedNFA& automaton) const;
-	void Visit(void*, const CompactNFA& automaton) const;
-	void Visit(void*, const NPDA& automaton) const;
-	void Visit(void*, const SinglePopNPDA& automaton) const;
-	void Visit(void*, const OneTapeDTM& automaton) const;
-
-public:
-	UnknownAutomaton revert(const Automaton& automaton) const;
-
-	UnknownAutomaton revert(const UnknownAutomaton& automaton) const;
-	UnknownAutomaton revert(const DFA& automaton) const;
-	UnknownAutomaton revert(const NFA& automaton) const;
-	UnknownAutomaton revert(const EpsilonNFA& automaton) const;
-	UnknownAutomaton revert(const ExtendedNFA& automaton) const;
-	UnknownAutomaton revert(const CompactNFA& automaton) const;
-	UnknownAutomaton revert(const NPDA& automaton) const;
-	UnknownAutomaton revert(const SinglePopNPDA& automaton) const;
-	UnknownAutomaton revert(const OneTapeDTM& automaton) const;
-};
-
-} /* namespace automaton */
-
-#endif /* AUTOMATON_PRINTER_H_ */
diff --git a/alib2data/src/grammar/GrammarBase.h b/alib2data/src/grammar/GrammarBase.h
index 775368ff1e..1ddf8ca899 100644
--- a/alib2data/src/grammar/GrammarBase.h
+++ b/alib2data/src/grammar/GrammarBase.h
@@ -14,7 +14,7 @@
 namespace grammar {
 
 typedef std::acceptor_base<
-			grammar::UnknownGrammar, grammar::LeftLG, grammar::LeftRG, grammar::RightLG, grammar::RightRG, grammar::LG, grammar::CFG, grammar::EpsilonFreeCFG, grammar::CNF, grammar::GNF, grammar::CSG, grammar::NonContractingGrammar, grammar::ContextPreservingUnrestrictedGrammar, grammar::UnrestrictedGrammar
+			grammar::LeftLG, grammar::LeftRG, grammar::RightLG, grammar::RightRG, grammar::LG, grammar::CFG, grammar::EpsilonFreeCFG, grammar::CNF, grammar::GNF, grammar::CSG, grammar::NonContractingGrammar, grammar::ContextPreservingUnrestrictedGrammar, grammar::UnrestrictedGrammar
 	> VisitableGrammarBase;
 
 /**
diff --git a/alib2data/src/grammar/GrammarFeatures.h b/alib2data/src/grammar/GrammarFeatures.h
index 10a4932df1..4387ca0793 100644
--- a/alib2data/src/grammar/GrammarFeatures.h
+++ b/alib2data/src/grammar/GrammarFeatures.h
@@ -11,7 +11,6 @@
 namespace grammar {
 
 enum class FEATURES {
-	GRAMMAR,
 	LEFT_LG,
 	LEFT_RG,
 	RIGHT_LG,
diff --git a/alib2data/src/grammar/GrammarFromStringParser.cpp b/alib2data/src/grammar/GrammarFromStringParser.cpp
index 9f735db03f..434630a419 100644
--- a/alib2data/src/grammar/GrammarFromStringParser.cpp
+++ b/alib2data/src/grammar/GrammarFromStringParser.cpp
@@ -9,7 +9,6 @@
 
 #include "../exception/AlibException.h"
 
-#include "UnknownGrammar.h"
 
 namespace grammar {
 
@@ -18,12 +17,11 @@ GrammarFromStringParser::GrammarFromStringParser(std::istream& input) : m_Gramma
 }
 
 Grammar GrammarFromStringParser::parse() {
-	return parse(std::set<FEATURES>({FEATURES::GRAMMAR}));
+	return parse(std::set<FEATURES>({}));
 }
 
 Grammar GrammarFromStringParser::parse(const std::set<FEATURES>& features) {
-	if(!features.count(FEATURES::GRAMMAR)) throw exception::AlibException();
-	return Grammar(parseUnknownGrammar());
+	throw exception::AlibException();
 }
 
 bool GrammarFromStringParser::first() {
@@ -53,53 +51,6 @@ bool GrammarFromStringParser::last() {
 	}
 }
 
-UnknownGrammar GrammarFromStringParser::parseUnknownGrammar() {
-	UnknownGrammar res;
-
-	GrammarFromStringLexer::Token token = m_GrammarLexer.token();
-	if(token.type != GrammarFromStringLexer::TokenType::TUPLE_BEGIN) {
-		throw exception::AlibException();
-	}
-	next();
-
-	std::set<alphabet::Symbol> nonterminals = parseSet();
-	res.setNonterminalAlphabet(nonterminals);
-
-	token = m_GrammarLexer.token();
-	if(token.type != GrammarFromStringLexer::TokenType::COMMA) {
-		throw exception::AlibException();
-	}
-	next();
-
-	std::set<alphabet::Symbol> terminals = parseSet();
-	res.setTerminalAlphabet(terminals);
-
-	token = m_GrammarLexer.token();
-	if(token.type != GrammarFromStringLexer::TokenType::COMMA) {
-		throw exception::AlibException();
-	}
-	next();
-
-	parseRules(res);
-
-	token = m_GrammarLexer.token();
-	if(token.type != GrammarFromStringLexer::TokenType::COMMA) {
-		throw exception::AlibException();
-	}
-	next() || m_SymbolParser.first() || m_SymbolParser.m_LabelParser.first();
-
-	alphabet::Symbol initialSymbol = m_SymbolParser.parse();
-	res.setInitialSymbol(initialSymbol);
-
-	next();
-	token = m_GrammarLexer.token();
-	if(token.type != GrammarFromStringLexer::TokenType::TUPLE_END) {
-		throw exception::AlibException();
-	}
-
-	return  res;
-}
-
 std::set<alphabet::Symbol> GrammarFromStringParser::parseSet() {
 	std::set<alphabet::Symbol> res;
 
@@ -130,67 +81,4 @@ std::set<alphabet::Symbol> GrammarFromStringParser::parseSet() {
 	return res;
 }
 
-void GrammarFromStringParser::parseRules(grammar::UnknownGrammar& grammar) {
-	GrammarFromStringLexer::Token token = m_GrammarLexer.token();
-	if(token.type != GrammarFromStringLexer::TokenType::SET_BEGIN) {
-		throw exception::AlibException();
-	}
-	next() || m_SymbolParser.first() || m_SymbolParser.m_LabelParser.first();
-
-	token = m_GrammarLexer.token();
-	if(token.type != GrammarFromStringLexer::TokenType::SET_END) while(true) {
-		std::vector<alphabet::Symbol> lhs;
-
-		do {
-			alphabet::Symbol symbol = m_SymbolParser.parse();
-			lhs.push_back(symbol);
-
-			next() || m_SymbolParser.first() || m_SymbolParser.m_LabelParser.first();
-			token = m_GrammarLexer.token();
-		} while(token.type != GrammarFromStringLexer::TokenType::MAPS_TO);
-
-		if(token.type != GrammarFromStringLexer::TokenType::MAPS_TO) {
-			throw exception::AlibException();
-		}
-		next() || m_SymbolParser.first() || m_SymbolParser.m_LabelParser.first();
-		token = m_GrammarLexer.token();
-
-
-		do {
-			std::vector<alphabet::Symbol> rhs;
-
-			if(token.type == GrammarFromStringLexer::TokenType::EPSILON) {
-				next();
-				token = m_GrammarLexer.token();
-			} else do {
-				alphabet::Symbol symbol = m_SymbolParser.parse();
-				rhs.push_back(symbol);
-
-				next() || m_SymbolParser.first() || m_SymbolParser.m_LabelParser.first();
-				token = m_GrammarLexer.token();
-			} while(token.type != GrammarFromStringLexer::TokenType::SET_END && token.type != GrammarFromStringLexer::TokenType::COMMA && token.type != GrammarFromStringLexer::TokenType::SEPARATOR);
-
-			grammar.addRule(UnknownRule{ lhs, rhs } );
-
-			if(token.type == GrammarFromStringLexer::TokenType::SET_END || token.type == GrammarFromStringLexer::TokenType::COMMA)
-				break;
-			else
-				next() || m_SymbolParser.first() || m_SymbolParser.m_LabelParser.first();
-			token = m_GrammarLexer.token();
-		} while(true);
-
-		if(token.type == GrammarFromStringLexer::TokenType::SET_END)
-			break;
-		else
-			next() || m_SymbolParser.first() || m_SymbolParser.m_LabelParser.first();
-		token = m_GrammarLexer.token();
-	}
-	
-	if(token.type != GrammarFromStringLexer::TokenType::SET_END) {
-		throw exception::AlibException();
-	}
-	next();
-
-}
-
 } /* namespace grammar */
diff --git a/alib2data/src/grammar/GrammarFromStringParser.h b/alib2data/src/grammar/GrammarFromStringParser.h
index 88dfbfdb8f..fd441cdfa5 100644
--- a/alib2data/src/grammar/GrammarFromStringParser.h
+++ b/alib2data/src/grammar/GrammarFromStringParser.h
@@ -21,9 +21,7 @@ class GrammarFromStringParser : public alib::FromStringParser<Grammar, FEATURES>
 	alphabet::SymbolFromStringParser m_SymbolParser;
 
 	std::set<alphabet::Symbol> parseSet();
-	void parseRules(UnknownGrammar& res);
 
-	UnknownGrammar parseUnknownGrammar();
 	virtual bool last();
 	Grammar parse();
 	Grammar parse(const std::set<FEATURES>& features);
diff --git a/alib2data/src/grammar/GrammarFromXMLParser.cpp b/alib2data/src/grammar/GrammarFromXMLParser.cpp
index 728226a72b..7823887f6d 100644
--- a/alib2data/src/grammar/GrammarFromXMLParser.cpp
+++ b/alib2data/src/grammar/GrammarFromXMLParser.cpp
@@ -15,14 +15,11 @@
 namespace grammar {
 
 Grammar GrammarFromXMLParser::parseGrammar(std::list<sax::Token> &input) const {
-	return parseGrammar(input, std::set<FEATURES>({FEATURES::GRAMMAR, FEATURES::LEFT_LG, FEATURES::LEFT_RG, FEATURES::RIGHT_LG, FEATURES::RIGHT_RG, FEATURES::LG, FEATURES::CFG, FEATURES::EPSILON_FREE_CFG, FEATURES::CNF, FEATURES::GNF, FEATURES::CSG, FEATURES::NON_CONTRACTING_GRAMMAR, FEATURES::CONTEXT_PRESERVING_UNRESTRICTED_GRAMMAR, FEATURES::UNRESTRICTED_GRAMMAR}));
+	return parseGrammar(input, std::set<FEATURES>({FEATURES::LEFT_LG, FEATURES::LEFT_RG, FEATURES::RIGHT_LG, FEATURES::RIGHT_RG, FEATURES::LG, FEATURES::CFG, FEATURES::EPSILON_FREE_CFG, FEATURES::CNF, FEATURES::GNF, FEATURES::CSG, FEATURES::NON_CONTRACTING_GRAMMAR, FEATURES::CONTEXT_PRESERVING_UNRESTRICTED_GRAMMAR, FEATURES::UNRESTRICTED_GRAMMAR}));
 }
 
 Grammar GrammarFromXMLParser::parseGrammar(std::list<sax::Token>& input, const std::set<FEATURES>& features) const {
-	if(isToken(input, sax::Token::TokenType::START_ELEMENT, "grammar")) {
-		if(!features.count(FEATURES::GRAMMAR)) throw exception::AlibException();
-		return Grammar(parseUnknownGrammar(input));
-	} else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "UnrestrictedGrammar")) {
+	if(isToken(input, sax::Token::TokenType::START_ELEMENT, "UnrestrictedGrammar")) {
 		if(!features.count(FEATURES::UNRESTRICTED_GRAMMAR)) throw exception::AlibException();
 		return Grammar(parseUnrestrictedGrammar(input));
 	} else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "ContextPreservingUnrestrictedGrammar")) {
@@ -73,29 +70,6 @@ bool GrammarFromXMLParser::first(std::list<sax::Token>& input) const {
 	}
 }
 
-UnknownGrammar GrammarFromXMLParser::parseUnknownGrammar(std::list<sax::Token> &input) const {
-	UnknownGrammar grammar;
-
-	popToken(input, sax::Token::TokenType::START_ELEMENT, "grammar");
-
-	while (isTokenType(input, sax::Token::TokenType::START_ELEMENT)) {
-		if (isToken(input, sax::Token::TokenType::START_ELEMENT, "nonterminalAlphabet")) {
-			grammar.setNonterminalAlphabet(parseNonterminalAlphabet(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "terminalAlphabet")) {
-			grammar.setTerminalAlphabet(parseTerminalAlphabet(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "initialSymbol")) {
-			grammar.setInitialSymbol(parseInitialSymbol(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "rules")) {
-			parseRules(input, grammar);
-		} else {
-			throw sax::ParserException(sax::Token("grammar", sax::Token::TokenType::END_ELEMENT), input.front());
-		}
-	}
-
-	popToken(input, sax::Token::TokenType::END_ELEMENT, "grammar");
-	return grammar;
-}
-
 UnrestrictedGrammar GrammarFromXMLParser::parseUnrestrictedGrammar(std::list<sax::Token>& input) const {
 	popToken(input, sax::Token::TokenType::START_ELEMENT, "UnrestrictedGrammar");
 
@@ -393,22 +367,6 @@ void GrammarFromXMLParser::parseRules(std::list<sax::Token> &input, T& grammar)
 	popToken(input, sax::Token::TokenType::END_ELEMENT, "rules");
 }
 
-void GrammarFromXMLParser::parseRule(std::list<sax::Token>& input, UnknownGrammar& grammar) const {
-	UnknownRule rule;
-
-	while (isTokenType(input, sax::Token::TokenType::START_ELEMENT)) {
-		if (isToken(input, sax::Token::TokenType::START_ELEMENT, "lhs")) {
-			rule.setLeftHandSide(parseRuleLHS(input));
-		} else if (isToken(input, sax::Token::TokenType::START_ELEMENT, "rhs")) {
-			rule.setRightHandSide(parseRuleRHS(input));
-		} else {
-			throw sax::ParserException(sax::Token("rule", sax::Token::TokenType::END_ELEMENT), input.front());
-		}
-	}
-
-	grammar.addRule(rule);
-}
-
 void GrammarFromXMLParser::parseRule(std::list<sax::Token>& input, UnrestrictedGrammar& grammar) const {
 	std::vector<alphabet::Symbol> lhs = parseRuleLHS(input);
 	std::vector<alphabet::Symbol> rhs = parseRuleRHS(input);
diff --git a/alib2data/src/grammar/GrammarFromXMLParser.h b/alib2data/src/grammar/GrammarFromXMLParser.h
index b0d63f7ad9..d667bc1eb5 100644
--- a/alib2data/src/grammar/GrammarFromXMLParser.h
+++ b/alib2data/src/grammar/GrammarFromXMLParser.h
@@ -11,7 +11,6 @@
 #include "../sax/FromXMLParserHelper.h"
 #include "Grammar.h"
 #include "GrammarFeatures.h"
-#include "UnknownGrammar.h"
 #include "Regular/LeftLG.h"
 #include "Regular/LeftRG.h"
 #include "Regular/RightLG.h"
@@ -60,7 +59,6 @@ class GrammarFromXMLParser : public sax::FromXMLParserHelper {
 	template<class T>
 	void parseRules(std::list<sax::Token> &input, T& grammar) const;
 
-	void parseRule(std::list<sax::Token>& input, UnknownGrammar& grammar) const;
 	void parseRule(std::list<sax::Token>& input, UnrestrictedGrammar& grammar) const;
 	void parseRule(std::list<sax::Token>& input, ContextPreservingUnrestrictedGrammar& grammar) const;
 	void parseRule(std::list<sax::Token>& input, NonContractingGrammar& grammar) const;
@@ -78,7 +76,6 @@ class GrammarFromXMLParser : public sax::FromXMLParserHelper {
 	Grammar parseGrammar(std::list<sax::Token>& input) const;
 	Grammar parseGrammar(std::list<sax::Token>& input, const std::set<FEATURES>& features) const;
 
-	UnknownGrammar parseUnknownGrammar(std::list<sax::Token>& input) const;
 	UnrestrictedGrammar parseUnrestrictedGrammar(std::list<sax::Token>& input) const;
 	ContextPreservingUnrestrictedGrammar parseContextPreservingUnrestrictedGrammar(std::list<sax::Token>& input) const;
 	NonContractingGrammar parseNonContractingGrammar(std::list<sax::Token>& input) const;
diff --git a/alib2data/src/grammar/GrammarToStringComposer.cpp b/alib2data/src/grammar/GrammarToStringComposer.cpp
index 2b19b7cc5c..25f5e3f156 100644
--- a/alib2data/src/grammar/GrammarToStringComposer.cpp
+++ b/alib2data/src/grammar/GrammarToStringComposer.cpp
@@ -14,68 +14,6 @@ std::string GrammarToStringComposer::compose(const Grammar& grammar) const {
 	return out.str();
 }
 
-std::string GrammarToStringComposer::compose( const UnknownGrammar & grammar ) const {
-	alphabet::SymbolToStringComposer composer;
-	std::stringstream ss;
-
-	// group by left side
-	std::map< std::vector<alphabet::Symbol>, std::set<std::vector<alphabet::Symbol> > > group;
-	for( const auto & r : grammar.getRules( ) ) {
-		group[ r.getLeftHandSide( ) ].insert( r.getRightHandSide() );
-	}
-
-	ss << "(";
-
-	auto last = grammar.getNonterminalAlphabet( ).end( );
-	last--;
-
-	ss << "{";
-	for( auto it = grammar.getNonterminalAlphabet( ).begin( ) ; it != grammar.getNonterminalAlphabet( ).end( ) ; it++ )
-		ss << composer.compose(*it) << ( it == last ? "" : ", " );
-	ss << "}," << std::endl << " ";
-
-	last = grammar.getTerminalAlphabet( ).end( );
-	last--;
-
-	ss << "{";
-	for( auto it = grammar.getTerminalAlphabet( ).begin( ) ; it != grammar.getTerminalAlphabet( ).end( ) ; it++ )
-		ss << composer.compose(*it) << ( it == last ? "" : ", " );
-	ss << "}," << std::endl << " ";
-
-	ss << "{";
-	bool first = true;
-	for( const auto & g : group ) {
-		if(first)
-			first = false;
-		else
-			ss << ",\n  ";
-
-		for( const auto & symbol : g.first )
-			ss << composer.compose( symbol ) << " ";
-		
-		ss << "->";
-
-		bool ffirst = true;
-		for( const auto & rhs : g.second ) {
-			if(ffirst)
-				ffirst = false;
-			else
-				ss << " |";
-
-			if(rhs.size())
-				for( const auto & symbol : rhs )
-					ss << " " << composer.compose( symbol );
-			else
-				ss << " #E";
-		}
-	}
-	ss << "}," << std::endl << " ";
-
-	ss << composer.compose(grammar.getInitialSymbol( ));
-	ss << ")" << std::endl;
-	return std::move(ss).str();
-}
-
 std::string GrammarToStringComposer::compose(const LeftLG& grammar) const {
 	// TODO
 }
@@ -128,10 +66,6 @@ std::string GrammarToStringComposer::compose(const UnrestrictedGrammar& grammar)
 	// TODO
 }
 
-void GrammarToStringComposer::Visit(void* data, const UnknownGrammar& grammar) const {
-	*((std::stringstream*) data) << this->compose(grammar);
-}
-
 void GrammarToStringComposer::Visit(void* data, const LeftLG& grammar) const {
 	*((std::stringstream*) data) << this->compose(grammar);
 }
diff --git a/alib2data/src/grammar/GrammarToStringComposer.h b/alib2data/src/grammar/GrammarToStringComposer.h
index 5749464a85..de36439b26 100644
--- a/alib2data/src/grammar/GrammarToStringComposer.h
+++ b/alib2data/src/grammar/GrammarToStringComposer.h
@@ -3,7 +3,6 @@
 
 #include <iostream>
 #include "Grammar.h"
-#include "UnknownGrammar.h"
 
 #include <map>
 #include <list>
@@ -12,7 +11,6 @@
 namespace grammar {
 
 class GrammarToStringComposer : public VisitableGrammarBase::const_visitor_type {
-	void Visit(void*, const UnknownGrammar& grammar) const;
 	void Visit(void*, const LeftLG& grammar) const;
 	void Visit(void*, const LeftRG& grammar) const;
 	void Visit(void*, const RightLG& grammar) const;
@@ -29,7 +27,7 @@ class GrammarToStringComposer : public VisitableGrammarBase::const_visitor_type
 
 public:
 	/**
-	 * Prints XML representation of UnknownAutomaton to the output stream.
+	 * Prints XML representation of Automaton to the output stream.
 	 * @param automaton automaton to print
 	 * @return list of xml tokens representing the automaton
 	 */
@@ -37,7 +35,6 @@ public:
 
 	std::string compose(const Grammar& grammar) const;
 
-	std::string compose(const UnknownGrammar& grammar) const;
 	std::string compose(const LeftLG& grammar) const;
 	std::string compose(const LeftRG& grammar) const;
 	std::string compose(const RightLG& grammar) const;
diff --git a/alib2data/src/grammar/GrammarToXMLComposer.cpp b/alib2data/src/grammar/GrammarToXMLComposer.cpp
index 887456daa1..b6eb024090 100644
--- a/alib2data/src/grammar/GrammarToXMLComposer.cpp
+++ b/alib2data/src/grammar/GrammarToXMLComposer.cpp
@@ -24,26 +24,6 @@ std::list<sax::Token> GrammarToXMLComposer::compose(const Grammar& grammar) cons
 	return out;
 }
 
-std::list<sax::Token> GrammarToXMLComposer::compose(const UnknownGrammar& grammar) const {
-	std::list<sax::Token> out;
-	out.push_back(sax::Token("grammar", sax::Token::TokenType::START_ELEMENT));
-	
-	if (grammar.getNonterminalAlphabet().size() > 0)
-		composeNonterminalAlphabet(out, grammar.getNonterminalAlphabet());
-
-	if (grammar.getTerminalAlphabet().size() > 0)
-		composeTerminalAlphabet(out, grammar.getTerminalAlphabet());
-
-	if (grammar.hasInitialSymbol())
-		composeInitialSymbol(out, grammar.getInitialSymbol());
-
-	if (grammar.getRules().size() > 0)
-		composeRules(out, grammar);
-
-	out.push_back(sax::Token("grammar", sax::Token::TokenType::END_ELEMENT));
-	return out;
-}
-
 std::list<sax::Token> GrammarToXMLComposer::compose(const LeftLG& grammar) const {
 	std::list<sax::Token> out;
 	out.push_back(sax::Token("LeftLG", sax::Token::TokenType::START_ELEMENT));
@@ -255,23 +235,6 @@ void GrammarToXMLComposer::composeGeneratesEpsilon(std::list<sax::Token>& out, b
 }
 
 
-void GrammarToXMLComposer::composeRules(std::list<sax::Token>& out, const UnknownGrammar& grammar) const {
-	out.push_back(sax::Token("rules", sax::Token::TokenType::START_ELEMENT));
-	for (const auto& rule : grammar.getRules()) {
-		out.push_back(sax::Token("rule", sax::Token::TokenType::START_ELEMENT));
-
-		if (rule.getLeftHandSide().size() > 0)
-			composeRuleLHS(out, rule.getLeftHandSide());
-
-		if (rule.getLeftHandSide().size() > 0)
-			composeRuleRHS(out, rule.getRightHandSide());
-
-		out.push_back(sax::Token("rule", sax::Token::TokenType::END_ELEMENT));
-	}
-
-	out.push_back(sax::Token("rules", sax::Token::TokenType::END_ELEMENT));
-}
-
 void GrammarToXMLComposer::composeRules(std::list<sax::Token>& out, const UnrestrictedGrammar& grammar) const {
 	out.push_back(sax::Token("rules", sax::Token::TokenType::START_ELEMENT));
 	for (const auto& rule : grammar.getRules()) {
diff --git a/alib2data/src/grammar/GrammarToXMLComposer.h b/alib2data/src/grammar/GrammarToXMLComposer.h
index 80beb747d1..254589a102 100644
--- a/alib2data/src/grammar/GrammarToXMLComposer.h
+++ b/alib2data/src/grammar/GrammarToXMLComposer.h
@@ -11,7 +11,6 @@
 #include <string>
 #include <list>
 #include "Grammar.h"
-#include "UnknownGrammar.h"
 #include "Regular/LeftLG.h"
 #include "Regular/LeftRG.h"
 #include "Regular/RightLG.h"
@@ -45,7 +44,6 @@ class GrammarToXMLComposer {
 	void composeInitialSymbol(std::list<sax::Token>& out, const alphabet::Symbol& symbol) const;
 	void composeGeneratesEpsilon(std::list<sax::Token>& out, bool generatesEpsilon) const;
 	
-	void composeRules(std::list<sax::Token>& out, const UnknownGrammar& grammar) const;
 	void composeRules(std::list<sax::Token>& out, const UnrestrictedGrammar& grammar) const;
 	void composeRules(std::list<sax::Token>& out, const ContextPreservingUnrestrictedGrammar& grammar) const;
 	void composeRules(std::list<sax::Token>& out, const NonContractingGrammar& grammar) const;
@@ -72,7 +70,7 @@ class GrammarToXMLComposer {
 	void composeRuleLGRHS(std::list<sax::Token>& out, const std::variant<std::vector<alphabet::Symbol>, std::tuple<std::vector<alphabet::Symbol>, alphabet::Symbol, std::vector<alphabet::Symbol>>>& symbols) const;
 	
 	/**
-	 * Prints XML representation of UnknownGrammar to the output stream.
+	 * Prints XML representation of Grammar to the output stream.
 	 * @param grammar grammar to print
 	 * @return list of xml tokens representing the grammar
 	 */
@@ -80,7 +78,6 @@ class GrammarToXMLComposer {
 
 	std::list<sax::Token> compose(const Grammar& grammar) const;
 
-	std::list<sax::Token> compose(const UnknownGrammar& grammar) const;
 	std::list<sax::Token> compose(const LeftLG& grammar) const;
 	std::list<sax::Token> compose(const LeftRG& grammar) const;
 	std::list<sax::Token> compose(const RightLG& grammar) const;
diff --git a/alib2data/src/grammar/UnknownGrammar.cpp b/alib2data/src/grammar/UnknownGrammar.cpp
deleted file mode 100644
index ccfb19d46d..0000000000
--- a/alib2data/src/grammar/UnknownGrammar.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * UnknownGrammar.cpp
- *
- *  Created on: Nov 2, 2013
- *      Author: Martin Zak
- */
-
-#include "UnknownGrammar.h"
-#include "GrammarException.h"
-#include "../std/set.hpp"
-#include "../std/pointer.hpp"
-#include <sstream>
-
-namespace grammar {
-
-UnknownGrammar::UnknownGrammar() : initialSymbol(NULL) {
-
-}
-
-UnknownGrammar::UnknownGrammar(const UnknownGrammar& other) :
-		terminalAlphabet(other.terminalAlphabet), nonterminalAlphabet(other.nonterminalAlphabet), rules(other.rules), initialSymbol(NULL) {
-	if(other.initialSymbol)
-		initialSymbol = new alphabet::Symbol(*other.initialSymbol);
-
-}
-
-UnknownGrammar::UnknownGrammar(UnknownGrammar&& other) noexcept :
-		terminalAlphabet(std::move(other.terminalAlphabet)), nonterminalAlphabet(std::move(other.nonterminalAlphabet)), rules(std::move(other.rules)), initialSymbol(NULL) {
-	if(other.initialSymbol)
-		initialSymbol = new alphabet::Symbol(std::move(*other.initialSymbol));
-}
-
-const UnknownGrammar& UnknownGrammar::operator=(const UnknownGrammar& other) {
-	UnknownGrammar tmp(other);
-
-	std::swap(nonterminalAlphabet, tmp.nonterminalAlphabet);
-	std::swap(terminalAlphabet, tmp.terminalAlphabet);
-	std::swap(initialSymbol, tmp.initialSymbol);
-	std::swap(rules, tmp.rules);
-
-	return *this;
-}
-
-const UnknownGrammar& UnknownGrammar::operator=(UnknownGrammar&& other) noexcept {
-	std::swap(nonterminalAlphabet, other.nonterminalAlphabet);
-	std::swap(terminalAlphabet, other.terminalAlphabet);
-	std::swap(initialSymbol, other.initialSymbol);
-	std::swap(rules, other.rules);
-
-	return *this;
-}
-
-GrammarBase* UnknownGrammar::clone() const {
-	return new UnknownGrammar(*this);
-}
-
-GrammarBase* UnknownGrammar::plunder() && {
-	return new UnknownGrammar(std::move(*this));
-}
-
-bool UnknownGrammar::addTerminalSymbol(const alphabet::Symbol& symbol) {
-	return terminalAlphabet.insert(symbol).second;
-}
-
-bool UnknownGrammar::removeTerminalSymbol(const alphabet::Symbol& symbol) {
-	return terminalAlphabet.insert(symbol).second;
-}
-
-const std::set<alphabet::Symbol>& UnknownGrammar::getTerminalAlphabet() const {
-	return terminalAlphabet;
-}
-
-void UnknownGrammar::setTerminalAlphabet(const std::set<alphabet::Symbol>& alphabet) {
-	terminalAlphabet = alphabet;
-}
-
-bool UnknownGrammar::addNonterminalSymbol(const alphabet::Symbol& symbol) {
-	return nonterminalAlphabet.insert(symbol).second;
-}
-
-bool UnknownGrammar::removeNonterminalSymbol(const alphabet::Symbol& symbol) {
-	return nonterminalAlphabet.insert(symbol).second;
-}
-
-const std::set<alphabet::Symbol>& UnknownGrammar::getNonterminalAlphabet() const {
-	return nonterminalAlphabet;
-}
-
-void UnknownGrammar::setNonterminalAlphabet(const std::set<alphabet::Symbol>& alphabet) {
-	nonterminalAlphabet = alphabet;
-}
-
-void UnknownGrammar::setInitialSymbol(const alphabet::Symbol& symbol) {
-	delete initialSymbol;
-	initialSymbol = new alphabet::Symbol(symbol);
-}
-
-bool UnknownGrammar::hasInitialSymbol() const {
-	return initialSymbol != NULL;
-}
-
-void UnknownGrammar::clearInitialSymbol() {
-	delete initialSymbol;
-	initialSymbol = NULL;
-}
-
-const alphabet::Symbol& UnknownGrammar::getInitialSymbol() const {
-	return *initialSymbol;
-}
-
-int UnknownGrammar::addRule(const UnknownRule& rule) {
-	return rules.insert(rule).second;
-}
-
-int UnknownGrammar::removeRule(const UnknownRule& rule) {
-	return rules.erase(rule);
-}
-
-const std::set<UnknownRule>& UnknownGrammar::getRules() const {
-	return rules;
-}
-
-bool UnknownGrammar::operator==(const ObjectBase& other) const {
-	return other == *this;
-}
-
-bool UnknownGrammar::operator<(const ObjectBase& other) const {
-	return other > *this;
-}
-
-bool UnknownGrammar::operator>(const ObjectBase& other) const {
-	return other < *this;
-}
-
-bool UnknownGrammar::operator==(const UnknownGrammar& other) const {
-	std::pointer<alphabet::Symbol> initialSymbolPointer(initialSymbol);
-	std::pointer<alphabet::Symbol> otherInitialSymbolPointer(other.initialSymbol);
-
-	return terminalAlphabet == other.terminalAlphabet
-		&& nonterminalAlphabet == other.nonterminalAlphabet
-		&& initialSymbolPointer == otherInitialSymbolPointer
-		&& rules == other.rules;
-}
-
-bool UnknownGrammar::operator<(const UnknownGrammar& other) const {
-	std::pointer<alphabet::Symbol> initialSymbolPointer(initialSymbol);
-	std::pointer<alphabet::Symbol> otherInitialSymbolPointer(other.initialSymbol);
-
-	return std::tie(terminalAlphabet, nonterminalAlphabet, initialSymbolPointer, rules) < std::tie(other.terminalAlphabet, other.nonterminalAlphabet, otherInitialSymbolPointer, other.rules);
-}
-
-void UnknownGrammar::operator>>(std::ostream& out) const {
-	std::pointer<alphabet::Symbol> initialSymbolPointer(initialSymbol);
-
-	out << "(UnknownGrammar"
-		<< " nonterminalAlphabet = " << nonterminalAlphabet
-		<< " terminalAlphabet = " << terminalAlphabet
-		<< " initialSymbol = " << initialSymbolPointer
-		<< " rules = " << rules
-		<< ")";
-}
-
-UnknownGrammar::operator std::string () const {
-	std::stringstream ss;
-	ss << *this;
-	return ss.str();
-}
-
-} /* namespace grammar */
diff --git a/alib2data/src/grammar/UnknownGrammar.h b/alib2data/src/grammar/UnknownGrammar.h
deleted file mode 100644
index 9bd94895d2..0000000000
--- a/alib2data/src/grammar/UnknownGrammar.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * UnknownGrammar.h
- *
- *  Created on: Nov 3, 2013
- *      Author: Jan Travnicek
- */
-
-#ifndef UNKNOWN_GRAMMAR_H_
-#define UNKNOWN_GRAMMAR_H_
-
-#include "GrammarBase.h"
-#include "UnknownRule.h"
-#include <set>
-
-namespace grammar {
-
-/**
- * Class representing unknown grammar which was parsed from the XML.
- */
-class UnknownGrammar : public std::acceptor<UnknownGrammar, VisitableGrammarBase, std::acceptor<UnknownGrammar, alib::VisitableObjectBase, GrammarBase> > {
-	std::set<alphabet::Symbol> terminalAlphabet;
-	std::set<alphabet::Symbol> nonterminalAlphabet;
-	std::set<UnknownRule> rules;
-	alphabet::Symbol* initialSymbol;
-public:
-	explicit UnknownGrammar();
-
-	UnknownGrammar(const UnknownGrammar& other);
-	UnknownGrammar(UnknownGrammar&& other) noexcept;
-	const UnknownGrammar& operator=(const UnknownGrammar& other);
-	const UnknownGrammar& operator=(UnknownGrammar&& other) noexcept;
-
-	virtual GrammarBase* clone() const;
-	
-	virtual GrammarBase* plunder() &&;
-
-	bool addTerminalSymbol(const alphabet::Symbol& symbol);
-
-	bool removeTerminalSymbol(const alphabet::Symbol& symbol);
-
-	const std::set<alphabet::Symbol>& getTerminalAlphabet() const;
-
-	void setTerminalAlphabet(const std::set<alphabet::Symbol>& alphabet);
-
-	bool addNonterminalSymbol(const alphabet::Symbol& symbol);
-
-	bool removeNonterminalSymbol(const alphabet::Symbol& symbol);
-
-	const std::set<alphabet::Symbol>& getNonterminalAlphabet() const;
-
-	void setNonterminalAlphabet(const std::set<alphabet::Symbol>& alphabet);
-
-	void setInitialSymbol(const alphabet::Symbol& symbol);
-
-	bool hasInitialSymbol() const;
-
-	void clearInitialSymbol();
-
-	const alphabet::Symbol& getInitialSymbol() const;
-
-	int addRule(const UnknownRule& rule);
-
-	int removeRule(const UnknownRule& rule);
-
-	const std::set<UnknownRule>& getRules() const;
-
-	virtual bool operator <(const alib::ObjectBase& other) const;
-	virtual bool operator ==(const alib::ObjectBase& other) const;
-	virtual bool operator >(const alib::ObjectBase& other) const;
-
-	virtual bool operator==(const UnknownGrammar& other) const;
-
-	virtual bool operator<(const UnknownGrammar& other) const;
-
-	virtual void operator>>(std::ostream& out) const;
-
-	virtual operator std::string () const;
-
-	virtual int selfTypeId() const {
-		return typeId(*this);
-	}
-};
-
-} /* namespace grammar */
-#endif /* UNKNOWN_GRAMMAR_H_ */
diff --git a/alib2data/src/grammar/UnknownRule.cpp b/alib2data/src/grammar/UnknownRule.cpp
deleted file mode 100644
index 07884ca6d8..0000000000
--- a/alib2data/src/grammar/UnknownRule.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * UnknownRule.cpp
- *
- *  Created on: Nov 2, 2013
- *      Author: Martin Zak
- */
-
-#include "UnknownRule.h"
-#include <algorithm>
-#include "../std/vector.hpp"
-
-namespace grammar {
-
-UnknownRule::UnknownRule() {
-}
-
-UnknownRule::UnknownRule(const std::vector<alphabet::Symbol>& leftSide, const std::vector<alphabet::Symbol>& rightSide) :
-		leftSide(leftSide), rightSide(rightSide) {
-}
-
-void grammar::UnknownRule::setLeftHandSide(const std::vector<alphabet::Symbol>& leftSide) {
-	this->leftSide = leftSide;
-}
-
-void grammar::UnknownRule::setRightHandSide(const std::vector<alphabet::Symbol>& rightSide) {
-	this->rightSide = rightSide;
-}
-
-const std::vector<alphabet::Symbol>& grammar::UnknownRule::getLeftHandSide() const {
-	return leftSide;
-}
-
-const std::vector<alphabet::Symbol>& grammar::UnknownRule::getRightHandSide() const {
-	return rightSide;
-}
-
-std::string UnknownRule::toString() const {
-	std::string output;
-	output += "[";
-	for(auto const& symbol : leftSide) {
-		output += " " + (std::string) symbol;
-	}
-	output += " -> ";
-	for(auto const& symbol : rightSide) {
-		output += " " + (std::string) symbol;
-	}
-
-	output += "]";
-	return output;
-}
-
-bool UnknownRule::operator <(const UnknownRule& other) const {
-	if(leftSide < other.leftSide) return true;
-	if(leftSide == other.leftSide && rightSide < other.rightSide) return true;
-	return false;
-}
-
-bool UnknownRule::operator ==(const UnknownRule& other) const {
-	return leftSide == other.leftSide && rightSide == other.rightSide;
-}
-
-bool UnknownRule::operator !=(const UnknownRule& other) const {
-	return !(*this == other);
-}
-
-std::ostream& operator<<(std::ostream& out, const UnknownRule& rule) {
-	out << " leftSide = " << rule.leftSide;
-	out << " rightSide = " << rule.rightSide;
-	return out;
-}
-
-} /* namespace grammar */
diff --git a/alib2data/src/grammar/UnknownRule.h b/alib2data/src/grammar/UnknownRule.h
deleted file mode 100644
index d7e076fdac..0000000000
--- a/alib2data/src/grammar/UnknownRule.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * UnknownRule.h
- *
- *  Created on: Nov 2, 2013
- *      Author: Martin Zak
- */
-
-#ifndef UNKNOWN_RULE_H_
-#define UNKNOWN_RULE_H_
-
-#include <vector>
-#include "../alphabet/Symbol.h"
-
-namespace grammar {
-
-/**
- * Represents rewrite rule (production) of a Grammar.
- */
-class UnknownRule {
-private:
-	std::vector<alphabet::Symbol> leftSide;
-	std::vector<alphabet::Symbol> rightSide;
-public:
-	explicit UnknownRule();
-	explicit UnknownRule(const std::vector<alphabet::Symbol>& leftSide, const std::vector<alphabet::Symbol>& rightSide);
-
-	/**
-	 * Sets left side of the rule.
-	 * @param leftSide vector of symbols to set
-	 */
-	void setLeftHandSide(const std::vector<alphabet::Symbol>& leftSide);
-
-	/**
-	 * Sets right side of the rule.
-	 * @param rightSide vector of symbols to set
-	 */
-	void setRightHandSide(const std::vector<alphabet::Symbol>& rightSide);
-
-	/**
-	 * @return vector of symbols on the left side of the UnknownRule
-	 */
-	const std::vector<alphabet::Symbol>& getLeftHandSide() const;
-
-	/**
-	 * @return vector of symbols on the right side of the UnknownRule
-	 */
-	const std::vector<alphabet::Symbol>& getRightHandSide() const;
-
-	/**
-	 * Checks that UnknownRule contains given symbol.
-	 * @param symbol Symbol to find
-	 * @return true when UnknownRule contains the symbol, false otherwise
-	 */
-	bool containsSymbol(const alphabet::Symbol& symbol) const;
-
-	/**
-	 * Converts rule into human readable string.
-	 * @return string in format [ leftSide -> rightSide ]
-	 */
-	std::string toString() const;
-
-	bool operator <(const UnknownRule& other) const;
-	bool operator ==(const UnknownRule& other) const;
-	bool operator !=(const UnknownRule& other) const;
-
-	friend std::ostream& operator<<(std::ostream&, const UnknownRule&);
-};
-
-} /* namespace grammar */
-
-#endif /* UNKNOWN_RULE_H_ */
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index 9adfbe563b..94c2f437c6 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -25,7 +25,6 @@ class AlibException;
 
 namespace automaton {
 
-class UnknownAutomaton;
 class DFA;
 class NFA;
 class EpsilonNFA;
@@ -46,7 +45,6 @@ class OneTapeDTM;
 
 namespace grammar {
 
-class UnknownGrammar;
 class LeftLG;
 class LeftRG;
 class RightLG;
@@ -119,8 +117,8 @@ namespace alib {
 typedef std::acceptor_base<
 			Void,
 			exception::AlibException,
-			automaton::UnknownAutomaton, automaton::DFA, automaton::NFA, automaton::EpsilonNFA, automaton::CompactNFA, automaton::ExtendedNFA, automaton::DPDA, automaton::SinglePopDPDA, automaton::InputDrivenNPDA, automaton::VisiblyPushdownDPDA, automaton::VisiblyPushdownNPDA, automaton::RealTimeHeightDeterministicDPDA, automaton::RealTimeHeightDeterministicNPDA, automaton::NPDA, automaton::SinglePopNPDA, automaton::OneTapeDTM,
-			grammar::UnknownGrammar, grammar::LeftLG, grammar::LeftRG, grammar::RightLG, grammar::RightRG, grammar::LG, grammar::CFG, grammar::EpsilonFreeCFG, grammar::CNF, grammar::GNF, grammar::CSG, grammar::NonContractingGrammar, grammar::ContextPreservingUnrestrictedGrammar, grammar::UnrestrictedGrammar,
+			automaton::DFA, automaton::NFA, automaton::EpsilonNFA, automaton::CompactNFA, automaton::ExtendedNFA, automaton::DPDA, automaton::SinglePopDPDA, automaton::InputDrivenNPDA, automaton::VisiblyPushdownDPDA, automaton::VisiblyPushdownNPDA, automaton::RealTimeHeightDeterministicDPDA, automaton::RealTimeHeightDeterministicNPDA, automaton::NPDA, automaton::SinglePopNPDA, automaton::OneTapeDTM,
+			grammar::LeftLG, grammar::LeftRG, grammar::RightLG, grammar::RightRG, grammar::LG, grammar::CFG, grammar::EpsilonFreeCFG, grammar::CNF, grammar::GNF, grammar::CSG, grammar::NonContractingGrammar, grammar::ContextPreservingUnrestrictedGrammar, grammar::UnrestrictedGrammar,
 			label::PrimitiveLabel, label::HexavigesimalLabel, label::ObjectLabel, label::LabelSetLabel, label::LabelPairLabel,
 			regexp::UnboundedRegExp, regexp::FormalRegExp,
 			string::Epsilon, string::LinearString, string::CyclicString,
@@ -134,8 +132,8 @@ class ObjectBase :
 			ObjectBase,
 			Void,
 			exception::AlibException,
-			automaton::UnknownAutomaton, automaton::DFA, automaton::NFA, automaton::EpsilonNFA, automaton::CompactNFA, automaton::ExtendedNFA, automaton::DPDA, automaton::SinglePopDPDA, automaton::InputDrivenNPDA, automaton::VisiblyPushdownDPDA, automaton::VisiblyPushdownNPDA, automaton::RealTimeHeightDeterministicDPDA, automaton::RealTimeHeightDeterministicNPDA, automaton::NPDA, automaton::SinglePopNPDA, automaton::OneTapeDTM,
-			grammar::UnknownGrammar, grammar::LeftLG, grammar::LeftRG, grammar::RightLG, grammar::RightRG, grammar::LG, grammar::CFG, grammar::EpsilonFreeCFG, grammar::CNF, grammar::GNF, grammar::CSG, grammar::NonContractingGrammar, grammar::ContextPreservingUnrestrictedGrammar, grammar::UnrestrictedGrammar,
+			automaton::DFA, automaton::NFA, automaton::EpsilonNFA, automaton::CompactNFA, automaton::ExtendedNFA, automaton::DPDA, automaton::SinglePopDPDA, automaton::InputDrivenNPDA, automaton::VisiblyPushdownDPDA, automaton::VisiblyPushdownNPDA, automaton::RealTimeHeightDeterministicDPDA, automaton::RealTimeHeightDeterministicNPDA, automaton::NPDA, automaton::SinglePopNPDA, automaton::OneTapeDTM,
+			grammar::LeftLG, grammar::LeftRG, grammar::RightLG, grammar::RightRG, grammar::LG, grammar::CFG, grammar::EpsilonFreeCFG, grammar::CNF, grammar::GNF, grammar::CSG, grammar::NonContractingGrammar, grammar::ContextPreservingUnrestrictedGrammar, grammar::UnrestrictedGrammar,
 			label::PrimitiveLabel, label::HexavigesimalLabel, label::ObjectLabel, label::LabelSetLabel, label::LabelPairLabel,
 			regexp::UnboundedRegExp, regexp::FormalRegExp,
 			string::Epsilon, string::LinearString, string::CyclicString,
diff --git a/alib2data/test-src/automaton/AutomatonTest.cpp b/alib2data/test-src/automaton/AutomatonTest.cpp
index 4ad0739588..7c1b19b6a0 100644
--- a/alib2data/test-src/automaton/AutomatonTest.cpp
+++ b/alib2data/test-src/automaton/AutomatonTest.cpp
@@ -4,8 +4,6 @@
 #include "sax/SaxParseInterface.h"
 #include "sax/SaxComposeInterface.h"
 
-#include "automaton/UnknownAutomaton.h"
-
 #include "automaton/FSM/DFA.h"
 #include "automaton/FSM/ExtendedNFA.h"
 #include "automaton/PDA/SinglePopDPDA.h"
@@ -36,32 +34,6 @@ void AutomatonTest::setUp() {
 void AutomatonTest::tearDown() {
 }
 
-void AutomatonTest::testXMLParser() {
-	automaton::UnknownAutomaton automaton;
-	automaton.setStates({automaton::State(1), automaton::State(2), automaton::State(3)});
-	automaton.setInputSymbols({alphabet::symbolFrom("a"), alphabet::symbolFrom("b")});
-	automaton.addTransition(automaton::UnknownTransition());
-
-	CPPUNIT_ASSERT( automaton == automaton );
-	{
-		std::list<sax::Token> tokens = alib::DataFactory::toTokens(automaton);
-		std::string tmp;
-		sax::SaxComposeInterface::printMemory(tmp, tokens);
-
-		std::list<sax::Token> tokens2;
-		sax::SaxParseInterface::parseMemory(tmp, tokens2);
-		automaton::UnknownAutomaton automaton2 = alib::DataFactory::fromTokens<automaton::UnknownAutomaton>(tokens2);
-
-		CPPUNIT_ASSERT( automaton == automaton2 );
-	}
-	{
-		std::string tmp = alib::DataFactory::toString(automaton);
-		automaton::Automaton automaton2 = alib::DataFactory::fromString<automaton::Automaton>(tmp);
-
-		CPPUNIT_ASSERT( automaton == automaton2.getData() );
-	}
-}
-
 void AutomatonTest::testDFAParser() {
 	automaton::DFA automaton(automaton::State(1));
 
diff --git a/alib2data/test-src/automaton/AutomatonTest.h b/alib2data/test-src/automaton/AutomatonTest.h
index 87d1ce8104..5bdc5c7eca 100644
--- a/alib2data/test-src/automaton/AutomatonTest.h
+++ b/alib2data/test-src/automaton/AutomatonTest.h
@@ -6,7 +6,6 @@
 class AutomatonTest : public CppUnit::TestFixture
 {
   CPPUNIT_TEST_SUITE( AutomatonTest );
-  CPPUNIT_TEST( testXMLParser );
   CPPUNIT_TEST( testDFAParser );
   CPPUNIT_TEST( FSMStringParserTest );
   CPPUNIT_TEST( SinglePopDPDATransitions );
@@ -20,7 +19,6 @@ public:
   void setUp();
   void tearDown();
 
-  void testXMLParser();
   void testDFAParser();
   void FSMStringParserTest();
   void SinglePopDPDATransitions();
diff --git a/alib2data/test-src/grammar/GrammarTest.cpp b/alib2data/test-src/grammar/GrammarTest.cpp
index 786b972cf4..14381991b1 100644
--- a/alib2data/test-src/grammar/GrammarTest.cpp
+++ b/alib2data/test-src/grammar/GrammarTest.cpp
@@ -4,8 +4,6 @@
 #include "sax/SaxParseInterface.h"
 #include "sax/SaxComposeInterface.h"
 
-#include "grammar/UnknownGrammar.h"
-
 #include "grammar/Unrestricted/UnrestrictedGrammar.h"
 #include "grammar/GrammarFromXMLParser.h"
 #include "grammar/GrammarToXMLComposer.h"
@@ -27,32 +25,6 @@ void GrammarTest::setUp() {
 void GrammarTest::tearDown() {
 }
 
-void GrammarTest::testXMLParser() {
-	grammar::UnknownGrammar grammar;
-	grammar.setNonterminalAlphabet({alphabet::symbolFrom(1), alphabet::symbolFrom(2), alphabet::symbolFrom(3)});
-	grammar.setTerminalAlphabet({alphabet::symbolFrom("a"), alphabet::symbolFrom("b")});
-	grammar.addRule(grammar::UnknownRule());
-
-	CPPUNIT_ASSERT( grammar == grammar );
-	{
-		std::list<sax::Token> tokens = alib::DataFactory::toTokens(grammar);
-		std::string tmp;
-		sax::SaxComposeInterface::printMemory(tmp, tokens);
-
-		std::list<sax::Token> tokens2;
-		sax::SaxParseInterface::parseMemory(tmp, tokens2);
-		grammar::UnknownGrammar grammar2 = alib::DataFactory::fromTokens<grammar::UnknownGrammar>(tokens2);
-
-		CPPUNIT_ASSERT( grammar == grammar2 );
-	}
-	{
-		std::string tmp = alib::DataFactory::toString(grammar);
-		grammar::Grammar grammar2 = alib::DataFactory::fromString<grammar::Grammar>(tmp);
-
-		CPPUNIT_ASSERT( grammar == grammar2.getData() );
-	}
-}
-
 void GrammarTest::testUnrestrictedParser() {
 	grammar::UnrestrictedGrammar grammar(alphabet::symbolFrom(1));
 
@@ -366,46 +338,3 @@ void GrammarTest::testContextSensitiveParser() {
 	}
 }
 
-void GrammarTest::testStringParser() {
-	{
-	}
-	{
-		std::string input = 	"({0, 1, 2, 3},\n"
-					" {a, b},\n"
-					" {0 -> #E | a 1,\n"
-					"  1 -> #E | b 2,\n"
-					"  2 -> #E | a 3,\n"
-					"  3 -> a | b},\n"
-					" S)\n";
-		std::stringstream inputs(input);
-
-		grammar::GrammarFromStringParser parser(inputs);
-		grammar::Grammar grammar = parser.parseValue();
-
-		std::string input2 = 	"({0, 1, 2, 3},\n"
-					" {a, b},\n"
-					" {0 -> a 1,\n"
-					"  0 -> #E,\n"
-					"  1 -> #E | b 2,\n"
-					"  2 -> a 3 | #E,\n"
-					"  3 -> a | b | a},\n"
-					" S)\n";
-		std::stringstream inputs2(input2);
-
-		grammar::GrammarFromStringParser parser2(inputs2);
-		grammar::Grammar grammar2 = parser2.parseValue();
-
-		CPPUNIT_ASSERT( grammar == grammar2 );
-
-		grammar::GrammarToStringComposer composer;
-		std::string output = composer.compose(grammar);
-		std::stringstream outputs(output);
-
-		CPPUNIT_ASSERT( input == output );
-
-		grammar::GrammarFromStringParser parser3(outputs);
-		grammar::Grammar grammar3 = parser3.parseValue();
-
-		CPPUNIT_ASSERT( grammar == grammar3 );
-	}
-}
diff --git a/alib2data/test-src/grammar/GrammarTest.h b/alib2data/test-src/grammar/GrammarTest.h
index 07406e95f1..4a386d2ceb 100644
--- a/alib2data/test-src/grammar/GrammarTest.h
+++ b/alib2data/test-src/grammar/GrammarTest.h
@@ -6,24 +6,20 @@
 class GrammarTest : public CppUnit::TestFixture
 {
 	CPPUNIT_TEST_SUITE( GrammarTest );
-	CPPUNIT_TEST( testXMLParser );
 	CPPUNIT_TEST( testUnrestrictedParser );
 	CPPUNIT_TEST( testContextSensitiveParser );
 	CPPUNIT_TEST( testContextFreeParser );
 	CPPUNIT_TEST( testRegularParser );
-	CPPUNIT_TEST( testStringParser );
 	CPPUNIT_TEST_SUITE_END();
 
 public:
 	void setUp();
 	void tearDown();
 
-	void testXMLParser();
 	void testUnrestrictedParser();
 	void testContextSensitiveParser();
 	void testContextFreeParser();
 	void testRegularParser();
-	void testStringParser();
 };
 
 #endif	// GRAMMAR_TEST_H_
diff --git a/astat2/src/AutomataStat.cpp b/astat2/src/AutomataStat.cpp
index ffd031a1b6..2e3a16599d 100644
--- a/astat2/src/AutomataStat.cpp
+++ b/astat2/src/AutomataStat.cpp
@@ -172,10 +172,6 @@ void AutomataStat::stat(const automaton::DFA& automaton, const Settings& setting
 	}
 }
 
-void AutomataStat::Visit(void*, const automaton::UnknownAutomaton&) const {
-	throw exception::AlibException("Unsupported automaton type UnknownAutomaton");
-}
-
 void AutomataStat::Visit(void*, const automaton::EpsilonNFA&) const {
 	throw exception::AlibException("Unsupported automaton type EpsilonNFA");
 }
diff --git a/astat2/src/AutomataStat.h b/astat2/src/AutomataStat.h
index 00ce306279..29bd64bb8c 100644
--- a/astat2/src/AutomataStat.h
+++ b/astat2/src/AutomataStat.h
@@ -25,7 +25,6 @@ public:
 	static void stat(const automaton::DFA& automaton, const Settings& settings);
 
 private:
-	void Visit(void*, const automaton::UnknownAutomaton& automaton) const;
 	void Visit(void*, const automaton::EpsilonNFA& automaton) const;
 	void Visit(void*, const automaton::NFA& automaton) const;
 	void Visit(void*, const automaton::DFA& automaton) const;
-- 
GitLab