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

refactor, rename for all deterministic pdas

parent 9e1efb38
No related branches found
No related tags found
No related merge requests found
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include <automaton/Automaton.h> #include <automaton/Automaton.h>
#include <automaton/FSM/MultiInitialStateNFA.h> #include <automaton/FSM/MultiInitialStateNFA.h>
   
#include "../transform/ReverseFSM.h" #include "../transform/Reverse.h"
#include "../determinize/Determinize.h" #include "../determinize/Determinize.h"
   
namespace automaton { namespace automaton {
...@@ -27,11 +27,11 @@ automaton::Automaton MinimizeBrzozowski::minimize(const automaton::Automaton& au ...@@ -27,11 +27,11 @@ automaton::Automaton MinimizeBrzozowski::minimize(const automaton::Automaton& au
} }
   
automaton::DFA MinimizeBrzozowski::minimize(const automaton::DFA& dfa) { automaton::DFA MinimizeBrzozowski::minimize(const automaton::DFA& dfa) {
return automaton::determinize::Determinize::determinize(automaton::transform::ReverseFSM::convert(automaton::determinize::Determinize::determinize(automaton::transform::ReverseFSM::convert(dfa)))); return automaton::determinize::Determinize::determinize(automaton::transform::Reverse::convert(automaton::determinize::Determinize::determinize(automaton::transform::Reverse::convert(dfa))));
} }
   
automaton::DFA MinimizeBrzozowski::minimize(const automaton::NFA& nfa) { automaton::DFA MinimizeBrzozowski::minimize(const automaton::NFA& nfa) {
return automaton::determinize::Determinize::determinize(automaton::transform::ReverseFSM::convert(automaton::determinize::Determinize::determinize(automaton::transform::ReverseFSM::convert(nfa)))); return automaton::determinize::Determinize::determinize(automaton::transform::Reverse::convert(automaton::determinize::Determinize::determinize(automaton::transform::Reverse::convert(nfa))));
} }
   
void MinimizeBrzozowski::Visit(void*, const automaton::EpsilonNFA&) const { void MinimizeBrzozowski::Visit(void*, const automaton::EpsilonNFA&) const {
......
...@@ -64,7 +64,6 @@ automaton::DPDA Rename::rename(const automaton::DPDA& pda) { ...@@ -64,7 +64,6 @@ automaton::DPDA Rename::rename(const automaton::DPDA& pda) {
std::map<automaton::State, int > renamingDataState; std::map<automaton::State, int > renamingDataState;
int counterSymbol = 0; int counterSymbol = 0;
std::map<alphabet::Symbol, int > renamingDataSymbol; std::map<alphabet::Symbol, int > renamingDataSymbol;
std::deque< automaton::State > processingData;
   
for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) { for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
renamingDataState.insert(std::make_pair(*iter, counterState++)); renamingDataState.insert(std::make_pair(*iter, counterState++));
...@@ -105,6 +104,185 @@ automaton::DPDA Rename::rename(const automaton::DPDA& pda) { ...@@ -105,6 +104,185 @@ automaton::DPDA Rename::rename(const automaton::DPDA& pda) {
return result; return result;
} }
   
automaton::SinglePopDPDA Rename::rename(const automaton::SinglePopDPDA& pda) {
int counterState = 0;
std::map<automaton::State, int > renamingDataState;
int counterSymbol = 0;
std::map<alphabet::Symbol, int > renamingDataSymbol;
for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
renamingDataState.insert(std::make_pair(*iter, counterState++));
}
for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
renamingDataSymbol.insert(std::make_pair(*iter, counterSymbol++));
}
automaton::SinglePopDPDA result(automaton::State(renamingDataState.find(pda.getInitialState())->second), alphabet::symbolFrom(renamingDataSymbol.find(pda.getInitialSymbol())->second));
result.setInputAlphabet(pda.getInputAlphabet());
for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
result.addStackSymbol(alphabet::symbolFrom(renamingDataSymbol.find(*iter)->second));
}
for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
result.addState(automaton::State(renamingDataState.find(*iter)->second));
}
for(auto iter = pda.getFinalStates().begin(); iter != pda.getFinalStates().end(); iter++) {
result.addFinalState(automaton::State(renamingDataState.find(*iter)->second));
}
for(auto iter = pda.getTransitions().begin(); iter != pda.getTransitions().end(); iter++) {
std::vector<alphabet::Symbol> push;
for(const auto& elem : iter->second.second) {
push.push_back(alphabet::symbolFrom(renamingDataSymbol.find(elem)->second));
}
result.addTransition(automaton::State(renamingDataState.find(std::get<0>(iter->first))->second), std::get<1>(iter->first), alphabet::symbolFrom(renamingDataSymbol.find(std::get<2>(iter->first))->second), automaton::State(renamingDataState.find(iter->second.first)->second), push);
}
return result;
}
automaton::InputDrivenDPDA Rename::rename(const automaton::InputDrivenDPDA& pda) {
int counter = 0;
std::map<automaton::State, int > renamingData;
int counterSymbol = 0;
std::map<alphabet::Symbol, int > renamingDataSymbol;
for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
renamingData.insert(std::make_pair(*iter, counter++));
}
for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
renamingDataSymbol.insert(std::make_pair(*iter, counterSymbol++));
}
automaton::InputDrivenDPDA result(automaton::State(renamingData.find(pda.getInitialState())->second), alphabet::symbolFrom(renamingDataSymbol.find(pda.getInitialSymbol())->second));
result.setInputAlphabet(pda.getInputAlphabet());
result.setStackAlphabet(pda.getStackAlphabet());
for(const std::pair<alphabet::Symbol, std::pair<std::vector<alphabet::Symbol>, std::vector<alphabet::Symbol>>> operation : pda.getPushdownStoreOperations()) {
std::vector<alphabet::Symbol> pop;
for(const auto& elem : operation.second.first) {
pop.push_back(alphabet::symbolFrom(renamingDataSymbol.find(elem)->second));
}
std::vector<alphabet::Symbol> push;
for(const auto& elem : operation.second.second) {
push.push_back(alphabet::symbolFrom(renamingDataSymbol.find(elem)->second));
}
result.setPushdownStoreOperation(operation.first, pop, push);
}
for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
result.addState(automaton::State(renamingData.find(*iter)->second));
}
for(auto iter = pda.getFinalStates().begin(); iter != pda.getFinalStates().end(); iter++) {
result.addFinalState(automaton::State(renamingData.find(*iter)->second));
}
for(auto iter = pda.getTransitions().begin(); iter != pda.getTransitions().end(); iter++) {
result.addTransition(automaton::State(renamingData.find(iter->first.first)->second), iter->first.second, automaton::State(renamingData.find(iter->second)->second));
}
return result;
}
automaton::VisiblyPushdownDPDA Rename::rename(const automaton::VisiblyPushdownDPDA& pda) {
int counterState = 0;
std::map<automaton::State, int > renamingDataState;
int counterSymbol = 0;
std::map<alphabet::Symbol, int > renamingDataSymbol;
for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
renamingDataState.insert(std::make_pair(*iter, counterState++));
}
for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
renamingDataSymbol.insert(std::make_pair(*iter, counterSymbol++));
}
automaton::VisiblyPushdownDPDA result(automaton::State(renamingDataState.find(pda.getInitialState())->second), alphabet::symbolFrom(renamingDataSymbol.find(pda.getBottomOfTheStackSymbol())->second));
result.setCallInputAlphabet(pda.getCallInputAlphabet());
result.setLocalInputAlphabet(pda.getLocalInputAlphabet());
result.setReturnInputAlphabet(pda.getReturnInputAlphabet());
for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
result.addStackSymbol(alphabet::symbolFrom(renamingDataSymbol.find(*iter)->second));
}
for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
result.addState(automaton::State(renamingDataState.find(*iter)->second));
}
for(auto iter = pda.getFinalStates().begin(); iter != pda.getFinalStates().end(); iter++) {
result.addFinalState(automaton::State(renamingDataState.find(*iter)->second));
}
for(auto iter = pda.getCallTransitions().begin(); iter != pda.getCallTransitions().end(); iter++) {
result.addCallTransition(automaton::State(renamingDataState.find(iter->first.first)->second), iter->first.second, automaton::State(renamingDataState.find(iter->second.first)->second), alphabet::symbolFrom(renamingDataSymbol.find(iter->second.second)->second));
}
for(auto iter = pda.getLocalTransitions().begin(); iter != pda.getLocalTransitions().end(); iter++) {
result.addLocalTransition(automaton::State(renamingDataState.find(iter->first.first)->second), iter->first.second, automaton::State(renamingDataState.find(iter->second)->second));
}
for(auto iter = pda.getReturnTransitions().begin(); iter != pda.getReturnTransitions().end(); iter++) {
result.addReturnTransition(automaton::State(renamingDataState.find(std::get<0>(iter->first))->second), std::get<1>(iter->first), alphabet::symbolFrom(renamingDataSymbol.find(std::get<2>(iter->first))->second), automaton::State(renamingDataState.find(iter->second)->second));
}
return result;
}
automaton::RealTimeHeightDeterministicDPDA Rename::rename(const automaton::RealTimeHeightDeterministicDPDA& pda) {
int counterState = 0;
std::map<automaton::State, int > renamingDataState;
int counterSymbol = 0;
std::map<alphabet::Symbol, int > renamingDataSymbol;
for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
renamingDataState.insert(std::make_pair(*iter, counterState++));
}
for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
renamingDataSymbol.insert(std::make_pair(*iter, counterSymbol++));
}
automaton::RealTimeHeightDeterministicDPDA result(automaton::State(renamingDataState.find(pda.getInitialState())->second), alphabet::symbolFrom(renamingDataSymbol.find(pda.getBottomOfTheStackSymbol())->second));
result.setInputAlphabet(pda.getInputAlphabet());
for(auto iter = pda.getStackAlphabet().begin(); iter != pda.getStackAlphabet().end(); iter++) {
result.addStackSymbol(alphabet::symbolFrom(renamingDataSymbol.find(*iter)->second));
}
for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) {
result.addState(automaton::State(renamingDataState.find(*iter)->second));
}
for(auto iter = pda.getFinalStates().begin(); iter != pda.getFinalStates().end(); iter++) {
result.addFinalState(automaton::State(renamingDataState.find(*iter)->second));
}
for(auto iter = pda.getCallTransitions().begin(); iter != pda.getCallTransitions().end(); iter++) {
result.addCallTransition(automaton::State(renamingDataState.find(iter->first.first)->second), iter->first.second, automaton::State(renamingDataState.find(iter->second.first)->second), alphabet::symbolFrom(renamingDataSymbol.find(iter->second.second)->second));
}
for(auto iter = pda.getLocalTransitions().begin(); iter != pda.getLocalTransitions().end(); iter++) {
result.addLocalTransition(automaton::State(renamingDataState.find(iter->first.first)->second), iter->first.second, automaton::State(renamingDataState.find(iter->second)->second));
}
for(auto iter = pda.getReturnTransitions().begin(); iter != pda.getReturnTransitions().end(); iter++) {
result.addReturnTransition(automaton::State(renamingDataState.find(std::get<0>(iter->first))->second), std::get<1>(iter->first), alphabet::symbolFrom(renamingDataSymbol.find(std::get<2>(iter->first))->second), automaton::State(renamingDataState.find(iter->second)->second));
}
return result;
}
void Rename::Visit(void*, const automaton::EpsilonNFA&) const { void Rename::Visit(void*, const automaton::EpsilonNFA&) const {
throw exception::AlibException("Unsupported automaton type EpsilonNFA"); throw exception::AlibException("Unsupported automaton type EpsilonNFA");
} }
...@@ -135,28 +313,32 @@ void Rename::Visit(void* data, const automaton::DPDA& automaton) const { ...@@ -135,28 +313,32 @@ void Rename::Visit(void* data, const automaton::DPDA& automaton) const {
out = new automaton::Automaton(this->rename(automaton)); out = new automaton::Automaton(this->rename(automaton));
} }
   
void Rename::Visit(void*, const automaton::SinglePopDPDA&) const { void Rename::Visit(void* data, const automaton::SinglePopDPDA& automaton) const {
throw exception::AlibException("Unsupported automaton type SinglePopDPDA"); automaton::Automaton* & out = *((automaton::Automaton**) data);
out = new automaton::Automaton(this->rename(automaton));
} }
   
void Rename::Visit(void*, const automaton::InputDrivenDPDA&) const { void Rename::Visit(void* data, const automaton::InputDrivenDPDA& automaton) const {
throw exception::AlibException("Unsupported automaton type InputDrivenDPDA"); automaton::Automaton* & out = *((automaton::Automaton**) data);
out = new automaton::Automaton(this->rename(automaton));
} }
   
void Rename::Visit(void*, const automaton::InputDrivenNPDA&) const { void Rename::Visit(void*, const automaton::InputDrivenNPDA&) const {
throw exception::AlibException("Unsupported automaton type InputDrivenNPDA"); throw exception::AlibException("Unsupported automaton type InputDrivenNPDA");
} }
   
void Rename::Visit(void*, const automaton::VisiblyPushdownDPDA&) const { void Rename::Visit(void* data, const automaton::VisiblyPushdownDPDA& automaton) const {
throw exception::AlibException("Unsupported automaton type VisiblyPushdownDPDA"); automaton::Automaton* & out = *((automaton::Automaton**) data);
out = new automaton::Automaton(this->rename(automaton));
} }
   
void Rename::Visit(void*, const automaton::VisiblyPushdownNPDA&) const { void Rename::Visit(void*, const automaton::VisiblyPushdownNPDA&) const {
throw exception::AlibException("Unsupported automaton type VisiblyPushdownNPDA"); throw exception::AlibException("Unsupported automaton type VisiblyPushdownNPDA");
} }
   
void Rename::Visit(void*, const automaton::RealTimeHeightDeterministicDPDA&) const { void Rename::Visit(void* data, const automaton::RealTimeHeightDeterministicDPDA& automaton) const {
throw exception::AlibException("Unsupported automaton type RealTimeHeightDeterministicDPDA"); automaton::Automaton* & out = *((automaton::Automaton**) data);
out = new automaton::Automaton(this->rename(automaton));
} }
   
void Rename::Visit(void*, const automaton::RealTimeHeightDeterministicNPDA&) const { void Rename::Visit(void*, const automaton::RealTimeHeightDeterministicNPDA&) const {
......
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
   
#include <automaton/FSM/DFA.h> #include <automaton/FSM/DFA.h>
#include <automaton/PDA/DPDA.h> #include <automaton/PDA/DPDA.h>
#include <automaton/PDA/SinglePopDPDA.h>
#include <automaton/PDA/InputDrivenDPDA.h>
#include <automaton/PDA/VisiblyPushdownDPDA.h>
#include <automaton/PDA/RealTimeHeightDeterministicDPDA.h>
#include <automaton/Automaton.h> #include <automaton/Automaton.h>
   
namespace automaton { namespace automaton {
...@@ -24,7 +28,11 @@ public: ...@@ -24,7 +28,11 @@ public:
static automaton::Automaton rename(const automaton::Automaton& dfa); static automaton::Automaton rename(const automaton::Automaton& dfa);
   
static automaton::DFA rename(const automaton::DFA& dfa); static automaton::DFA rename(const automaton::DFA& dfa);
static automaton::DPDA rename(const automaton::DPDA& dfa); static automaton::DPDA rename(const automaton::DPDA& pda);
static automaton::SinglePopDPDA rename(const automaton::SinglePopDPDA& pda);
static automaton::InputDrivenDPDA rename(const automaton::InputDrivenDPDA& pda);
static automaton::VisiblyPushdownDPDA rename(const automaton::VisiblyPushdownDPDA& pda);
static automaton::RealTimeHeightDeterministicDPDA rename(const automaton::RealTimeHeightDeterministicDPDA& pda);
   
   
protected: protected:
......
/* /*
* ReverseFSM.cpp * Reverse.cpp
* *
* Created on: 7. 11. 2014 * Created on: 7. 11. 2014
* Author: Tomas Pecka * Author: Tomas Pecka
*/ */
   
#include "ReverseFSM.h" #include "Reverse.h"
   
#include <automaton/FSM/MultiInitialStateNFA.h> #include <automaton/FSM/MultiInitialStateNFA.h>
#include <exception/AlibException.h> #include <exception/AlibException.h>
...@@ -17,15 +17,15 @@ namespace automaton { ...@@ -17,15 +17,15 @@ namespace automaton {
   
namespace transform { namespace transform {
   
automaton::Automaton ReverseFSM::convert(const Automaton& automaton) { automaton::Automaton Reverse::convert(const Automaton& automaton) {
automaton::Automaton* out = NULL; automaton::Automaton* out = NULL;
automaton.getData().Accept((void*) &out, ReverseFSM::REVERSE_FSM); automaton.getData().Accept((void*) &out, Reverse::REVERSE);
automaton::Automaton res(std::move(*out)); automaton::Automaton res(std::move(*out));
delete out; delete out;
return std::move(res); return std::move(res);
} }
   
automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::DFA& automaton) automaton::MultiInitialStateNFA Reverse::convert(const automaton::DFA& automaton)
{ {
automaton::MultiInitialStateNFA res; automaton::MultiInitialStateNFA res;
   
...@@ -40,7 +40,7 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::DFA& automa ...@@ -40,7 +40,7 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::DFA& automa
return res; return res;
} }
   
automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::NFA& automaton) automaton::MultiInitialStateNFA Reverse::convert(const automaton::NFA& automaton)
{ {
automaton::MultiInitialStateNFA res; automaton::MultiInitialStateNFA res;
   
...@@ -56,7 +56,7 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::NFA& automa ...@@ -56,7 +56,7 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::NFA& automa
return res; return res;
} }
   
automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::MultiInitialStateNFA& automaton) automaton::MultiInitialStateNFA Reverse::convert(const automaton::MultiInitialStateNFA& automaton)
{ {
automaton::MultiInitialStateNFA res; automaton::MultiInitialStateNFA res;
   
...@@ -72,35 +72,34 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::MultiInitia ...@@ -72,35 +72,34 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::MultiInitia
return res; return res;
} }
   
void Reverse::Visit(void* data, const DFA& automaton) const {
void ReverseFSM::Visit(void* data, const DFA& automaton) const {
automaton::Automaton*& out = *((automaton::Automaton**) data); automaton::Automaton*& out = *((automaton::Automaton**) data);
out = new automaton::Automaton(this->convert(automaton)); out = new automaton::Automaton(this->convert(automaton));
} }
   
void ReverseFSM::Visit(void* data, const NFA& automaton) const { void Reverse::Visit(void* data, const NFA& automaton) const {
automaton::Automaton*& out = *((automaton::Automaton**) data); automaton::Automaton*& out = *((automaton::Automaton**) data);
out = new automaton::Automaton(this->convert(automaton)); out = new automaton::Automaton(this->convert(automaton));
} }
   
void ReverseFSM::Visit(void* data, const MultiInitialStateNFA& automaton) const { void Reverse::Visit(void* data, const MultiInitialStateNFA& automaton) const {
automaton::Automaton*& out = *((automaton::Automaton**) data); automaton::Automaton*& out = *((automaton::Automaton**) data);
out = new automaton::Automaton(this->convert(automaton)); out = new automaton::Automaton(this->convert(automaton));
} }
   
void ReverseFSM::Visit(void*, const ExtendedNFA&) const { void Reverse::Visit(void*, const ExtendedNFA&) const {
throw exception::AlibException("Unsupported automaton type ExtendedNFA"); throw exception::AlibException("Unsupported automaton type ExtendedNFA");
} }
   
void ReverseFSM::Visit(void*, const EpsilonNFA&) const { void Reverse::Visit(void*, const EpsilonNFA&) const {
throw exception::AlibException("Unsupported automaton type EpsilonNFA"); throw exception::AlibException("Unsupported automaton type EpsilonNFA");
} }
   
void ReverseFSM::Visit(void*, const CompactNFA&) const { void Reverse::Visit(void*, const CompactNFA&) const {
throw exception::AlibException("Unsupported automaton type CompactNFA"); throw exception::AlibException("Unsupported automaton type CompactNFA");
} }
   
const ReverseFSM ReverseFSM::REVERSE_FSM; const Reverse Reverse::REVERSE;
   
} /* namespace transform */ } /* namespace transform */
   
......
/* /*
* ReverseFSM.h * Reverse.h
* *
* Created on: 7. 11. 2014 * Created on: 7. 11. 2014
* Author: Tomas Pecka * Author: Tomas Pecka
*/ */
   
#ifndef REVERSE_FSM_H_ #ifndef REVERSE_H_
#define REVERSE_FSM_H_ #define REVERSE_H_
   
#include <automaton/Automaton.h> #include <automaton/Automaton.h>
#include <automaton/common/State.h> #include <automaton/common/State.h>
...@@ -15,7 +15,7 @@ namespace automaton { ...@@ -15,7 +15,7 @@ namespace automaton {
   
namespace transform { namespace transform {
   
class ReverseFSM : public VisitableConstFSMBase { class Reverse : public VisitableConstFSMBase {
public: public:
static automaton::MultiInitialStateNFA convert(const automaton::DFA& automaton); static automaton::MultiInitialStateNFA convert(const automaton::DFA& automaton);
static automaton::MultiInitialStateNFA convert(const automaton::NFA& automaton); static automaton::MultiInitialStateNFA convert(const automaton::NFA& automaton);
...@@ -35,11 +35,11 @@ private: ...@@ -35,11 +35,11 @@ private:
void Visit(void*, const EpsilonNFA& automaton) const; void Visit(void*, const EpsilonNFA& automaton) const;
void Visit(void*, const CompactNFA& automaton) const; void Visit(void*, const CompactNFA& automaton) const;
   
static const ReverseFSM REVERSE_FSM; static const Reverse REVERSE;
}; };
   
} /* namespace transform */ } /* namespace transform */
   
} /* namespace automaton */ } /* namespace automaton */
   
#endif /* REVERSE_FSM_H_ */ #endif /* REVERSE_H_ */
...@@ -253,15 +253,15 @@ bool VisiblyPushdownDPDA::removeLocalTransition(const State& from, const alphabe ...@@ -253,15 +253,15 @@ bool VisiblyPushdownDPDA::removeLocalTransition(const State& from, const alphabe
} }
   
const std::map<std::pair<State, alphabet::Symbol>, std::pair<State, alphabet::Symbol> >& VisiblyPushdownDPDA::getCallTransitions() const { const std::map<std::pair<State, alphabet::Symbol>, std::pair<State, alphabet::Symbol> >& VisiblyPushdownDPDA::getCallTransitions() const {
return callTransitions; return callTransitions;
} }
   
const std::map<std::tuple<State, alphabet::Symbol, alphabet::Symbol>, State>& VisiblyPushdownDPDA::getReturnTransitions() const { const std::map<std::tuple<State, alphabet::Symbol, alphabet::Symbol>, State>& VisiblyPushdownDPDA::getReturnTransitions() const {
return returnTransitions; return returnTransitions;
} }
   
const std::map<std::pair<State, alphabet::Symbol>, State>& VisiblyPushdownDPDA::getLocalTransitions() const { const std::map<std::pair<State, alphabet::Symbol>, State>& VisiblyPushdownDPDA::getLocalTransitions() const {
return localTransitions; return localTransitions;
} }
   
int VisiblyPushdownDPDA::compare(const VisiblyPushdownDPDA& other) const { int VisiblyPushdownDPDA::compare(const VisiblyPushdownDPDA& other) const {
......
...@@ -186,15 +186,15 @@ bool VisiblyPushdownNPDA::removeLocalTransition(const State& from, const alphabe ...@@ -186,15 +186,15 @@ bool VisiblyPushdownNPDA::removeLocalTransition(const State& from, const alphabe
} }
   
const std::map<std::pair<State, alphabet::Symbol>, std::set<std::pair<State, alphabet::Symbol> > >& VisiblyPushdownNPDA::getCallTransitions() const { const std::map<std::pair<State, alphabet::Symbol>, std::set<std::pair<State, alphabet::Symbol> > >& VisiblyPushdownNPDA::getCallTransitions() const {
return callTransitions; return callTransitions;
} }
   
const std::map<std::tuple<State, alphabet::Symbol, alphabet::Symbol>, std::set<State> >& VisiblyPushdownNPDA::getReturnTransitions() const { const std::map<std::tuple<State, alphabet::Symbol, alphabet::Symbol>, std::set<State> >& VisiblyPushdownNPDA::getReturnTransitions() const {
return returnTransitions; return returnTransitions;
} }
   
const std::map<std::pair<State, alphabet::Symbol>, std::set<State> >& VisiblyPushdownNPDA::getLocalTransitions() const { const std::map<std::pair<State, alphabet::Symbol>, std::set<State> >& VisiblyPushdownNPDA::getLocalTransitions() const {
return localTransitions; return localTransitions;
} }
   
int VisiblyPushdownNPDA::compare(const VisiblyPushdownNPDA& other) const { int VisiblyPushdownNPDA::compare(const VisiblyPushdownNPDA& other) const {
......
...@@ -10,12 +10,12 @@ ...@@ -10,12 +10,12 @@
   
#include "exception/AlibException.h" #include "exception/AlibException.h"
#include "factory/XmlDataFactory.hpp" #include "factory/XmlDataFactory.hpp"
#include "automaton/transform/ReverseFSM.h" #include "automaton/transform/Reverse.h"
   
int main(int argc, char** argv) { int main(int argc, char** argv) {
   
try { try {
TCLAP::CmdLine cmd("Automaton FSM reverse binary", ' ', "0.01"); TCLAP::CmdLine cmd("Automaton reverse binary", ' ', "0.01");
   
TCLAP::ValueArg<std::string> input( "i", "input", "Automaton to reverse", false, "-", "file"); TCLAP::ValueArg<std::string> input( "i", "input", "Automaton to reverse", false, "-", "file");
cmd.add( input ); cmd.add( input );
...@@ -33,7 +33,7 @@ int main(int argc, char** argv) { ...@@ -33,7 +33,7 @@ int main(int argc, char** argv) {
sax::SaxParseInterface::parseStdin(tokens); sax::SaxParseInterface::parseStdin(tokens);
} }
   
alib::XmlDataFactory::toStdout(automaton::transform::ReverseFSM::convert(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); alib::XmlDataFactory::toStdout(automaton::transform::Reverse::convert(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens)));
return 0; return 0;
   
} catch (const exception::AlibException& exception) { } catch (const exception::AlibException& exception) {
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
<BottomOfTheStackSymbol/> <BottomOfTheStackSymbol/>
</bottomOfTheStackSymbol> </bottomOfTheStackSymbol>
<finalStates> <finalStates>
<PrimitiveLabel><Integer>4</Integer></PrimitiveLabel> <PrimitiveLabel><Integer>6</Integer></PrimitiveLabel>
</finalStates> </finalStates>
<transitions> <transitions>
<callTransition> <callTransition>
......
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