diff --git a/alib2data/src/XmlApi.cpp b/alib2data/src/XmlApi.cpp index efe35c7289be380376c3918762964eb90cd013b7..effa2b099a1921120647d4de29db5fdf3a96cd3a 100644 --- a/alib2data/src/XmlApi.cpp +++ b/alib2data/src/XmlApi.cpp @@ -41,6 +41,26 @@ #include "string/LinearString.h" #include "string/Epsilon.h" +#include "automaton/FSM/EpsilonNFA.h" +#include "automaton/FSM/NFA.h" +#include "automaton/FSM/MultiInitialStateNFA.h" +#include "automaton/FSM/DFA.h" +#include "automaton/FSM/CompactNFA.h" +#include "automaton/FSM/ExtendedNFA.h" +#include "automaton/PDA/DPDA.h" +#include "automaton/PDA/SinglePopDPDA.h" +#include "automaton/PDA/InputDrivenDPDA.h" +#include "automaton/PDA/InputDrivenNPDA.h" +#include "automaton/PDA/VisiblyPushdownDPDA.h" +#include "automaton/PDA/VisiblyPushdownNPDA.h" +#include "automaton/PDA/RealTimeHeightDeterministicDPDA.h" +#include "automaton/PDA/RealTimeHeightDeterministicNPDA.h" +#include "automaton/PDA/NPDA.h" +#include "automaton/PDA/SinglePopNPDA.h" +#include "automaton/TM/OneTapeDTM.h" +#include "automaton/TA/DFTA.h" +#include "automaton/TA/NFTA.h" + namespace alib { const label::LabelFromXMLParser FromXMLParsers::labelParser; diff --git a/alib2data/src/automaton/Automaton.cpp b/alib2data/src/automaton/Automaton.cpp index 69604ea7132d3e12535fa9b6bbcb83f93d48b94e..005b22ebb7e354ad3aa524f9852ea6c82edd83c0 100644 --- a/alib2data/src/automaton/Automaton.cpp +++ b/alib2data/src/automaton/Automaton.cpp @@ -7,7 +7,6 @@ #include "Automaton.h" #include "../label/NextLabel.h" -#include "../label/Label.h" #include <climits> #include "AutomatonException.h" diff --git a/alib2data/src/automaton/Automaton.h b/alib2data/src/automaton/Automaton.h index c34cde4f5692ed82faa620031e817d2fda5154ba..e48e3c5a559c534f7253bf72470ef5e5670826a7 100644 --- a/alib2data/src/automaton/Automaton.h +++ b/alib2data/src/automaton/Automaton.h @@ -13,14 +13,24 @@ #include "common/State.h" #include <set> -#include <string> namespace automaton { /** * Wrapper around automata. */ -typedef alib::wrapper<AutomatonBase> Automaton; +class Automaton : public alib::wrapper<AutomatonBase> { +public: + explicit Automaton(AutomatonBase* data) : alib::wrapper<AutomatonBase>(data) { + } + + explicit Automaton(const AutomatonBase& data) : alib::wrapper<AutomatonBase>(data.clone()) { + } + + explicit Automaton(AutomatonBase&& data) : alib::wrapper<AutomatonBase>(std::move(data).plunder()) { + } + +}; State createUniqueState(State base, const std::set<State>& other); diff --git a/alib2data/src/automaton/AutomatonClasses.h b/alib2data/src/automaton/AutomatonClasses.h new file mode 100644 index 0000000000000000000000000000000000000000..064b6d8ba75160b5d62ed9c06cc6bc8bdc9cdd1e --- /dev/null +++ b/alib2data/src/automaton/AutomatonClasses.h @@ -0,0 +1,31 @@ +/* + * AutomatonClasses.h + * + * Created on: Jun 19, 2014 + * Author: Jan Travnicek + */ + +#ifndef AUTOMATON_CLASSES_H_ +#define AUTOMATON_CLASSES_H_ + +#include "FSM/EpsilonNFA.h" +#include "FSM/NFA.h" +#include "FSM/MultiInitialStateNFA.h" +#include "FSM/DFA.h" +#include "FSM/CompactNFA.h" +#include "FSM/ExtendedNFA.h" +#include "PDA/DPDA.h" +#include "PDA/SinglePopDPDA.h" +#include "PDA/InputDrivenDPDA.h" +#include "PDA/InputDrivenNPDA.h" +#include "PDA/VisiblyPushdownDPDA.h" +#include "PDA/VisiblyPushdownNPDA.h" +#include "PDA/RealTimeHeightDeterministicDPDA.h" +#include "PDA/RealTimeHeightDeterministicNPDA.h" +#include "PDA/NPDA.h" +#include "PDA/SinglePopNPDA.h" +#include "TM/OneTapeDTM.h" +#include "TA/DFTA.h" +#include "TA/NFTA.h" + +#endif /* AUTOMATON_CLASSES_H_ */ diff --git a/alib2data/src/automaton/AutomatonFeatures.h b/alib2data/src/automaton/AutomatonFeatures.h index c695337eae98efae92a39553023f799c042df075..2981c4bf32689b7b6debe2e8b81e951a267e0cc3 100644 --- a/alib2data/src/automaton/AutomatonFeatures.h +++ b/alib2data/src/automaton/AutomatonFeatures.h @@ -32,6 +32,28 @@ enum class FEATURES { NFTA }; +class Automaton; + +class EpsilonNFA; +class NFA; +class MultiInitialStateNFA; +class DFA; +class CompactNFA; +class ExtendedNFA; +class DPDA; +class SinglePopDPDA; +class InputDrivenDPDA; +class InputDrivenNPDA; +class VisiblyPushdownDPDA; +class VisiblyPushdownNPDA; +class RealTimeHeightDeterministicDPDA; +class RealTimeHeightDeterministicNPDA; +class NPDA; +class SinglePopNPDA; +class OneTapeDTM; +class DFTA; +class NFTA; + } /* namespace automaton */ #endif /* AUTOMATON_FEATURES_H_ */ diff --git a/alib2data/src/automaton/AutomatonFromStringLexer.cpp b/alib2data/src/automaton/AutomatonFromStringLexer.cpp index 974028c2b0853aec6f3ee5609d95a94977f0b495..083032151b74eefa97a5507bd7f7024c8847212f 100644 --- a/alib2data/src/automaton/AutomatonFromStringLexer.cpp +++ b/alib2data/src/automaton/AutomatonFromStringLexer.cpp @@ -6,7 +6,6 @@ */ #include "AutomatonFromStringLexer.h" -#include <istream> namespace automaton { diff --git a/alib2data/src/automaton/AutomatonFromStringLexer.h b/alib2data/src/automaton/AutomatonFromStringLexer.h index 32f14d4bb20b554c95082c15809de4c5ef18e90c..a4416fab65387c93d4f6c3964ff3788c4bf982b4 100644 --- a/alib2data/src/automaton/AutomatonFromStringLexer.h +++ b/alib2data/src/automaton/AutomatonFromStringLexer.h @@ -9,7 +9,7 @@ #define AUTOMATON_FROM_STRING_LEXER_H_ #include <string> -#include <sstream> +#include <istream> namespace automaton { diff --git a/alib2data/src/automaton/AutomatonFromStringParser.h b/alib2data/src/automaton/AutomatonFromStringParser.h index a58e5a913b02bb534ebfa34bbb77faa00e1b97f0..7a6fbb5a5868d9bd235ae24a39803b4160d1da93 100644 --- a/alib2data/src/automaton/AutomatonFromStringParser.h +++ b/alib2data/src/automaton/AutomatonFromStringParser.h @@ -10,7 +10,6 @@ #include "AutomatonFromStringLexer.h" -#include "Automaton.h" #include "AutomatonFeatures.h" #include "common/State.h" diff --git a/alib2data/src/automaton/AutomatonFromXMLParser.cpp b/alib2data/src/automaton/AutomatonFromXMLParser.cpp index 7ccea32d8751557e88313b20dce11df5ea8bce38..6005709e06dde7c2af7ab81f757ee2ecd24ad4a5 100644 --- a/alib2data/src/automaton/AutomatonFromXMLParser.cpp +++ b/alib2data/src/automaton/AutomatonFromXMLParser.cpp @@ -6,13 +6,12 @@ */ #include "AutomatonFromXMLParser.h" - #include "../sax/ParserException.h" -#include "../alphabet/BlankSymbol.h" -#include "../label/Label.h" - #include "../XmlApi.hpp" +#include "Automaton.h" +#include "AutomatonClasses.h" + namespace automaton { Automaton AutomatonFromXMLParser::parseAutomaton(std::deque<sax::Token>::iterator& input) const { diff --git a/alib2data/src/automaton/AutomatonFromXMLParser.h b/alib2data/src/automaton/AutomatonFromXMLParser.h index ab036ce2659678855a65c6843094219de8bb9ed2..f625ba9d9bdbaf5d8f888726ae7fa65cc75f90f9 100644 --- a/alib2data/src/automaton/AutomatonFromXMLParser.h +++ b/alib2data/src/automaton/AutomatonFromXMLParser.h @@ -9,32 +9,14 @@ #define AUTOMATON_FROM_XML_PARSER_H_ #include "../sax/FromXMLParserHelper.h" -#include "Automaton.h" -#include "AutomatonFeatures.h" -#include "FSM/EpsilonNFA.h" -#include "FSM/NFA.h" -#include "FSM/MultiInitialStateNFA.h" -#include "FSM/DFA.h" -#include "FSM/CompactNFA.h" -#include "FSM/ExtendedNFA.h" -#include "PDA/DPDA.h" -#include "PDA/SinglePopDPDA.h" -#include "PDA/InputDrivenDPDA.h" -#include "PDA/InputDrivenNPDA.h" -#include "PDA/VisiblyPushdownDPDA.h" -#include "PDA/VisiblyPushdownNPDA.h" -#include "PDA/RealTimeHeightDeterministicDPDA.h" -#include "PDA/RealTimeHeightDeterministicNPDA.h" -#include "PDA/NPDA.h" -#include "PDA/SinglePopNPDA.h" -#include "TM/OneTapeDTM.h" -#include "TA/DFTA.h" -#include "TA/NFTA.h" - -#include <deque> #include <set> +#include <vector> #include <variant> -#include "../sax/Token.h" +#include "AutomatonFeatures.h" + +#include "common/State.h" +#include "common/Shift.h" +#include "../regexp/RegExp.h" namespace alib { diff --git a/alib2data/src/automaton/AutomatonToStringComposer.cpp b/alib2data/src/automaton/AutomatonToStringComposer.cpp index 2023d4cd6e6cd41c7ef4fef397be8b907a07b634..a662bcb6d3033e0957d20cfc9dc836f3588a0e52 100644 --- a/alib2data/src/automaton/AutomatonToStringComposer.cpp +++ b/alib2data/src/automaton/AutomatonToStringComposer.cpp @@ -7,6 +7,10 @@ #include "AutomatonToStringComposer.h" #include "../exception/AlibException.h" +#include "FSM/DFA.h" +#include "FSM/NFA.h" +#include "FSM/MultiInitialStateNFA.h" +#include "FSM/EpsilonNFA.h" #include "../StringApi.hpp" diff --git a/alib2data/src/automaton/AutomatonToStringComposer.h b/alib2data/src/automaton/AutomatonToStringComposer.h index ef2199529769b3e6f19b0591380cd996c418df87..2aa049527fae83c12111c6788eda4a3f13b72f95 100644 --- a/alib2data/src/automaton/AutomatonToStringComposer.h +++ b/alib2data/src/automaton/AutomatonToStringComposer.h @@ -10,10 +10,6 @@ #include <ostream> #include "Automaton.h" -#include "FSM/DFA.h" -#include "FSM/NFA.h" -#include "FSM/MultiInitialStateNFA.h" -#include "FSM/EpsilonNFA.h" namespace automaton { diff --git a/alib2data/src/automaton/AutomatonToXMLComposer.cpp b/alib2data/src/automaton/AutomatonToXMLComposer.cpp index 2030103543c1f452782e70167c49fa3116770ca6..af9978167d421fa80ad974f312d1a0e3c78ae124 100644 --- a/alib2data/src/automaton/AutomatonToXMLComposer.cpp +++ b/alib2data/src/automaton/AutomatonToXMLComposer.cpp @@ -6,10 +6,11 @@ */ #include "AutomatonToXMLComposer.h" -#include "../alphabet/BlankSymbol.h" #include "../XmlApi.hpp" +#include "AutomatonClasses.h" + namespace automaton { void AutomatonToXMLComposer::composeStates(std::deque<sax::Token>& out, const std::set<State>& states) const { diff --git a/alib2data/src/automaton/AutomatonToXMLComposer.h b/alib2data/src/automaton/AutomatonToXMLComposer.h index a3f94727dcf9cc4919711291e8facf0ecdc18e68..39ce199a2ba9eb7d51f395e245ed1ef65e5b96f9 100644 --- a/alib2data/src/automaton/AutomatonToXMLComposer.h +++ b/alib2data/src/automaton/AutomatonToXMLComposer.h @@ -10,25 +10,15 @@ #include <string> #include <deque> +#include <vector> +#include <set> +#include <variant> #include "Automaton.h" -#include "FSM/EpsilonNFA.h" -#include "FSM/MultiInitialStateNFA.h" -#include "FSM/NFA.h" -#include "FSM/DFA.h" -#include "FSM/CompactNFA.h" -#include "FSM/ExtendedNFA.h" -#include "PDA/InputDrivenDPDA.h" -#include "PDA/InputDrivenNPDA.h" -#include "PDA/VisiblyPushdownDPDA.h" -#include "PDA/VisiblyPushdownNPDA.h" -#include "PDA/RealTimeHeightDeterministicDPDA.h" -#include "PDA/RealTimeHeightDeterministicNPDA.h" -#include "PDA/NPDA.h" -#include "PDA/SinglePopNPDA.h" -#include "TM/OneTapeDTM.h" -#include "TA/NFTA.h" #include "../sax/Token.h" +#include "common/Shift.h" +#include "../regexp/RegExp.h" + namespace alib { template<typename T> diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h index bcc057c1fc29f8ec08966ce88a56ba389b56b238..85cbe3c850e732fc4fdf9115bdae5da0a6bf9b8c 100644 --- a/alib2data/src/object/ObjectBase.h +++ b/alib2data/src/object/ObjectBase.h @@ -17,30 +17,7 @@ #include "ObjectFeatures.h" #include "../exception/ExceptionFeatures.h" - -namespace automaton { - -class DFA; -class NFA; -class MultiInitialStateNFA; -class EpsilonNFA; -class CompactNFA; -class ExtendedNFA; -class DPDA; -class SinglePopDPDA; -class InputDrivenDPDA; -class VisiblyPushdownDPDA; -class RealTimeHeightDeterministicDPDA; -class NPDA; -class SinglePopNPDA; -class InputDrivenNPDA; -class VisiblyPushdownNPDA; -class RealTimeHeightDeterministicNPDA; -class OneTapeDTM; -class DFTA; -class NFTA; - -} +#include "../automaton/AutomatonFeatures.h" namespace grammar {