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