From 5316b51bb890f4658e8b2c4b0b05cc27ff061753 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Wed, 30 Aug 2017 22:33:36 +0200 Subject: [PATCH] use cli in reverse binary --- alib2algo/src/automaton/transform/Reverse.cpp | 8 ----- alib2algo/src/automaton/transform/Reverse.h | 15 ++------- areverse2/makefile.conf | 6 ++-- areverse2/src/areverse.cpp | 32 +++++++++++-------- 4 files changed, 25 insertions(+), 36 deletions(-) diff --git a/alib2algo/src/automaton/transform/Reverse.cpp b/alib2algo/src/automaton/transform/Reverse.cpp index 1c64a2bfb8..e7e4e1f104 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 03777eb560..4773c40944 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 3731eca9c9..963a354de8 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 8cd69faeaa..98206c807a 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(); -- GitLab