From 30b36274dbfc3812e606208ebd4d5b20eed52f0f Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Sun, 22 Mar 2015 18:22:32 +0100 Subject: [PATCH] refactor, rename for all deterministic pdas --- .../automaton/simplify/MinimizeBrzozowski.cpp | 6 +- alib2algo/src/automaton/simplify/Rename.cpp | 200 +++++++++++++++++- alib2algo/src/automaton/simplify/Rename.h | 10 +- .../transform/{ReverseFSM.cpp => Reverse.cpp} | 29 ++- .../transform/{ReverseFSM.h => Reverse.h} | 12 +- .../src/automaton/PDA/VisiblyPushdownDPDA.cpp | 6 +- .../src/automaton/PDA/VisiblyPushdownNPDA.cpp | 6 +- areverse2/src/areverse.cpp | 6 +- examples2/automaton/NVPA4.xml | 2 +- 9 files changed, 233 insertions(+), 44 deletions(-) rename alib2algo/src/automaton/transform/{ReverseFSM.cpp => Reverse.cpp} (71%) rename alib2algo/src/automaton/transform/{ReverseFSM.h => Reverse.h} (85%) diff --git a/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp b/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp index e6352dee80..e6a8bba5c7 100644 --- a/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp +++ b/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp @@ -11,7 +11,7 @@ #include <automaton/Automaton.h> #include <automaton/FSM/MultiInitialStateNFA.h> -#include "../transform/ReverseFSM.h" +#include "../transform/Reverse.h" #include "../determinize/Determinize.h" namespace automaton { @@ -27,11 +27,11 @@ automaton::Automaton MinimizeBrzozowski::minimize(const automaton::Automaton& au } 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) { - 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 { diff --git a/alib2algo/src/automaton/simplify/Rename.cpp b/alib2algo/src/automaton/simplify/Rename.cpp index f766d66aec..c44b4ba020 100644 --- a/alib2algo/src/automaton/simplify/Rename.cpp +++ b/alib2algo/src/automaton/simplify/Rename.cpp @@ -64,7 +64,6 @@ automaton::DPDA Rename::rename(const automaton::DPDA& pda) { std::map<automaton::State, int > renamingDataState; int counterSymbol = 0; std::map<alphabet::Symbol, int > renamingDataSymbol; - std::deque< automaton::State > processingData; for(auto iter = pda.getStates().begin(); iter != pda.getStates().end(); iter++) { renamingDataState.insert(std::make_pair(*iter, counterState++)); @@ -105,6 +104,185 @@ automaton::DPDA Rename::rename(const automaton::DPDA& pda) { 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 { throw exception::AlibException("Unsupported automaton type EpsilonNFA"); } @@ -135,28 +313,32 @@ void Rename::Visit(void* data, const automaton::DPDA& automaton) const { out = new automaton::Automaton(this->rename(automaton)); } -void Rename::Visit(void*, const automaton::SinglePopDPDA&) const { - throw exception::AlibException("Unsupported automaton type SinglePopDPDA"); +void Rename::Visit(void* data, const automaton::SinglePopDPDA& automaton) const { + automaton::Automaton* & out = *((automaton::Automaton**) data); + out = new automaton::Automaton(this->rename(automaton)); } -void Rename::Visit(void*, const automaton::InputDrivenDPDA&) const { - throw exception::AlibException("Unsupported automaton type InputDrivenDPDA"); +void Rename::Visit(void* data, const automaton::InputDrivenDPDA& automaton) const { + automaton::Automaton* & out = *((automaton::Automaton**) data); + out = new automaton::Automaton(this->rename(automaton)); } void Rename::Visit(void*, const automaton::InputDrivenNPDA&) const { throw exception::AlibException("Unsupported automaton type InputDrivenNPDA"); } -void Rename::Visit(void*, const automaton::VisiblyPushdownDPDA&) const { - throw exception::AlibException("Unsupported automaton type VisiblyPushdownDPDA"); +void Rename::Visit(void* data, const automaton::VisiblyPushdownDPDA& automaton) const { + automaton::Automaton* & out = *((automaton::Automaton**) data); + out = new automaton::Automaton(this->rename(automaton)); } void Rename::Visit(void*, const automaton::VisiblyPushdownNPDA&) const { throw exception::AlibException("Unsupported automaton type VisiblyPushdownNPDA"); } -void Rename::Visit(void*, const automaton::RealTimeHeightDeterministicDPDA&) const { - throw exception::AlibException("Unsupported automaton type RealTimeHeightDeterministicDPDA"); +void Rename::Visit(void* data, const automaton::RealTimeHeightDeterministicDPDA& automaton) const { + automaton::Automaton* & out = *((automaton::Automaton**) data); + out = new automaton::Automaton(this->rename(automaton)); } void Rename::Visit(void*, const automaton::RealTimeHeightDeterministicNPDA&) const { diff --git a/alib2algo/src/automaton/simplify/Rename.h b/alib2algo/src/automaton/simplify/Rename.h index 8ff66a6f47..e3eb0281ec 100644 --- a/alib2algo/src/automaton/simplify/Rename.h +++ b/alib2algo/src/automaton/simplify/Rename.h @@ -10,6 +10,10 @@ #include <automaton/FSM/DFA.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> namespace automaton { @@ -24,7 +28,11 @@ public: static automaton::Automaton rename(const automaton::Automaton& 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: diff --git a/alib2algo/src/automaton/transform/ReverseFSM.cpp b/alib2algo/src/automaton/transform/Reverse.cpp similarity index 71% rename from alib2algo/src/automaton/transform/ReverseFSM.cpp rename to alib2algo/src/automaton/transform/Reverse.cpp index 4de5a04c23..7afb8e28e1 100644 --- a/alib2algo/src/automaton/transform/ReverseFSM.cpp +++ b/alib2algo/src/automaton/transform/Reverse.cpp @@ -1,11 +1,11 @@ /* - * ReverseFSM.cpp + * Reverse.cpp * * Created on: 7. 11. 2014 * Author: Tomas Pecka */ -#include "ReverseFSM.h" +#include "Reverse.h" #include <automaton/FSM/MultiInitialStateNFA.h> #include <exception/AlibException.h> @@ -17,15 +17,15 @@ namespace automaton { namespace transform { -automaton::Automaton ReverseFSM::convert(const Automaton& automaton) { +automaton::Automaton Reverse::convert(const Automaton& automaton) { 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)); delete out; return std::move(res); } -automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::DFA& automaton) +automaton::MultiInitialStateNFA Reverse::convert(const automaton::DFA& automaton) { automaton::MultiInitialStateNFA res; @@ -40,7 +40,7 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::DFA& automa return res; } -automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::NFA& automaton) +automaton::MultiInitialStateNFA Reverse::convert(const automaton::NFA& automaton) { automaton::MultiInitialStateNFA res; @@ -56,7 +56,7 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::NFA& automa return res; } -automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::MultiInitialStateNFA& automaton) +automaton::MultiInitialStateNFA Reverse::convert(const automaton::MultiInitialStateNFA& automaton) { automaton::MultiInitialStateNFA res; @@ -72,35 +72,34 @@ automaton::MultiInitialStateNFA ReverseFSM::convert(const automaton::MultiInitia return res; } - -void ReverseFSM::Visit(void* data, const DFA& automaton) const { +void Reverse::Visit(void* data, const DFA& automaton) const { automaton::Automaton*& out = *((automaton::Automaton**) data); 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); 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); 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"); } -void ReverseFSM::Visit(void*, const EpsilonNFA&) const { +void Reverse::Visit(void*, const EpsilonNFA&) const { 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"); } -const ReverseFSM ReverseFSM::REVERSE_FSM; +const Reverse Reverse::REVERSE; } /* namespace transform */ diff --git a/alib2algo/src/automaton/transform/ReverseFSM.h b/alib2algo/src/automaton/transform/Reverse.h similarity index 85% rename from alib2algo/src/automaton/transform/ReverseFSM.h rename to alib2algo/src/automaton/transform/Reverse.h index b5c3a7c0fd..c8528d9091 100644 --- a/alib2algo/src/automaton/transform/ReverseFSM.h +++ b/alib2algo/src/automaton/transform/Reverse.h @@ -1,12 +1,12 @@ /* - * ReverseFSM.h + * Reverse.h * * Created on: 7. 11. 2014 * Author: Tomas Pecka */ -#ifndef REVERSE_FSM_H_ -#define REVERSE_FSM_H_ +#ifndef REVERSE_H_ +#define REVERSE_H_ #include <automaton/Automaton.h> #include <automaton/common/State.h> @@ -15,7 +15,7 @@ namespace automaton { namespace transform { -class ReverseFSM : public VisitableConstFSMBase { +class Reverse : public VisitableConstFSMBase { public: static automaton::MultiInitialStateNFA convert(const automaton::DFA& automaton); static automaton::MultiInitialStateNFA convert(const automaton::NFA& automaton); @@ -35,11 +35,11 @@ private: void Visit(void*, const EpsilonNFA& automaton) const; void Visit(void*, const CompactNFA& automaton) const; - static const ReverseFSM REVERSE_FSM; + static const Reverse REVERSE; }; } /* namespace transform */ } /* namespace automaton */ -#endif /* REVERSE_FSM_H_ */ +#endif /* REVERSE_H_ */ diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp index b05d32a143..77bd069f36 100644 --- a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp +++ b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp @@ -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 { - return callTransitions; + return callTransitions; } 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 { - return localTransitions; + return localTransitions; } int VisiblyPushdownDPDA::compare(const VisiblyPushdownDPDA& other) const { diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp index a128e07dbc..746d4922db 100644 --- a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp +++ b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp @@ -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 { - return callTransitions; + return callTransitions; } 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 { - return localTransitions; + return localTransitions; } int VisiblyPushdownNPDA::compare(const VisiblyPushdownNPDA& other) const { diff --git a/areverse2/src/areverse.cpp b/areverse2/src/areverse.cpp index 40ace10aae..4c0ce749e7 100644 --- a/areverse2/src/areverse.cpp +++ b/areverse2/src/areverse.cpp @@ -10,12 +10,12 @@ #include "exception/AlibException.h" #include "factory/XmlDataFactory.hpp" -#include "automaton/transform/ReverseFSM.h" +#include "automaton/transform/Reverse.h" int main(int argc, char** argv) { 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"); cmd.add( input ); @@ -33,7 +33,7 @@ int main(int argc, char** argv) { 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; } catch (const exception::AlibException& exception) { diff --git a/examples2/automaton/NVPA4.xml b/examples2/automaton/NVPA4.xml index 018b1abdf1..34c41aa55e 100644 --- a/examples2/automaton/NVPA4.xml +++ b/examples2/automaton/NVPA4.xml @@ -51,7 +51,7 @@ <BottomOfTheStackSymbol/> </bottomOfTheStackSymbol> <finalStates> - <PrimitiveLabel><Integer>4</Integer></PrimitiveLabel> + <PrimitiveLabel><Integer>6</Integer></PrimitiveLabel> </finalStates> <transitions> <callTransition> -- GitLab