From 1819e4109e8cc84bf16088ce025fae650245f916 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Sat, 17 May 2014 17:22:00 +0200 Subject: [PATCH] Deterministic, nondeterministic -> single, multi initial state --- alib2/src/automaton/FSM/CompactNFA.h | 4 ++-- alib2/src/automaton/FSM/DFA.cpp | 2 +- alib2/src/automaton/FSM/DFA.h | 4 ++-- alib2/src/automaton/FSM/EpsilonNFA.h | 4 ++-- alib2/src/automaton/FSM/ExtendedNFA.h | 4 ++-- alib2/src/automaton/FSM/NFA.h | 4 ++-- ...cAutomaton.cpp => MultiInitialStateAutomaton.cpp} | 12 ++++++------ ...isticAutomaton.h => MultiInitialStateAutomaton.h} | 8 ++++---- alib2/src/automaton/PDA/PDA.h | 4 ++-- ...Automaton.cpp => SingleInitialStateAutomaton.cpp} | 10 +++++----- ...sticAutomaton.h => SingleInitialStateAutomaton.h} | 12 ++++++------ alib2/src/automaton/TM/OneTapeDTM.cpp | 2 +- alib2/src/automaton/TM/OneTapeDTM.h | 4 ++-- 13 files changed, 37 insertions(+), 37 deletions(-) rename alib2/src/automaton/{NondeterministicAutomaton.cpp => MultiInitialStateAutomaton.cpp} (71%) rename alib2/src/automaton/{NondeterministicAutomaton.h => MultiInitialStateAutomaton.h} (85%) rename alib2/src/automaton/{DeterministicAutomaton.cpp => SingleInitialStateAutomaton.cpp} (53%) rename alib2/src/automaton/{DeterministicAutomaton.h => SingleInitialStateAutomaton.h} (67%) diff --git a/alib2/src/automaton/FSM/CompactNFA.h b/alib2/src/automaton/FSM/CompactNFA.h index 8646067567..601043ce76 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 1f9c0b1abb..340672ad43 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 c78d931f45..0e235078c6 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 01f667d177..3146344604 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 e9cc2712e7..56e9d04829 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 a223709dcd..47b9b9bd32 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 c6a0daf38f..c3fc15a366 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 47517b958f..8af6741127 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 472873d977..b56eb2850b 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 2cd693a219..398fcb3ede 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 6eebaa481c..c08b3b456f 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 d52df57d50..66b25334da 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 3403c24ec1..390e974000 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; -- GitLab