Skip to content
Snippets Groups Projects
Commit 0a51a6cb authored by Jan Trávníček's avatar Jan Trávníček
Browse files

rename InputSymbols to InputAlphabet and similairly

parent 77787424
No related branches found
No related tags found
No related merge requests found
Showing
with 79 additions and 98 deletions
...@@ -59,7 +59,7 @@ automaton::ExtendedNFA ToRegExpStateElimination::eliminateState(const automaton: ...@@ -59,7 +59,7 @@ automaton::ExtendedNFA ToRegExpStateElimination::eliminateState(const automaton:
automaton::ExtendedNFA newAutomaton(extendedAutomaton.getInitialState()); // sure that q is neither initial nor final (follows from step 2 - extending ExtendedNFA) automaton::ExtendedNFA newAutomaton(extendedAutomaton.getInitialState()); // sure that q is neither initial nor final (follows from step 2 - extending ExtendedNFA)
newAutomaton.setStates(extendedAutomaton.getStates()); newAutomaton.setStates(extendedAutomaton.getStates());
newAutomaton.removeState(q); // preserve all states but q (the one to eliminate) newAutomaton.removeState(q); // preserve all states but q (the one to eliminate)
newAutomaton.setInputSymbols(extendedAutomaton.getInputAlphabet()); newAutomaton.setInputAlphabet(extendedAutomaton.getInputAlphabet());
newAutomaton.setFinalStates(extendedAutomaton.getFinalStates()); newAutomaton.setFinalStates(extendedAutomaton.getFinalStates());
   
for(const auto& p: newAutomaton.getStates()) for(const auto& p: newAutomaton.getStates())
......
...@@ -19,13 +19,13 @@ automaton::DPDA Determinize::determinize(const automaton::InputDrivenNPDA& nfa) ...@@ -19,13 +19,13 @@ automaton::DPDA Determinize::determinize(const automaton::InputDrivenNPDA& nfa)
// 1, 4 // 1, 4
automaton::State initialState(createDFAState({nfa.getInitialState()})); automaton::State initialState(createDFAState({nfa.getInitialState()}));
automaton::DPDA res(initialState, nfa.getInitialSymbol()); automaton::DPDA res(initialState, nfa.getInitialSymbol());
res.setInputSymbols(nfa.getInputAlphabet()); res.setInputAlphabet(nfa.getInputAlphabet());
res.setStackSymbols(nfa.getStackAlphabet()); res.setStackAlphabet(nfa.getStackAlphabet());
// 2 // 2
std::deque<automaton::State> todo; std::deque<automaton::State> todo;
todo.push_back(initialState); todo.push_back(initialState);
do { do {
// 3a, c // 3a, c
automaton::State state = todo.front(); automaton::State state = todo.front();
...@@ -52,7 +52,7 @@ automaton::DPDA Determinize::determinize(const automaton::InputDrivenNPDA& nfa) ...@@ -52,7 +52,7 @@ automaton::DPDA Determinize::determinize(const automaton::InputDrivenNPDA& nfa)
if(!existed) todo.push_back(dfaState); if(!existed) todo.push_back(dfaState);
} }
} while(!todo.empty()); } while(!todo.empty());
// 5 // 5
for (const auto& dfaState : res.getStates()) { for (const auto& dfaState : res.getStates()) {
std::set<automaton::State> nfaStates = recreateNFAStates(dfaState); std::set<automaton::State> nfaStates = recreateNFAStates(dfaState);
...@@ -60,7 +60,7 @@ automaton::DPDA Determinize::determinize(const automaton::InputDrivenNPDA& nfa) ...@@ -60,7 +60,7 @@ automaton::DPDA Determinize::determinize(const automaton::InputDrivenNPDA& nfa)
res.addFinalState(dfaState); res.addFinalState(dfaState);
} }
} }
return res; return res;
} }
   
......
...@@ -20,12 +20,12 @@ automaton::DFA Determinize::determinize(const automaton::MultiInitialStateNFA& n ...@@ -20,12 +20,12 @@ automaton::DFA Determinize::determinize(const automaton::MultiInitialStateNFA& n
// 1, 4 // 1, 4
automaton::State initialState(createDFAState(nfa.getInitialStates())); automaton::State initialState(createDFAState(nfa.getInitialStates()));
automaton::DFA res(initialState); automaton::DFA res(initialState);
res.setInputSymbols(nfa.getInputAlphabet()); res.setInputAlphabet(nfa.getInputAlphabet());
// 2 // 2
std::deque<automaton::State> todo; std::deque<automaton::State> todo;
todo.push_back(initialState); todo.push_back(initialState);
do { do {
// 3a, c // 3a, c
automaton::State state = todo.front(); automaton::State state = todo.front();
...@@ -51,7 +51,7 @@ automaton::DFA Determinize::determinize(const automaton::MultiInitialStateNFA& n ...@@ -51,7 +51,7 @@ automaton::DFA Determinize::determinize(const automaton::MultiInitialStateNFA& n
if(!existed) todo.push_back(dfaState); if(!existed) todo.push_back(dfaState);
} }
} while(!todo.empty()); } while(!todo.empty());
// 5 // 5
for (const auto& dfaState : res.getStates()) { for (const auto& dfaState : res.getStates()) {
std::set<automaton::State> nfaStates = recreateNFAStates(dfaState); std::set<automaton::State> nfaStates = recreateNFAStates(dfaState);
...@@ -59,7 +59,7 @@ automaton::DFA Determinize::determinize(const automaton::MultiInitialStateNFA& n ...@@ -59,7 +59,7 @@ automaton::DFA Determinize::determinize(const automaton::MultiInitialStateNFA& n
res.addFinalState(dfaState); res.addFinalState(dfaState);
} }
} }
return res; return res;
} }
   
...@@ -67,12 +67,12 @@ automaton::DFA Determinize::determinize(const automaton::NFA& nfa) { ...@@ -67,12 +67,12 @@ automaton::DFA Determinize::determinize(const automaton::NFA& nfa) {
// 1, 4 // 1, 4
automaton::State initialState(createDFAState({nfa.getInitialState()})); automaton::State initialState(createDFAState({nfa.getInitialState()}));
automaton::DFA res(initialState); automaton::DFA res(initialState);
res.setInputSymbols(nfa.getInputAlphabet()); res.setInputAlphabet(nfa.getInputAlphabet());
// 2 // 2
std::deque<automaton::State> todo; std::deque<automaton::State> todo;
todo.push_back(initialState); todo.push_back(initialState);
do { do {
// 3a, c // 3a, c
automaton::State state = todo.front(); automaton::State state = todo.front();
...@@ -98,7 +98,7 @@ automaton::DFA Determinize::determinize(const automaton::NFA& nfa) { ...@@ -98,7 +98,7 @@ automaton::DFA Determinize::determinize(const automaton::NFA& nfa) {
if(!existed) todo.push_back(dfaState); if(!existed) todo.push_back(dfaState);
} }
} while(!todo.empty()); } while(!todo.empty());
// 5 // 5
for (const auto& dfaState : res.getStates()) { for (const auto& dfaState : res.getStates()) {
std::set<automaton::State> nfaStates = recreateNFAStates(dfaState); std::set<automaton::State> nfaStates = recreateNFAStates(dfaState);
...@@ -106,7 +106,7 @@ automaton::DFA Determinize::determinize(const automaton::NFA& nfa) { ...@@ -106,7 +106,7 @@ automaton::DFA Determinize::determinize(const automaton::NFA& nfa) {
res.addFinalState(dfaState); res.addFinalState(dfaState);
} }
} }
return res; return res;
} }
   
......
...@@ -24,7 +24,7 @@ void addRetTransition(const automaton::State& from, const std::variant<string::E ...@@ -24,7 +24,7 @@ void addRetTransition(const automaton::State& from, const std::variant<string::E
deterministic.addState(from); deterministic.addState(from);
deterministic.addState(to); deterministic.addState(to);
deterministic.addStackSymbol(dvpdaSymbol); deterministic.addStackSymbol(dvpdaSymbol);
deterministic.addReturnTransition(from, input, dvpdaSymbol, to); deterministic.addReturnTransition(from, input, dvpdaSymbol, to);
} }
   
...@@ -156,7 +156,7 @@ void local(const automaton::State& state, const std::variant<string::Epsilon, al ...@@ -156,7 +156,7 @@ void local(const automaton::State& state, const std::variant<string::Epsilon, al
} }
} }
} }
addLocalTransition(state, input, automaton::State(packToStateLabel(std::move(S1))), deterministic); addLocalTransition(state, input, automaton::State(packToStateLabel(std::move(S1))), deterministic);
} }
   
...@@ -198,7 +198,7 @@ automaton::RealTimeHeightDeterministicDPDA Determinize::determinize(const automa ...@@ -198,7 +198,7 @@ automaton::RealTimeHeightDeterministicDPDA Determinize::determinize(const automa
label::Label initialLabel = packToStateLabel(createIdentity(retrieveLabels(n.getInitialStates()))); label::Label initialLabel = packToStateLabel(createIdentity(retrieveLabels(n.getInitialStates())));
   
automaton::RealTimeHeightDeterministicDPDA d(automaton::State(initialLabel), n.getBottomOfTheStackSymbol()); automaton::RealTimeHeightDeterministicDPDA d(automaton::State(initialLabel), n.getBottomOfTheStackSymbol());
d.setInputSymbols(n.getInputAlphabet()); d.setInputAlphabet(n.getInputAlphabet());
   
for(;;) { for(;;) {
std::set<std::pair<automaton::State, alphabet::Symbol>> stateSymbols = existsDirtyStateSymbol(d, n); std::set<std::pair<automaton::State, alphabet::Symbol>> stateSymbols = existsDirtyStateSymbol(d, n);
...@@ -243,7 +243,7 @@ automaton::RealTimeHeightDeterministicDPDA Determinize::determinize(const automa ...@@ -243,7 +243,7 @@ automaton::RealTimeHeightDeterministicDPDA Determinize::determinize(const automa
d.addFinalState(state); d.addFinalState(state);
} }
} }
return d; return d;
} }
   
......
...@@ -23,7 +23,7 @@ void addRetTransition(const automaton::State& from, const alphabet::Symbol& inpu ...@@ -23,7 +23,7 @@ void addRetTransition(const automaton::State& from, const alphabet::Symbol& inpu
deterministic.addState(from); deterministic.addState(from);
deterministic.addState(to); deterministic.addState(to);
deterministic.addStackSymbol(dvpdaSymbol); deterministic.addStackSymbol(dvpdaSymbol);
deterministic.addReturnTransition(from, input, dvpdaSymbol, to); deterministic.addReturnTransition(from, input, dvpdaSymbol, to);
} }
   
...@@ -155,18 +155,18 @@ void local(const automaton::State& state, const alphabet::Symbol& input, const a ...@@ -155,18 +155,18 @@ void local(const automaton::State& state, const alphabet::Symbol& input, const a
} }
} }
} }
addLocalTransition(state, input, automaton::State(packToStateLabel(std::move(S1))), deterministic); addLocalTransition(state, input, automaton::State(packToStateLabel(std::move(S1))), deterministic);
} }
   
automaton::VisiblyPushdownDPDA Determinize::determinize(const automaton::VisiblyPushdownNPDA& n) { automaton::VisiblyPushdownDPDA Determinize::determinize(const automaton::VisiblyPushdownNPDA& n) {
label::Label initialLabel = packToStateLabel(createIdentity(retrieveLabels(n.getInitialStates()))); label::Label initialLabel = packToStateLabel(createIdentity(retrieveLabels(n.getInitialStates())));
automaton::VisiblyPushdownDPDA d(automaton::State(initialLabel), n.getBottomOfTheStackSymbol()); automaton::VisiblyPushdownDPDA d(automaton::State(initialLabel), n.getBottomOfTheStackSymbol());
d.setCallInputSymbols(n.getCallInputAlphabet()); d.setCallInputAlphabet(n.getCallInputAlphabet());
d.setLocalInputSymbols(n.getLocalInputAlphabet()); d.setLocalInputAlphabet(n.getLocalInputAlphabet());
d.setReturnInputSymbols(n.getReturnInputAlphabet()); d.setReturnInputAlphabet(n.getReturnInputAlphabet());
for(;;) { for(;;) {
std::set<std::pair<automaton::State, alphabet::Symbol>> stateSymbols = existsDirtyStateSymbol(d, n); std::set<std::pair<automaton::State, alphabet::Symbol>> stateSymbols = existsDirtyStateSymbol(d, n);
std::set<automaton::State> states = existsDirtyState(d, n); std::set<automaton::State> states = existsDirtyState(d, n);
...@@ -201,7 +201,7 @@ automaton::VisiblyPushdownDPDA Determinize::determinize(const automaton::Visibly ...@@ -201,7 +201,7 @@ automaton::VisiblyPushdownDPDA Determinize::determinize(const automaton::Visibly
d.addFinalState(state); d.addFinalState(state);
} }
} }
return d; return d;
} }
   
......
...@@ -31,11 +31,8 @@ automaton::NFA EpsilonRemoverIncoming::remove(const automaton::NFA& origFSM) ...@@ -31,11 +31,8 @@ automaton::NFA EpsilonRemoverIncoming::remove(const automaton::NFA& origFSM)
automaton::NFA EpsilonRemoverIncoming::remove( const automaton::EpsilonNFA & origFSM ) { automaton::NFA EpsilonRemoverIncoming::remove( const automaton::EpsilonNFA & origFSM ) {
automaton::NFA fsm(origFSM.getInitialState()); automaton::NFA fsm(origFSM.getInitialState());
   
for( const auto & state : origFSM.getStates() ) fsm.setStates( origFSM.getStates() );
fsm.addState( state ); fsm.setInputAlphabet( origFSM.getInputAlphabet() );
for( const auto & symbol : origFSM.getInputAlphabet() )
fsm.addInputSymbol( symbol );
   
/** /**
* Step 1 from Melichar 2.41 * Step 1 from Melichar 2.41
......
...@@ -30,15 +30,9 @@ automaton::NFA EpsilonRemoverOutgoing::remove(const automaton::NFA& origFSM) ...@@ -30,15 +30,9 @@ automaton::NFA EpsilonRemoverOutgoing::remove(const automaton::NFA& origFSM)
   
automaton::MultiInitialStateNFA EpsilonRemoverOutgoing::remove( const automaton::EpsilonNFA & origFSM ) { automaton::MultiInitialStateNFA EpsilonRemoverOutgoing::remove( const automaton::EpsilonNFA & origFSM ) {
automaton::MultiInitialStateNFA fsm; automaton::MultiInitialStateNFA fsm;
fsm.setStates( origFSM.getStates() );
for( const auto & state : origFSM.getStates() ) fsm.setFinalStates( origFSM.getFinalStates() );
fsm.addState( state ); fsm.setInputAlphabet( origFSM.getInputAlphabet() );
for( const auto & state : origFSM.getFinalStates() )
fsm.addFinalState( state );
for( const auto & symbol : origFSM.getInputAlphabet() )
fsm.addInputSymbol( symbol );
   
/** /**
* Step 1 from Melichar 2.41 * Step 1 from Melichar 2.41
......
...@@ -33,7 +33,7 @@ automaton::Automaton Minimize::minimize(const automaton::Automaton& automaton) { ...@@ -33,7 +33,7 @@ automaton::Automaton Minimize::minimize(const automaton::Automaton& automaton) {
automaton::DFA Minimize::minimize(const automaton::DFA& dfa) { automaton::DFA Minimize::minimize(const automaton::DFA& dfa) {
if(dfa.getFinalStates().size() == 0) { if(dfa.getFinalStates().size() == 0) {
automaton::DFA result(automaton::State(0)); automaton::DFA result(automaton::State(0));
result.setInputSymbols(dfa.getInputAlphabet()); result.setInputAlphabet(dfa.getInputAlphabet());
return result; return result;
} }
   
...@@ -42,7 +42,7 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) { ...@@ -42,7 +42,7 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) {
for(std::set<automaton::State>::const_iterator iter = dfa.getStates().begin(); iter != dfa.getStates().end(); iter++) { for(std::set<automaton::State>::const_iterator iter = dfa.getStates().begin(); iter != dfa.getStates().end(); iter++) {
refactor.insert(std::pair<automaton::State, std::map<alphabet::Symbol, automaton::State> >(*iter, std::map<alphabet::Symbol, automaton::State>())); refactor.insert(std::pair<automaton::State, std::map<alphabet::Symbol, automaton::State> >(*iter, std::map<alphabet::Symbol, automaton::State>()));
} }
for(std::map<std::pair<automaton::State, alphabet::Symbol>, automaton::State>::const_iterator iter = dfa.getTransitions().begin(); iter != dfa.getTransitions().end(); iter++) { for(std::map<std::pair<automaton::State, alphabet::Symbol>, automaton::State>::const_iterator iter = dfa.getTransitions().begin(); iter != dfa.getTransitions().end(); iter++) {
refactor[iter->first.first].insert(std::pair<alphabet::Symbol, automaton::State>(iter->first.second, iter->second)); refactor[iter->first.first].insert(std::pair<alphabet::Symbol, automaton::State>(iter->first.second, iter->second));
} }
...@@ -52,7 +52,7 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) { ...@@ -52,7 +52,7 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) {
   
std::map<automaton::State, automaton::State> toEquvivalentStates2; std::map<automaton::State, automaton::State> toEquvivalentStates2;
std::map<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> > minimizedTransitionFunction2; std::map<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> > minimizedTransitionFunction2;
for(auto iter = dfa.getStates().begin(); iter != dfa.getStates().end(); iter++) { for(auto iter = dfa.getStates().begin(); iter != dfa.getStates().end(); iter++) {
if(dfa.getFinalStates().count(*iter) == 0) { // not a final state if(dfa.getFinalStates().count(*iter) == 0) { // not a final state
toEquvivalentStates2.insert(std::pair<automaton::State, automaton::State>(*iter, automaton::State(0))); toEquvivalentStates2.insert(std::pair<automaton::State, automaton::State>(*iter, automaton::State(0)));
...@@ -68,22 +68,22 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) { ...@@ -68,22 +68,22 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) {
for(auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++) { for(auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++) {
transitionFunction.insert(std::pair<alphabet::Symbol, automaton::State>(iter2->first, toEquvivalentStates2.find(iter2->second)->second)); transitionFunction.insert(std::pair<alphabet::Symbol, automaton::State>(iter2->first, toEquvivalentStates2.find(iter2->second)->second));
} }
std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > > key(from, transitionFunction); std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > > key(from, transitionFunction);
if(minimizedTransitionFunction2.find(key) == minimizedTransitionFunction2.end()) { if(minimizedTransitionFunction2.find(key) == minimizedTransitionFunction2.end()) {
minimizedTransitionFunction2.insert(std::pair<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> >(key, std::set<automaton::State>())); minimizedTransitionFunction2.insert(std::pair<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> >(key, std::set<automaton::State>()));
} }
minimizedTransitionFunction2[key].insert(iter->first); minimizedTransitionFunction2[key].insert(iter->first);
} }
do { do {
toEquvivalentStates1 = toEquvivalentStates2; toEquvivalentStates1 = toEquvivalentStates2;
minimizedTransitionFunction1 = minimizedTransitionFunction2; minimizedTransitionFunction1 = minimizedTransitionFunction2;
   
toEquvivalentStates2.clear(); toEquvivalentStates2.clear();
minimizedTransitionFunction2.clear(); minimizedTransitionFunction2.clear();
int number = 0; int number = 0;
for(auto iter = minimizedTransitionFunction1.begin(); iter != minimizedTransitionFunction1.end(); iter++) { for(auto iter = minimizedTransitionFunction1.begin(); iter != minimizedTransitionFunction1.end(); iter++) {
for(auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++) { for(auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++) {
...@@ -95,19 +95,18 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) { ...@@ -95,19 +95,18 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) {
for(auto iter = refactor.begin(); iter != refactor.end(); iter++) { for(auto iter = refactor.begin(); iter != refactor.end(); iter++) {
automaton::State from = toEquvivalentStates2.find(iter->first)->second; automaton::State from = toEquvivalentStates2.find(iter->first)->second;
std::set<std::pair<alphabet::Symbol, automaton::State> > transitionFunction; std::set<std::pair<alphabet::Symbol, automaton::State> > transitionFunction;
for(auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++) { for(auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++) {
transitionFunction.insert(std::pair<alphabet::Symbol, automaton::State>(iter2->first, toEquvivalentStates2.find(iter2->second)->second)); transitionFunction.insert(std::pair<alphabet::Symbol, automaton::State>(iter2->first, toEquvivalentStates2.find(iter2->second)->second));
} }
std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > > key(from, transitionFunction); std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > > key(from, transitionFunction);
if(minimizedTransitionFunction2.find(key) == minimizedTransitionFunction2.end()) { if(minimizedTransitionFunction2.find(key) == minimizedTransitionFunction2.end()) {
minimizedTransitionFunction2.insert(std::pair<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> >(key, std::set<automaton::State>())); minimizedTransitionFunction2.insert(std::pair<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> >(key, std::set<automaton::State>()));
} }
   
minimizedTransitionFunction2[key].insert(iter->first); minimizedTransitionFunction2[key].insert(iter->first);
} }
   
} while(minimizedTransitionFunction1.size() != minimizedTransitionFunction2.size()); } while(minimizedTransitionFunction1.size() != minimizedTransitionFunction2.size());
...@@ -122,23 +121,21 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) { ...@@ -122,23 +121,21 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) {
   
automaton::DFA result(*initialState); automaton::DFA result(*initialState);
   
for(auto iter = dfa.getInputAlphabet().begin(); iter != dfa.getInputAlphabet().end(); iter++) { result.setInputAlphabet(dfa.getInputAlphabet());
result.addInputSymbol(*iter);
}
for(auto iter = minimizedTransitionFunction2.begin(); iter != minimizedTransitionFunction2.end(); iter++) { for(auto iter = minimizedTransitionFunction2.begin(); iter != minimizedTransitionFunction2.end(); iter++) {
result.addState(iter->first.first); result.addState(iter->first.first);
if(dfa.getFinalStates().find(*(iter->second.begin())) != dfa.getFinalStates().end()) { if(dfa.getFinalStates().find(*(iter->second.begin())) != dfa.getFinalStates().end()) {
result.addFinalState(iter->first.first); result.addFinalState(iter->first.first);
} }
} }
for(auto iter = minimizedTransitionFunction2.begin(); iter != minimizedTransitionFunction2.end(); iter++) { for(auto iter = minimizedTransitionFunction2.begin(); iter != minimizedTransitionFunction2.end(); iter++) {
for(auto iter2 = iter->first.second.begin(); iter2 != iter->first.second.end(); iter2++) { for(auto iter2 = iter->first.second.begin(); iter2 != iter->first.second.end(); iter2++) {
result.addTransition(iter->first.first, iter2->first, iter2->second); result.addTransition(iter->first.first, iter2->first, iter2->second);
} }
} }
return result; return result;
} }
   
......
...@@ -61,7 +61,7 @@ automaton::DFA Normalize::normalize(const automaton::DFA& fsm) { ...@@ -61,7 +61,7 @@ automaton::DFA Normalize::normalize(const automaton::DFA& fsm) {
   
automaton::DFA result(automaton::State(normalizationData.find(fsm.getInitialState())->second)); automaton::DFA result(automaton::State(normalizationData.find(fsm.getInitialState())->second));
   
result.setInputSymbols(fsm.getInputAlphabet()); result.setInputAlphabet(fsm.getInputAlphabet());
   
for(auto iter = fsm.getStates().begin(); iter != fsm.getStates().end(); iter++) { for(auto iter = fsm.getStates().begin(); iter != fsm.getStates().end(); iter++) {
result.addState(automaton::State(normalizationData.find(*iter)->second)); result.addState(automaton::State(normalizationData.find(*iter)->second));
...@@ -130,8 +130,7 @@ automaton::DPDA Normalize::normalize(const automaton::DPDA& pda) { ...@@ -130,8 +130,7 @@ automaton::DPDA Normalize::normalize(const automaton::DPDA& pda) {
} }
   
automaton::DPDA result(automaton::State(normalizationDataState.find(pda.getInitialState())->second), alphabet::symbolFrom(normalizationDataSymbol.find(pda.getInitialSymbol())->second)); automaton::DPDA result(automaton::State(normalizationDataState.find(pda.getInitialState())->second), alphabet::symbolFrom(normalizationDataSymbol.find(pda.getInitialSymbol())->second));
result.setInputAlphabet(pda.getInputAlphabet());
result.setInputSymbols(pda.getInputAlphabet());
   
for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) { for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
result.addStackSymbol(alphabet::symbolFrom(normalizationDataSymbol.find(*iter)->second)); result.addStackSymbol(alphabet::symbolFrom(normalizationDataSymbol.find(*iter)->second));
......
...@@ -42,7 +42,7 @@ automaton::DFA Rename::rename(const automaton::DFA& fsm) { ...@@ -42,7 +42,7 @@ automaton::DFA Rename::rename(const automaton::DFA& fsm) {
   
automaton::DFA result(automaton::State(renamingData.find(fsm.getInitialState())->second)); automaton::DFA result(automaton::State(renamingData.find(fsm.getInitialState())->second));
   
result.setInputSymbols(fsm.getInputAlphabet()); result.setInputAlphabet(fsm.getInputAlphabet());
   
for(auto iter = fsm.getStates().begin(); iter != fsm.getStates().end(); iter++) { for(auto iter = fsm.getStates().begin(); iter != fsm.getStates().end(); iter++) {
result.addState(automaton::State(renamingData.find(*iter)->second)); result.addState(automaton::State(renamingData.find(*iter)->second));
...@@ -76,7 +76,7 @@ automaton::DPDA Rename::rename(const automaton::DPDA& pda) { ...@@ -76,7 +76,7 @@ automaton::DPDA Rename::rename(const automaton::DPDA& pda) {
   
automaton::DPDA result(automaton::State(renamingDataState.find(pda.getInitialState())->second), alphabet::symbolFrom(renamingDataSymbol.find(pda.getInitialSymbol())->second)); automaton::DPDA result(automaton::State(renamingDataState.find(pda.getInitialState())->second), alphabet::symbolFrom(renamingDataSymbol.find(pda.getInitialSymbol())->second));
   
result.setInputSymbols(pda.getInputAlphabet()); result.setInputAlphabet(pda.getInputAlphabet());
   
for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) { for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
result.addStackSymbol(alphabet::symbolFrom(renamingDataSymbol.find(*iter)->second)); result.addStackSymbol(alphabet::symbolFrom(renamingDataSymbol.find(*iter)->second));
......
...@@ -41,11 +41,11 @@ automaton::NFA SingleInitialState::convert(const automaton::MultiInitialStateNFA ...@@ -41,11 +41,11 @@ automaton::NFA SingleInitialState::convert(const automaton::MultiInitialStateNFA
automaton::State q0(label::Label(label::LabelSetLabel(std::move(labelSet)))); automaton::State q0(label::Label(label::LabelSetLabel(std::move(labelSet))));
   
automaton::NFA res(q0); automaton::NFA res(q0);
res.setInputSymbols(automaton.getInputAlphabet()); res.setInputAlphabet(automaton.getInputAlphabet());
for(const auto& q : automaton.getStates()) for(const auto& q : automaton.getStates())
res.addState(q); res.addState(q);
   
// step 2 // step 2
for(const auto& q : automaton.getInitialStates()) { for(const auto& q : automaton.getInitialStates()) {
for(const auto& kv: automaton.getTransitionsFromState(q)) { for(const auto& kv: automaton.getTransitionsFromState(q)) {
for(const auto& to : kv.second) { for(const auto& to : kv.second) {
......
...@@ -34,12 +34,13 @@ automaton::RealTimeHeightDeterministicDPDA PDAToRHPDA::convert( const automaton: ...@@ -34,12 +34,13 @@ automaton::RealTimeHeightDeterministicDPDA PDAToRHPDA::convert( const automaton:
   
RealTimeHeightDeterministicDPDA res(q0, alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK } ); RealTimeHeightDeterministicDPDA res(q0, alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK } );
   
res.setInputSymbols(pda.getInputAlphabet()); res.setInputAlphabet(pda.getInputAlphabet());
res.setStates(pda.getStates()); for(const auto& state : pda.getStates())
res.addState(state);
res.setFinalStates(pda.getFinalStates()); res.setFinalStates(pda.getFinalStates());
std::set<alphabet::Symbol> stackSymbols = pda.getStackAlphabet(); std::set<alphabet::Symbol> stackSymbols = pda.getStackAlphabet();
stackSymbols.insert( alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK } ); stackSymbols.insert( alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK } );
res.setStackSymbols(stackSymbols); res.setStackAlphabet(stackSymbols);
   
res.addCallTransition(q0, pda.getInitialState(), pda.getInitialSymbol()); res.addCallTransition(q0, pda.getInitialState(), pda.getInitialSymbol());
   
...@@ -95,12 +96,12 @@ automaton::RealTimeHeightDeterministicDPDA PDAToRHPDA::convert( const automaton: ...@@ -95,12 +96,12 @@ automaton::RealTimeHeightDeterministicDPDA PDAToRHPDA::convert( const automaton:
automaton::RealTimeHeightDeterministicNPDA PDAToRHPDA::convert( const automaton::NPDA & pda ) { automaton::RealTimeHeightDeterministicNPDA PDAToRHPDA::convert( const automaton::NPDA & pda ) {
RealTimeHeightDeterministicNPDA res(alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK } ); RealTimeHeightDeterministicNPDA res(alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK } );
   
res.setInputSymbols(pda.getInputAlphabet()); res.setInputAlphabet(pda.getInputAlphabet());
res.setStates(pda.getStates()); res.setStates(pda.getStates());
res.setFinalStates(pda.getFinalStates()); res.setFinalStates(pda.getFinalStates());
std::set<alphabet::Symbol> stackSymbols = pda.getStackAlphabet(); std::set<alphabet::Symbol> stackSymbols = pda.getStackAlphabet();
stackSymbols.insert( alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK } ); stackSymbols.insert( alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK } );
res.setStackSymbols(stackSymbols); res.setStackAlphabet(stackSymbols);
   
automaton::State q0 = automaton::createUniqueState(automaton::State("q0"), res.getStates()); automaton::State q0 = automaton::createUniqueState(automaton::State("q0"), res.getStates());
res.addState(q0); res.addState(q0);
......
...@@ -96,9 +96,8 @@ automaton::DPDA RHPDAToPDA::convert( const automaton::RealTimeHeightDeterministi ...@@ -96,9 +96,8 @@ automaton::DPDA RHPDAToPDA::convert( const automaton::RealTimeHeightDeterministi
   
automaton::DPDA res(toState, pushes[0]); automaton::DPDA res(toState, pushes[0]);
   
res.setInputSymbols(pda.getInputAlphabet()); res.setInputAlphabet(pda.getInputAlphabet());
res.setStackAlphabet(pda.getStackAlphabet());
res.setStackSymbols(pda.getStackAlphabet());
res.removeStackSymbol(alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK }); res.removeStackSymbol(alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK });
   
for(const auto& st : readingTransitions) { for(const auto& st : readingTransitions) {
...@@ -217,9 +216,8 @@ automaton::NPDA RHPDAToPDA::convert( const automaton::RealTimeHeightDeterministi ...@@ -217,9 +216,8 @@ automaton::NPDA RHPDAToPDA::convert( const automaton::RealTimeHeightDeterministi
   
automaton::NPDA res(toState, pushes[0]); automaton::NPDA res(toState, pushes[0]);
   
res.setInputSymbols(pda.getInputAlphabet()); res.setInputAlphabet(pda.getInputAlphabet());
res.setStackAlphabet(pda.getStackAlphabet());
res.setStackSymbols(pda.getStackAlphabet());
   
for(const auto& st : readingTransitions) { for(const auto& st : readingTransitions) {
for(const auto& to : st.second) { for(const auto& to : st.second) {
......
...@@ -31,9 +31,8 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::DFA& automa ...@@ -31,9 +31,8 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::DFA& automa
   
res.setStates(automaton.getStates()); res.setStates(automaton.getStates());
res.addFinalState(automaton.getInitialState()); res.addFinalState(automaton.getInitialState());
for(const auto& q : automaton.getFinalStates()) res.setInitialStates( automaton.getFinalStates() );
res.addInitialState(q); res.setInputAlphabet(automaton.getInputAlphabet());
res.setInputSymbols(automaton.getInputAlphabet());
   
for(const auto& t : automaton.getTransitions()) for(const auto& t : automaton.getTransitions())
res.addTransition(t.second, t.first.second, t.first.first); res.addTransition(t.second, t.first.second, t.first.first);
...@@ -47,9 +46,8 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::NFA& automa ...@@ -47,9 +46,8 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::NFA& automa
   
res.setStates(automaton.getStates()); res.setStates(automaton.getStates());
res.addFinalState(automaton.getInitialState()); res.addFinalState(automaton.getInitialState());
for(const auto& q : automaton.getFinalStates()) res.setInitialStates( automaton.getFinalStates() );
res.addInitialState(q); res.setInputAlphabet(automaton.getInputAlphabet());
res.setInputSymbols(automaton.getInputAlphabet());
   
for(const auto& t : automaton.getTransitions()) for(const auto& t : automaton.getTransitions())
for(const auto& q : t.second) for(const auto& q : t.second)
...@@ -63,11 +61,9 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::MultiInitia ...@@ -63,11 +61,9 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::MultiInitia
automaton::MultiInitialStateNFA res; automaton::MultiInitialStateNFA res;
   
res.setStates(automaton.getStates()); res.setStates(automaton.getStates());
for(const auto& q : automaton.getInitialStates()) res.setFinalStates(automaton.getInitialStates());
res.addFinalState(q); res.setInitialStates( automaton.getFinalStates() );
for(const auto& q : automaton.getFinalStates()) res.setInputAlphabet(automaton.getInputAlphabet());
res.addInitialState(q);
res.setInputSymbols(automaton.getInputAlphabet());
   
for(const auto& t : automaton.getTransitions()) for(const auto& t : automaton.getTransitions())
for(const auto& q : t.second) for(const auto& q : t.second)
......
...@@ -39,7 +39,7 @@ automaton::NFA ToAutomaton::convert(const grammar::LeftRG& grammar) ...@@ -39,7 +39,7 @@ automaton::NFA ToAutomaton::convert(const grammar::LeftRG& grammar)
const automaton::State q0 = automaton::createUniqueState(automaton::State("q0"), states); const automaton::State q0 = automaton::createUniqueState(automaton::State("q0"), states);
states.insert(q0); states.insert(q0);
automaton::NFA automaton(q0); automaton::NFA automaton(q0);
automaton.setInputSymbols(grammar.getTerminalAlphabet()); automaton.setInputAlphabet(grammar.getTerminalAlphabet());
automaton.setStates(states); automaton.setStates(states);
   
// step 3 // step 3
...@@ -88,7 +88,7 @@ automaton::NFA ToAutomaton::convert(const grammar::RightRG& grammar) ...@@ -88,7 +88,7 @@ automaton::NFA ToAutomaton::convert(const grammar::RightRG& grammar)
automaton::NFA automaton(stateMap.find(grammar.getInitialSymbol())->second); automaton::NFA automaton(stateMap.find(grammar.getInitialSymbol())->second);
automaton.setStates(states); automaton.setStates(states);
   
automaton.setInputSymbols(grammar.getTerminalAlphabet()); automaton.setInputAlphabet(grammar.getTerminalAlphabet());
   
// step 3 // step 3
for(const auto& rule : grammar.getRules()) for(const auto& rule : grammar.getRules())
......
...@@ -90,7 +90,7 @@ automaton::NFA ToAutomatonDerivation::convert(const T& regexp) ...@@ -90,7 +90,7 @@ automaton::NFA ToAutomatonDerivation::convert(const T& regexp)
automaton.addState(r.second); automaton.addState(r.second);
} }
   
automaton.setInputSymbols(regexp.getAlphabet()); automaton.setInputAlphabet(regexp.getAlphabet());
   
for(const auto& r : Q) for(const auto& r : Q)
{ {
......
...@@ -34,8 +34,7 @@ automaton::NFA ToAutomatonGlushkov::convert(const regexp::UnboundedRegExp& regex ...@@ -34,8 +34,7 @@ automaton::NFA ToAutomatonGlushkov::convert(const regexp::UnboundedRegExp& regex
automaton::NFA automaton( q0 ); automaton::NFA automaton( q0 );
   
// step 1 // step 1
for( auto const& symbol : regexp.getAlphabet( ) ) automaton.setInputAlphabet(regexp.getAlphabet());
automaton.addInputSymbol( symbol );
   
// steps 2, 3, 4 // steps 2, 3, 4
std::set<regexp::GlushkovPair> pairs; std::set<regexp::GlushkovPair> pairs;
......
...@@ -26,7 +26,7 @@ automaton::EpsilonNFA ToAutomatonThompson::convert(const T& regexp) ...@@ -26,7 +26,7 @@ automaton::EpsilonNFA ToAutomatonThompson::convert(const T& regexp)
std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> out(automaton::EpsilonNFA(automaton::State(0)), 1, nullptr, nullptr); std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> out(automaton::EpsilonNFA(automaton::State(0)), 1, nullptr, nullptr);
   
automaton::EpsilonNFA& automaton = std::get<0>(out); automaton::EpsilonNFA& automaton = std::get<0>(out);
automaton.setInputSymbols(regexp.getAlphabet()); automaton.setInputAlphabet(regexp.getAlphabet());
   
regexp.getRegExp().Accept((void*) &out, ToAutomatonThompson::TO_AUTOMATON_THOMPSON); regexp.getRegExp().Accept((void*) &out, ToAutomatonThompson::TO_AUTOMATON_THOMPSON);
   
......
...@@ -26,7 +26,7 @@ automaton::Automaton ExactMatchingAutomaton::construct(const string::String& pat ...@@ -26,7 +26,7 @@ automaton::Automaton ExactMatchingAutomaton::construct(const string::String& pat
   
automaton::NFA ExactMatchingAutomaton::construct(const string::LinearString& pattern) { automaton::NFA ExactMatchingAutomaton::construct(const string::LinearString& pattern) {
automaton::NFA res(automaton::State(0)); automaton::NFA res(automaton::State(0));
res.setInputSymbols(pattern.getAlphabet()); res.setInputAlphabet(pattern.getAlphabet());
for(const alphabet::Symbol& symbol : pattern.getAlphabet()) { for(const alphabet::Symbol& symbol : pattern.getAlphabet()) {
res.addTransition(automaton::State(0), symbol, automaton::State(0)); res.addTransition(automaton::State(0), symbol, automaton::State(0));
} }
......
...@@ -31,7 +31,7 @@ void FSMSingleInitialStateTest::testSingleInitialState() { ...@@ -31,7 +31,7 @@ void FSMSingleInitialStateTest::testSingleInitialState() {
automaton1.setStates({q0, q1, q2, q3}); automaton1.setStates({q0, q1, q2, q3});
automaton1.setInitialStates({q0, q1, q2}); automaton1.setInitialStates({q0, q1, q2});
automaton1.setFinalStates({q3}); automaton1.setFinalStates({q3});
automaton1.setInputSymbols({a, b}); automaton1.setInputAlphabet({a, b});
automaton1.addTransition(q0, a, q1); automaton1.addTransition(q0, a, q1);
automaton1.addTransition(q1, b, q2); automaton1.addTransition(q1, b, q2);
automaton1.addTransition(q2, a, q3); automaton1.addTransition(q2, a, q3);
...@@ -41,7 +41,7 @@ void FSMSingleInitialStateTest::testSingleInitialState() { ...@@ -41,7 +41,7 @@ void FSMSingleInitialStateTest::testSingleInitialState() {
automaton::NFA automaton3(q); automaton::NFA automaton3(q);
automaton3.setStates({q, q1, q2, q3}); automaton3.setStates({q, q1, q2, q3});
automaton3.setFinalStates({q3}); automaton3.setFinalStates({q3});
automaton3.setInputSymbols({a, b}); automaton3.setInputAlphabet({a, b});
automaton3.addTransition(q, a, q3); automaton3.addTransition(q, a, q3);
automaton3.addTransition(q, b, q2); automaton3.addTransition(q, b, q2);
automaton3.addTransition(q, a, q1); automaton3.addTransition(q, a, q1);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment