diff --git a/alib2algo/src/automaton/simplify/Rename.cpp b/alib2algo/src/automaton/simplify/Rename.cpp index b48c4f1a4e8fee67331583ffd02915ab8a80c176..7ad34298eb809a57648c8bd49f802ab3ac0493b5 100644 --- a/alib2algo/src/automaton/simplify/Rename.cpp +++ b/alib2algo/src/automaton/simplify/Rename.cpp @@ -20,10 +20,6 @@ namespace automaton { namespace simplify { -automaton::Automaton Rename::rename(const automaton::Automaton& automaton) { - return dispatch(automaton.getData()); -} - automaton::DFA<> Rename::rename(const automaton::DFA<>& fsm) { int counter = 0; ext::map<DefaultStateType, int > renamingData; @@ -51,8 +47,7 @@ automaton::DFA<> Rename::rename(const automaton::DFA<>& fsm) { return result; } -auto RenameDFA = registration::OverloadRegister < Rename, automaton::DFA < >, automaton::DFA < > > ( Rename::rename ); -auto RenameDFA2 = registration::AbstractRegister < Rename, automaton::DFA < >, const automaton::DFA < > & > ( Rename::rename ); +auto RenameDFA = registration::AbstractRegister < Rename, automaton::DFA < >, const automaton::DFA < > & > ( Rename::rename ); automaton::DPDA < > Rename::rename(const automaton::DPDA < > & pda) { int counterState = 0; @@ -94,8 +89,7 @@ automaton::DPDA < > Rename::rename(const automaton::DPDA < > & pda) { return result; } -auto RenameDPDA = registration::OverloadRegister < Rename, automaton::DPDA < >, automaton::DPDA < > > ( Rename::rename ); -auto RenameDPDA2 = registration::AbstractRegister < Rename, automaton::DPDA < >, const automaton::DPDA < > & > ( Rename::rename ); +auto RenameDPDA = registration::AbstractRegister < Rename, automaton::DPDA < >, const automaton::DPDA < > & > ( Rename::rename ); automaton::SinglePopDPDA < > Rename::rename(const automaton::SinglePopDPDA < > & pda) { int counterState = 0; @@ -136,8 +130,7 @@ automaton::SinglePopDPDA < > Rename::rename(const automaton::SinglePopDPDA < > & return result; } -auto RenameSinglePopDPDA = registration::OverloadRegister < Rename, automaton::SinglePopDPDA < >, automaton::SinglePopDPDA < > > ( Rename::rename ); -auto RenameSinglePopDPDA2 = registration::AbstractRegister < Rename, automaton::SinglePopDPDA < >, const automaton::SinglePopDPDA < > & > ( Rename::rename ); +auto RenameSinglePopDPDA = registration::AbstractRegister < Rename, automaton::SinglePopDPDA < >, const automaton::SinglePopDPDA < > & > ( Rename::rename ); automaton::InputDrivenDPDA < > Rename::rename(const automaton::InputDrivenDPDA < > & pda) { int counter = 0; @@ -186,8 +179,7 @@ automaton::InputDrivenDPDA < > Rename::rename(const automaton::InputDrivenDPDA < return result; } -auto RenameInputDrivenDPDA = registration::OverloadRegister < Rename, automaton::InputDrivenDPDA < >, automaton::InputDrivenDPDA < > > ( Rename::rename ); -auto RenameInputDrivenDPDA2 = registration::AbstractRegister < Rename, automaton::InputDrivenDPDA < >, const automaton::InputDrivenDPDA < > & > ( Rename::rename ); +auto RenameInputDrivenDPDA = registration::AbstractRegister < Rename, automaton::InputDrivenDPDA < >, const automaton::InputDrivenDPDA < > & > ( Rename::rename ); automaton::VisiblyPushdownDPDA < > Rename::rename(const automaton::VisiblyPushdownDPDA < > & pda) { int counterState = 0; @@ -234,8 +226,7 @@ automaton::VisiblyPushdownDPDA < > Rename::rename(const automaton::VisiblyPushdo return result; } -auto RenameVisiblyPushdownDPDA = registration::OverloadRegister < Rename, automaton::VisiblyPushdownDPDA < >, automaton::VisiblyPushdownDPDA < > > ( Rename::rename ); -auto RenameVisiblyPushdownDPDA2 = registration::AbstractRegister < Rename, automaton::VisiblyPushdownDPDA < >, const automaton::VisiblyPushdownDPDA < > & > ( Rename::rename ); +auto RenameVisiblyPushdownDPDA = registration::AbstractRegister < Rename, automaton::VisiblyPushdownDPDA < >, const automaton::VisiblyPushdownDPDA < > & > ( Rename::rename ); automaton::RealTimeHeightDeterministicDPDA < > Rename::rename(const automaton::RealTimeHeightDeterministicDPDA < > & pda) { int counterState = 0; @@ -280,8 +271,7 @@ automaton::RealTimeHeightDeterministicDPDA < > Rename::rename(const automaton::R return result; } -auto RenameRealTimeHeightDeterministicDPDA = registration::OverloadRegister < Rename, automaton::RealTimeHeightDeterministicDPDA < >, automaton::RealTimeHeightDeterministicDPDA < > > ( Rename::rename ); -auto RenameRealTimeHeightDeterministicDPDA2 = registration::AbstractRegister < Rename, automaton::RealTimeHeightDeterministicDPDA < >, const automaton::RealTimeHeightDeterministicDPDA < > & > ( Rename::rename ); +auto RenameRealTimeHeightDeterministicDPDA = registration::AbstractRegister < Rename, automaton::RealTimeHeightDeterministicDPDA < >, const automaton::RealTimeHeightDeterministicDPDA < > & > ( Rename::rename ); } /* namespace simplify */ diff --git a/alib2algo/src/automaton/simplify/Rename.h b/alib2algo/src/automaton/simplify/Rename.h index 25f281a01423ec699ce94766e67bbad85ca222d7..31d992d5e7880b63209f7c5c455f611865c1d581 100644 --- a/alib2algo/src/automaton/simplify/Rename.h +++ b/alib2algo/src/automaton/simplify/Rename.h @@ -8,7 +8,6 @@ #ifndef RENAME_H_ #define RENAME_H_ -#include <core/multipleDispatch.hpp> #include <automaton/FSM/DFA.h> #include <automaton/PDA/DPDA.h> #include <automaton/PDA/SinglePopDPDA.h> @@ -21,13 +20,8 @@ namespace automaton { namespace simplify { -class Rename : public alib::SingleDispatch<Rename, automaton::Automaton, const automaton::AutomatonBase &> { +class Rename { public: - /** - * @param dfa automaton to rename - */ - static automaton::Automaton rename(const automaton::Automaton& dfa); - static automaton::DFA<> rename(const automaton::DFA<>& dfa); static automaton::DPDA < > rename(const automaton::DPDA < > & pda); static automaton::SinglePopDPDA < > rename(const automaton::SinglePopDPDA < > & pda); diff --git a/alib2algo/src/grammar/simplify/Rename.cpp b/alib2algo/src/grammar/simplify/Rename.cpp index 304615439ec4567a7de1ee6c54cc1f2539ff1ddb..4eb38990b62b155b5ae0a3b156b4c12ea29fc6f1 100644 --- a/alib2algo/src/grammar/simplify/Rename.cpp +++ b/alib2algo/src/grammar/simplify/Rename.cpp @@ -22,10 +22,6 @@ namespace grammar { namespace simplify { -grammar::Grammar Rename::rename ( const grammar::Grammar & grammar ) { - return dispatch ( grammar.getData ( ) ); -} - grammar::RightRG < > Rename::rename ( const grammar::RightRG < > & rrg ) { int counter = 0; @@ -62,7 +58,7 @@ grammar::RightRG < > Rename::rename ( const grammar::RightRG < > & rrg ) { return result; } -auto RenameRightRG = registration::OverloadRegister < Rename, grammar::RightRG < >, grammar::RightRG < > > ( Rename::rename ); +auto RenameRightRG = registration::AbstractRegister < Rename, grammar::RightRG < >, const grammar::RightRG < > & > ( Rename::rename ); grammar::LeftRG < > Rename::rename ( const grammar::LeftRG < > & rrg ) { int counter = 0; @@ -100,7 +96,7 @@ grammar::LeftRG < > Rename::rename ( const grammar::LeftRG < > & rrg ) { return result; } -auto RenameLeftRG = registration::OverloadRegister < Rename, grammar::LeftRG < >, grammar::LeftRG < > > ( Rename::rename ); +auto RenameLeftRG = registration::AbstractRegister < Rename, grammar::LeftRG < >, const grammar::LeftRG < > & > ( Rename::rename ); } /* namespace simplify */ diff --git a/alib2algo/src/grammar/simplify/Rename.h b/alib2algo/src/grammar/simplify/Rename.h index 4f8c71f23345e3029bed3755de9cfc840fb99af1..2578169e02fc0d8e645e7797d72c46d50b1d47f0 100644 --- a/alib2algo/src/grammar/simplify/Rename.h +++ b/alib2algo/src/grammar/simplify/Rename.h @@ -8,8 +8,6 @@ #ifndef RENAME_GRAMMAR_H_ #define RENAME_GRAMMAR_H_ -#include <core/multipleDispatch.hpp> -#include <grammar/Grammar.h> #include <grammar/Regular/LeftRG.h> #include <grammar/Regular/RightRG.h> @@ -17,13 +15,8 @@ namespace grammar { namespace simplify { -class Rename : public alib::SingleDispatch < Rename, grammar::Grammar, const grammar::GrammarBase & > { +class Rename { public: - /** - * @param grammar grammar to rename - */ - static grammar::Grammar rename ( const grammar::Grammar & grammar ); - static grammar::RightRG < > rename ( const grammar::RightRG < > & grammar ); static grammar::LeftRG < > rename ( const grammar::LeftRG < > & grammar ); }; diff --git a/arename2/makefile.conf b/arename2/makefile.conf index 558ddb218cddd3bd2e6ea8c8c7390b2d9a9a03fa..0007bb7cd6af12f87c5f782387f43869d7c38981 100644 --- a/arename2/makefile.conf +++ b/arename2/makefile.conf @@ -1,4 +1,4 @@ EXECUTABLE:=arename2 -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)/../../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/ diff --git a/arename2/src/arename.cpp b/arename2/src/arename.cpp index 46622cef91bee0ca36b92d0700207f87cbf6cb78..fb39412c1cb3aafb776dda509e9f5e1c34abd5df 100644 --- a/arename2/src/arename.cpp +++ b/arename2/src/arename.cpp @@ -5,15 +5,13 @@ * Author: Jan Travnicek */ +#include <tclap/CmdLine.h> #include <global/GlobalData.h> #include <measure> -#include <sax/FromXMLParserHelper.h> -#include <tclap/CmdLine.h> -#include "automaton/simplify/Rename.h" -#include "exception/CommonException.h" -#include "factory/XmlDataFactory.hpp" -#include "grammar/simplify/Rename.h" +#include <exception/CommonException.h> +#include <lexer/Lexer.h> +#include <parser/Parser.h> int main ( int argc, char * * argv ) { try { @@ -39,38 +37,38 @@ int main ( int argc, char * * argv ) { if ( measure.isSet ( ) ) common::GlobalData::measure = true; + cli::Environment environment; + environment.setBinding ( "stdin", input.getValue ( ) ); + environment.setBinding ( "stdout", "-" ); + measurements::start ( "Overal", measurements::Type::OVERALL ); measurements::start ( "Input read", measurements::Type::AUXILIARY ); - ext::deque < sax::Token > tokens = sax::FromXMLParserHelper::parseInput ( input ); - - if ( alib::XmlDataFactory::first < automaton::Automaton > ( tokens ) ) { - automaton::Automaton automaton = alib::XmlDataFactory::fromTokens ( std::move ( tokens ) ); - - measurements::end ( ); - measurements::start ( "Algorithm", measurements::Type::MAIN ); - - automaton::Automaton res = automaton::simplify::Rename::rename ( automaton ); - - measurements::end ( ); - measurements::start ( "Output write", measurements::Type::AUXILIARY ); + cli::Parser parser ( cli::Lexer ( "execute <#stdin > $input" ) ); + parser.parse ( )->run ( environment ); - alib::XmlDataFactory::toStdout ( res ); - } else if ( alib::XmlDataFactory::first < grammar::Grammar > ( tokens ) ) { - grammar::Grammar grammar = alib::XmlDataFactory::fromTokens ( std::move ( tokens ) ); - - measurements::end ( ); - measurements::start ( "Algorithm", measurements::Type::MAIN ); - - grammar::Grammar res = grammar::simplify::Rename::rename ( grammar ); + measurements::end ( ); + measurements::start ( "Algorithm", measurements::Type::MAIN ); - measurements::end ( ); - measurements::start ( "Output write", measurements::Type::AUXILIARY ); + parser = cli::Parser ( cli::Lexer ( "export type = typename ( $input )" ) ); + std::string inputType = environment.getVariable ( "input" )->getReturnType ( ); + bool isAutomaton = inputType.find ( "automaton::" ) == 0; + bool isGrammar = inputType.find ( "grammar::" ) == 0; - alib::XmlDataFactory::toStdout ( res ); + if( isAutomaton ) { + parser = cli::Parser ( cli::Lexer ( "execute automaton::simplify::Rename $input > $output" ) ); + } else if( isGrammar ) { + parser = cli::Parser ( cli::Lexer ( "execute grammar::simplify::Rename $input > $output" ) ); } else { - throw exception::CommonException ( "Invalid rename command" ); + throw exception::CommonException("Invalid algorithm"); } + parser.parse ( )->run ( environment ); + + measurements::end ( ); + measurements::start ( "Output write", measurements::Type::AUXILIARY ); + + parser = cli::Parser ( cli::Lexer ( "execute $output >#stdout" ) ); + parser.parse ( )->run ( environment ); measurements::end ( ); measurements::end ( );