diff --git a/alib2algo/src/automaton/transform/Reverse.cpp b/alib2algo/src/automaton/transform/Reverse.cpp index 1c64a2bfb81913b7bda5236e5c7cc8a7b52e5841..e7e4e1f10403bbc70d19075159f77dfb6c629b04 100644 --- a/alib2algo/src/automaton/transform/Reverse.cpp +++ b/alib2algo/src/automaton/transform/Reverse.cpp @@ -12,14 +12,6 @@ namespace automaton { namespace transform { -automaton::Automaton Reverse::convert(const Automaton& automaton) { - return dispatch(automaton.getData()); -} - -auto ReverseDFA = registration::OverloadRegister < Reverse, automaton::MultiInitialStateNFA < >, automaton::DFA < > > ( Reverse::convert ); -auto ReverseNFA = registration::OverloadRegister < Reverse, automaton::MultiInitialStateNFA < >, automaton::NFA < > > ( Reverse::convert ); -auto ReverseMultiInitialStateNFA = registration::OverloadRegister < Reverse, automaton::MultiInitialStateNFA < >, automaton::MultiInitialStateNFA < > > ( Reverse::convert ); - auto ReverseDFA2 = registration::AbstractRegister < Reverse, automaton::MultiInitialStateNFA < >, const automaton::DFA < > & > ( Reverse::convert ); auto ReverseNFA2 = registration::AbstractRegister < Reverse, automaton::MultiInitialStateNFA < >, const automaton::NFA < > & > ( Reverse::convert ); auto ReverseMultiInitialStateNFA2 = registration::AbstractRegister < Reverse, automaton::MultiInitialStateNFA < >, const automaton::MultiInitialStateNFA < > & > ( Reverse::convert ); diff --git a/alib2algo/src/automaton/transform/Reverse.h b/alib2algo/src/automaton/transform/Reverse.h index 03777eb560e1a9e81412e6dd167a77479b806ce1..4773c4094490f5e5d2de71f329d0b2dab8bd0ca4 100644 --- a/alib2algo/src/automaton/transform/Reverse.h +++ b/alib2algo/src/automaton/transform/Reverse.h @@ -11,17 +11,15 @@ #include <vector> #include <algorithm> -#include <core/multipleDispatch.hpp> - -#include <automaton/Automaton.h> -#include <automaton/AutomatonFeatures.h> #include <automaton/FSM/MultiInitialStateNFA.h> +#include <automaton/FSM/NFA.h> +#include <automaton/FSM/DFA.h> namespace automaton { namespace transform { -class Reverse : public alib::SingleDispatch<Reverse, automaton::Automaton, const automaton::AutomatonBase &> { +class Reverse { public: template < class SymbolType, class StateType > static automaton::MultiInitialStateNFA < SymbolType, StateType > convert(const automaton::DFA < SymbolType, StateType > & automaton); @@ -29,13 +27,6 @@ public: static automaton::MultiInitialStateNFA < SymbolType, StateType > convert(const automaton::NFA < SymbolType, StateType > & automaton); template < class SymbolType, class StateType > static automaton::MultiInitialStateNFA < SymbolType, StateType > convert(const automaton::MultiInitialStateNFA < SymbolType, StateType > & automaton); - - /** - * Creates finite automaton accepting reverse language of given automaton - * @param automaton FSM - * @return Automaton reverse automaton - */ - static automaton::Automaton convert( const automaton::Automaton & automaton ); }; template < class SymbolType, class StateType > diff --git a/areverse2/makefile.conf b/areverse2/makefile.conf index 3731eca9c9b1047504b1635f11db89094070f7c2..963a354de8bd0883375eec0b9886576d9da8d160 100644 --- a/areverse2/makefile.conf +++ b/areverse2/makefile.conf @@ -1,4 +1,4 @@ EXECUTABLE:=areverse2 -LINK_PATHS=../alib2elgo/ ../alib2algo/ ../alib2data/ ../alib2common/ ../alib2std/ -LINK_LIBRARIES=alib2elgo alib2algo alib2data alib2common alib2std xml2 -INCLUDE_PATHS=\$$(SOURCES_BASE_DIR)/../../alib2elgo/src/ \$$(SOURCES_BASE_DIR)/../../alib2algo/src/ \$$(SOURCES_BASE_DIR)/../../alib2data/src/ \$$(SOURCES_BASE_DIR)/../../alib2common/src/ \$$(SOURCES_BASE_DIR)/../../alib2std/src/ /usr/include/libxml2/ +LINK_PATHS=../alib2cli/ ../alib2elgo/ ../alib2algo/ ../alib2data/ ../alib2common/ ../alib2std/ +LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2data alib2common alib2std xml2 +INCLUDE_PATHS=\$$(SOURCES_BASE_DIR)/../../alib2cli/src/ \$$(SOURCES_BASE_DIR)/../../alib2common/src/ \$$(SOURCES_BASE_DIR)/../../alib2std/src/ /usr/include/libxml2/ diff --git a/areverse2/src/areverse.cpp b/areverse2/src/areverse.cpp index 8cd69faeaa7fc2213590483e731d652bd8510319..98206c807a0ce2cd385d5a57423bd843a227aee0 100644 --- a/areverse2/src/areverse.cpp +++ b/areverse2/src/areverse.cpp @@ -8,11 +8,10 @@ #include <tclap/CmdLine.h> #include <global/GlobalData.h> #include <measure> -#include <sax/FromXMLParserHelper.h> -#include "exception/CommonException.h" -#include "factory/XmlDataFactory.hpp" -#include "automaton/transform/Reverse.h" +#include <exception/CommonException.h> +#include <lexer/Lexer.h> +#include <parser/Parser.h> int main(int argc, char** argv) { try { @@ -37,20 +36,27 @@ int main(int argc, char** argv) { if(measure.isSet()) common::GlobalData::measure = true; - measurements::start("Overal", measurements::Type::OVERALL); - measurements::start("Input read", measurements::Type::AUXILIARY); + cli::Environment environment; + environment.setBinding ( "stdin", input.getValue ( ) ); + environment.setBinding ( "stdout", "-" ); - automaton::Automaton automaton = alib::XmlDataFactory::fromTokens (sax::FromXMLParserHelper::parseInput(input)); + measurements::start ( "Overal", measurements::Type::OVERALL ); + measurements::start ( "Input read", measurements::Type::AUXILIARY ); - measurements::end(); - measurements::start("Algorithm", measurements::Type::MAIN); + cli::Parser parser ( cli::Lexer ( "execute <#stdin > $inputAutomaton" ) ); + parser.parse ( )->run ( environment ); - automaton::Automaton res = automaton::transform::Reverse::convert(automaton); + measurements::end ( ); + measurements::start ( "Algorithm", measurements::Type::MAIN ); - measurements::end(); - measurements::start("Output write", measurements::Type::AUXILIARY); + parser = cli::Parser ( cli::Lexer ( "execute automaton::transform::Reverse $inputAutomaton > $outputAutomaton" ) ); + parser.parse ( )->run ( environment ); + + measurements::end ( ); + measurements::start ( "Output write", measurements::Type::AUXILIARY ); - alib::XmlDataFactory::toStdout(res); + parser = cli::Parser ( cli::Lexer ( "execute $outputAutomaton >#stdout" ) ); + parser.parse ( )->run ( environment ); measurements::end(); measurements::end();