diff --git a/alib2/src/automaton/FSM/CompactNFA.h b/alib2/src/automaton/FSM/CompactNFA.h index 8646067567c28b7f0037d3dcfb130d1ad031ac66..601043ce762f42685c40ec3df3b849ddc6e5eea3 100644 --- a/alib2/src/automaton/FSM/CompactNFA.h +++ b/alib2/src/automaton/FSM/CompactNFA.h @@ -9,7 +9,7 @@ #define COMPACT_DFA_H_ #include <map> -#include "../NondeterministicAutomaton.h" +#include "../MultiInitialStateAutomaton.h" #include "../InputAlphabet.h" #include "../State.h" #include "../../string/String.h" @@ -20,7 +20,7 @@ namespace automaton { * Represents Finite Automaton. * Can store nondeterministic finite automaton without epsilon transitions. */ -class CompactNFA : public NondeterministicAutomaton, public InputAlphabet { +class CompactNFA : public MultiInitialStateAutomaton, public InputAlphabet { protected: std::map<std::pair<State, string::String>, std::set<State> > transitions; public: diff --git a/alib2/src/automaton/FSM/DFA.cpp b/alib2/src/automaton/FSM/DFA.cpp index 1f9c0b1abbb8c3ad3064a1158394dcd6e9909bd4..340672ad4317da27d49cd2f91ca63cdab0ba8873 100644 --- a/alib2/src/automaton/FSM/DFA.cpp +++ b/alib2/src/automaton/FSM/DFA.cpp @@ -11,7 +11,7 @@ namespace automaton { -DFA::DFA(const State& initialState) : DeterministicAutomaton(initialState) { +DFA::DFA(const State& initialState) : SingleInitialStateAutomaton(initialState) { } diff --git a/alib2/src/automaton/FSM/DFA.h b/alib2/src/automaton/FSM/DFA.h index c78d931f45804492064152e14ef2f6f48337387c..0e235078c6423359334a1e3f8e49710820479d02 100644 --- a/alib2/src/automaton/FSM/DFA.h +++ b/alib2/src/automaton/FSM/DFA.h @@ -9,7 +9,7 @@ #define DFA_H_ #include <map> -#include "../DeterministicAutomaton.h" +#include "../SingleInitialStateAutomaton.h" #include "../InputAlphabet.h" #include "../State.h" #include "../../alphabet/Symbol.h" @@ -20,7 +20,7 @@ namespace automaton { * Represents Finite Automaton. * Can store nondeterministic finite automaton without epsilon transitions. */ -class DFA : public DeterministicAutomaton, public InputAlphabet { +class DFA : public SingleInitialStateAutomaton, public InputAlphabet { protected: std::map<std::pair<State, alphabet::Symbol>, State> transitions; public: diff --git a/alib2/src/automaton/FSM/EpsilonNFA.h b/alib2/src/automaton/FSM/EpsilonNFA.h index 01f667d17787781dec50448cb98465ec966282a3..31463446041836337bfb20f355b951f7485a21e3 100644 --- a/alib2/src/automaton/FSM/EpsilonNFA.h +++ b/alib2/src/automaton/FSM/EpsilonNFA.h @@ -10,7 +10,7 @@ #include <map> #include "../../std/variant.hpp" -#include "../NondeterministicAutomaton.h" +#include "../MultiInitialStateAutomaton.h" #include "../InputAlphabet.h" #include "../State.h" #include "../../alphabet/Symbol.h" @@ -22,7 +22,7 @@ namespace automaton { * Represents Finite Automaton. * Can store nondeterministic finite automaton with epsilon transitions. */ -class EpsilonNFA : public NondeterministicAutomaton, public InputAlphabet { +class EpsilonNFA : public MultiInitialStateAutomaton, public InputAlphabet { protected: std::map<std::pair<State, std::variant<string::Epsilon, alphabet::Symbol> >, std::set<State> > transitions; public: diff --git a/alib2/src/automaton/FSM/ExtendedNFA.h b/alib2/src/automaton/FSM/ExtendedNFA.h index e9cc2712e7d0818458ba36c91401b5ce27c7ffb4..56e9d04829f3f5d4c5f7c779dc4d266d8586943d 100644 --- a/alib2/src/automaton/FSM/ExtendedNFA.h +++ b/alib2/src/automaton/FSM/ExtendedNFA.h @@ -9,7 +9,7 @@ #define EXTENDED_NFA_H_ #include <map> -#include "../NondeterministicAutomaton.h" +#include "../MultiInitialStateAutomaton.h" #include "../InputAlphabet.h" #include "../State.h" #include "../../regexp/RegExp.h" @@ -20,7 +20,7 @@ namespace automaton { * Represents Finite Automaton. * Can store nondeterministic finite automaton without epsilon transitions. */ -class ExtendedNFA : public NondeterministicAutomaton, public InputAlphabet { +class ExtendedNFA : public MultiInitialStateAutomaton, public InputAlphabet { protected: std::map<std::pair<State, regexp::RegExp>, std::set<State> > transitions; public: diff --git a/alib2/src/automaton/FSM/NFA.h b/alib2/src/automaton/FSM/NFA.h index a223709dcd9eaa69f95714207da96a077e668318..47b9b9bd322706f6d19aaeea82c5430572fc425b 100644 --- a/alib2/src/automaton/FSM/NFA.h +++ b/alib2/src/automaton/FSM/NFA.h @@ -9,7 +9,7 @@ #define NFA_H_ #include <map> -#include "../NondeterministicAutomaton.h" +#include "../MultiInitialStateAutomaton.h" #include "../InputAlphabet.h" #include "../State.h" #include "../../alphabet/Symbol.h" @@ -20,7 +20,7 @@ namespace automaton { * Represents Finite Automaton. * Can store nondeterministic finite automaton without epsilon transitions. */ -class NFA : public NondeterministicAutomaton, public InputAlphabet { +class NFA : public MultiInitialStateAutomaton, public InputAlphabet { protected: std::map<std::pair<State, alphabet::Symbol>, std::set<State> > transitions; public: diff --git a/alib2/src/automaton/NondeterministicAutomaton.cpp b/alib2/src/automaton/MultiInitialStateAutomaton.cpp similarity index 71% rename from alib2/src/automaton/NondeterministicAutomaton.cpp rename to alib2/src/automaton/MultiInitialStateAutomaton.cpp index c6a0daf38f21b707d984337677f5cb43a78e028f..c3fc15a366cccb88371d09bc8f9ecc9fc6aa57a7 100644 --- a/alib2/src/automaton/NondeterministicAutomaton.cpp +++ b/alib2/src/automaton/MultiInitialStateAutomaton.cpp @@ -1,11 +1,11 @@ /* - * NondeterministicAutomaton.cpp + * MultiInitialStateAutomaton.cpp * * Created on: Apr 16, 2013 * Author: Jan Travnicek */ -#include "NondeterministicAutomaton.h" +#include "MultiInitialStateAutomaton.h" #include <set> #include <algorithm> @@ -13,7 +13,7 @@ namespace automaton { -bool NondeterministicAutomaton::addInitialState(const State& state) { +bool MultiInitialStateAutomaton::addInitialState(const State& state) { if (states.find(state) == states.end()) { throw AutomatonException("State cannot be set as initial state. It is not present in the automaton."); } @@ -21,7 +21,7 @@ bool NondeterministicAutomaton::addInitialState(const State& state) { return initialStates.insert(state).second; } -void NondeterministicAutomaton::setInitialStates(const std::set<State>& newStates) { +void MultiInitialStateAutomaton::setInitialStates(const std::set<State>& newStates) { std::set<State> removed; std::set_symmetric_difference(initialStates.begin(), initialStates.end(), newStates.begin(), newStates.end(), std::inserter(removed, removed.end())); @@ -37,11 +37,11 @@ void NondeterministicAutomaton::setInitialStates(const std::set<State>& newState } } -bool NondeterministicAutomaton::removeInitialState(const State& state) { +bool MultiInitialStateAutomaton::removeInitialState(const State& state) { return initialStates.erase(state); } -const std::set<State>& NondeterministicAutomaton::getInitialStates() const { +const std::set<State>& MultiInitialStateAutomaton::getInitialStates() const { return initialStates; } diff --git a/alib2/src/automaton/NondeterministicAutomaton.h b/alib2/src/automaton/MultiInitialStateAutomaton.h similarity index 85% rename from alib2/src/automaton/NondeterministicAutomaton.h rename to alib2/src/automaton/MultiInitialStateAutomaton.h index 47517b958f0263b90cf4d573ff25d60d44983f57..8af674112706af9d8e5fbbf61c328cfa209f00b4 100644 --- a/alib2/src/automaton/NondeterministicAutomaton.h +++ b/alib2/src/automaton/MultiInitialStateAutomaton.h @@ -5,8 +5,8 @@ * Author: Jan Travnicek */ -#ifndef NONDETERMINISTIC_AUTOMATON_H_ -#define NONDETERMINISTIC_AUTOMATON_H_ +#ifndef MULTI_INITIAL_STATE_AUTOMATON_H_ +#define MULTI_INITIAL_STATE_AUTOMATON_H_ #include "Automaton.h" #include <set> @@ -17,7 +17,7 @@ namespace automaton { /** * Base class for nondeterministic automata. */ -class NondeterministicAutomaton : public Automaton { +class MultiInitialStateAutomaton : public Automaton { protected: std::set<State> initialStates; public: @@ -52,5 +52,5 @@ public: } /* namespace automaton */ -#endif /* NONDETERMINISTIC_AUTOMATON_H_ */ +#endif /* MULTI_INITIAL_STATE_AUTOMATON_H_ */ diff --git a/alib2/src/automaton/PDA/PDA.h b/alib2/src/automaton/PDA/PDA.h index 472873d97738e396018c1c01b38d744ecc94afe0..b56eb2850b0b7e50d274910bc9491a2d8bfef274 100644 --- a/alib2/src/automaton/PDA/PDA.h +++ b/alib2/src/automaton/PDA/PDA.h @@ -12,7 +12,7 @@ #include <map> #include <vector> #include "../../std/variant.hpp" -#include "../NondeterministicAutomaton.h" +#include "../MultiInitialStateAutomaton.h" #include "../InputAlphabet.h" #include "../State.h" #include "../../alphabet/Symbol.h" @@ -23,7 +23,7 @@ namespace automaton { /** * Push Down Automaton */ -class PDA: public NondeterministicAutomaton, public InputAlphabet { +class PDA: public MultiInitialStateAutomaton, public InputAlphabet { protected: std::set<alphabet::Symbol> stackAlphabet; std::map<std::tuple<State, std::variant<string::Epsilon, alphabet::Symbol>, std::vector<alphabet::Symbol> >, std::set<std::pair<State, std::vector<alphabet::Symbol> > > > transitions; diff --git a/alib2/src/automaton/DeterministicAutomaton.cpp b/alib2/src/automaton/SingleInitialStateAutomaton.cpp similarity index 53% rename from alib2/src/automaton/DeterministicAutomaton.cpp rename to alib2/src/automaton/SingleInitialStateAutomaton.cpp index 2cd693a2199d8fdb6f39ac357f860be071300eae..398fcb3ede111b54fb64368a2b74a05dee11d482 100644 --- a/alib2/src/automaton/DeterministicAutomaton.cpp +++ b/alib2/src/automaton/SingleInitialStateAutomaton.cpp @@ -1,21 +1,21 @@ /* - * DeterministicAutomaton.cpp + * SingleInitialStateAutomaton.cpp * * Created on: Apr 16, 2013 * Author: Jan Travnicek */ -#include "DeterministicAutomaton.h" +#include "SingleInitialStateAutomaton.h" #include "AutomatonException.h" namespace automaton { -DeterministicAutomaton::DeterministicAutomaton(const State& initialState) : initialState(initialState) { +SingleInitialStateAutomaton::SingleInitialStateAutomaton(const State& initialState) : initialState(initialState) { addState(initialState); } -void DeterministicAutomaton::setInitialState(const State& state) { +void SingleInitialStateAutomaton::setInitialState(const State& state) { if (states.find(state) == states.end()) { throw AutomatonException("State cannot be set as initial state. It is not present in the automaton."); } @@ -23,7 +23,7 @@ void DeterministicAutomaton::setInitialState(const State& state) { initialState = state; } -const State& DeterministicAutomaton::getInitialState() const { +const State& SingleInitialStateAutomaton::getInitialState() const { return initialState; } diff --git a/alib2/src/automaton/DeterministicAutomaton.h b/alib2/src/automaton/SingleInitialStateAutomaton.h similarity index 67% rename from alib2/src/automaton/DeterministicAutomaton.h rename to alib2/src/automaton/SingleInitialStateAutomaton.h index 6eebaa481c961fb94df8ac1f3c1dff53732b0d6a..c08b3b456f9460726c03de2aa9da177345cbfb0a 100644 --- a/alib2/src/automaton/DeterministicAutomaton.h +++ b/alib2/src/automaton/SingleInitialStateAutomaton.h @@ -1,12 +1,12 @@ /* - * DeterministicAutomaton.h + * SingleInitialStateAutomaton.h * * Created on: Apr 10, 2013 * Author: Jan Travnicek */ -#ifndef DETERMINISTIC_AUTOMATON_H_ -#define DETERMINISTIC_AUTOMATON_H_ +#ifndef SINGLE_INITIAL_STATE_AUTOMATON_H_ +#define SINGLE_INITIAL_STATE_AUTOMATON_H_ #include "Automaton.h" #include "State.h" @@ -16,11 +16,11 @@ namespace automaton { /** * Base class for deterministic automata. Contains common elements of automata. */ -class DeterministicAutomaton : public Automaton { +class SingleInitialStateAutomaton : public Automaton { protected: State initialState; public: - DeterministicAutomaton(const State& initialState); + SingleInitialStateAutomaton(const State& initialState); /** * Set the initial state. @@ -38,5 +38,5 @@ public: } /* namespace automaton */ -#endif /* DETERMINISTIC_AUTOMATON_H_ */ +#endif /* SINGLE_INITIAL_STATE_AUTOMATON_H_ */ diff --git a/alib2/src/automaton/TM/OneTapeDTM.cpp b/alib2/src/automaton/TM/OneTapeDTM.cpp index d52df57d50eb7abd992d7378a3ea131c9dfdaa3a..66b25334da45e3c03b90824ce8b91419810eeca4 100644 --- a/alib2/src/automaton/TM/OneTapeDTM.cpp +++ b/alib2/src/automaton/TM/OneTapeDTM.cpp @@ -14,7 +14,7 @@ namespace automaton { using namespace std; using namespace alphabet; -OneTapeDTM::OneTapeDTM(const State& initialState, const alphabet::Symbol& blank) : DeterministicAutomaton(initialState), BlankSymbolInputTapeAlphabet(blank) { +OneTapeDTM::OneTapeDTM(const State& initialState, const alphabet::Symbol& blank) : SingleInitialStateAutomaton(initialState), BlankSymbolInputTapeAlphabet(blank) { } bool OneTapeDTM::removeState(const State& state) { diff --git a/alib2/src/automaton/TM/OneTapeDTM.h b/alib2/src/automaton/TM/OneTapeDTM.h index 3403c24ec104eb37d3e8df13cc81c3c05479489d..390e9740002aff116e67a1e1c5bdcc53d7e70d77 100644 --- a/alib2/src/automaton/TM/OneTapeDTM.h +++ b/alib2/src/automaton/TM/OneTapeDTM.h @@ -8,7 +8,7 @@ #ifndef ONE_TAPE_DTM_H_ #define ONE_TAPE_DTM_H_ -#include "../DeterministicAutomaton.h" +#include "../SingleInitialStateAutomaton.h" #include "../BlankSymbolInputTapeAlphabet.h" #include "../Shift.h" @@ -21,7 +21,7 @@ namespace automaton { /** * One tape turing machine */ -class OneTapeDTM : public DeterministicAutomaton, public BlankSymbolInputTapeAlphabet { +class OneTapeDTM : public SingleInitialStateAutomaton, public BlankSymbolInputTapeAlphabet { protected: std::map<std::pair<State, alphabet::Symbol>, std::tuple<State, alphabet::Symbol, Shift> > transitions;