From c07a0e378246f9f84248ba1d8b4eca71891e3bff Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Wed, 30 Aug 2017 11:43:20 +0200 Subject: [PATCH] use cli internally in minimize --- adeterminize2/src/adeterminize.cpp | 1 - alib2algo/src/automaton/simplify/Minimize.cpp | 11 ++---- alib2algo/src/automaton/simplify/Minimize.h | 9 +---- .../automaton/simplify/MinimizeBrzozowski.cpp | 13 ++----- .../automaton/simplify/MinimizeBrzozowski.h | 11 ++---- aminimize2/makefile.conf | 6 ++-- aminimize2/src/aminimize.cpp | 36 +++++++++---------- 7 files changed, 28 insertions(+), 59 deletions(-) diff --git a/adeterminize2/src/adeterminize.cpp b/adeterminize2/src/adeterminize.cpp index 13de4d05d1..b2cd3c5013 100644 --- a/adeterminize2/src/adeterminize.cpp +++ b/adeterminize2/src/adeterminize.cpp @@ -13,7 +13,6 @@ #include <lexer/Lexer.h> #include <parser/Parser.h> - int main(int argc, char** argv) { try { common::GlobalData::argc = argc; diff --git a/alib2algo/src/automaton/simplify/Minimize.cpp b/alib2algo/src/automaton/simplify/Minimize.cpp index d730b03701..e99008bed8 100644 --- a/alib2algo/src/automaton/simplify/Minimize.cpp +++ b/alib2algo/src/automaton/simplify/Minimize.cpp @@ -12,15 +12,8 @@ namespace automaton { namespace simplify { -automaton::Automaton Minimize::minimize(const automaton::Automaton& automaton) { - return dispatch(automaton.getData()); -} - -auto MinimizeNFA = registration::OverloadRegister < Minimize, automaton::DFA < >, automaton::DFA < > >( Minimize::minimize ); -auto MinimizeNFTA = registration::OverloadRegister < Minimize, automaton::DFTA < >, automaton::DFTA < > >( Minimize::minimize ); - -auto MinimizeNFA2 = registration::AbstractRegister < Minimize, automaton::DFA < >, const automaton::DFA < > & > ( Minimize::minimize ); -auto MinimizeNFTA2 = registration::AbstractRegister < Minimize, automaton::DFTA < >, const automaton::DFTA < > & > ( Minimize::minimize ); +auto MinimizeNFA = registration::AbstractRegister < Minimize, automaton::DFA < >, const automaton::DFA < > & > ( Minimize::minimize ); +auto MinimizeNFTA = registration::AbstractRegister < Minimize, automaton::DFTA < >, const automaton::DFTA < > & > ( Minimize::minimize ); } /* namespace simplify */ diff --git a/alib2algo/src/automaton/simplify/Minimize.h b/alib2algo/src/automaton/simplify/Minimize.h index 778c1c154c..ca55e515ce 100644 --- a/alib2algo/src/automaton/simplify/Minimize.h +++ b/alib2algo/src/automaton/simplify/Minimize.h @@ -8,8 +8,6 @@ #ifndef MINIMIZE_H_ #define MINIMIZE_H_ -#include <core/multipleDispatch.hpp> -#include <automaton/Automaton.h> #include <automaton/FSM/DFA.h> #include <automaton/TA/DFTA.h> @@ -24,13 +22,8 @@ namespace automaton { namespace simplify { -class Minimize : public alib::SingleDispatch<Minimize, automaton::Automaton, const automaton::AutomatonBase &> { +class Minimize { public: - /** - * @param dfa automaton to minimize - */ - static automaton::Automaton minimize(const automaton::Automaton& dfa); - template < class SymbolType, class StateType > static automaton::DFA < SymbolType, StateType > minimize(const automaton::DFA < SymbolType, StateType >& dfa); diff --git a/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp b/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp index b5476bf141..ddaf711356 100644 --- a/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp +++ b/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp @@ -12,17 +12,8 @@ namespace automaton { namespace simplify { -automaton::Automaton MinimizeBrzozowski::minimize(const automaton::Automaton& automaton) { - automaton::Automaton res = dispatch(automaton.getData()); - res.normalize ( ); - return res; -} - -auto MinimizeBrzozowskiDFA = registration::OverloadRegister < MinimizeBrzozowski, automaton::DFA < DefaultSymbolType, ext::set < ext::set < DefaultStateType > > >, automaton::DFA < > > ( MinimizeBrzozowski::minimize ); -auto MinimizeBrzozowskiNFA = registration::OverloadRegister < MinimizeBrzozowski, automaton::DFA < DefaultSymbolType, ext::set < ext::set < DefaultStateType > > >, automaton::NFA < > > ( MinimizeBrzozowski::minimize ); - -auto MinimizeBrzozowskiDFA2 = registration::AbstractRegister < MinimizeBrzozowski, automaton::DFA < DefaultSymbolType, ext::set < ext::set < DefaultStateType > > >, const automaton::DFA < > & > ( MinimizeBrzozowski::minimize ); -auto MinimizeBrzozowskiNFA2 = registration::AbstractRegister < MinimizeBrzozowski, automaton::DFA < DefaultSymbolType, ext::set < ext::set < DefaultStateType > > >, const automaton::NFA < > & > ( MinimizeBrzozowski::minimize ); +auto MinimizeBrzozowskiDFA = registration::AbstractRegister < MinimizeBrzozowski, automaton::DFA < DefaultSymbolType, ext::set < ext::set < DefaultStateType > > >, const automaton::DFA < > & > ( MinimizeBrzozowski::minimize ); +auto MinimizeBrzozowskiNFA = registration::AbstractRegister < MinimizeBrzozowski, automaton::DFA < DefaultSymbolType, ext::set < ext::set < DefaultStateType > > >, const automaton::NFA < > & > ( MinimizeBrzozowski::minimize ); } /* namespace simplify */ diff --git a/alib2algo/src/automaton/simplify/MinimizeBrzozowski.h b/alib2algo/src/automaton/simplify/MinimizeBrzozowski.h index b022d9c73d..a03162d17f 100644 --- a/alib2algo/src/automaton/simplify/MinimizeBrzozowski.h +++ b/alib2algo/src/automaton/simplify/MinimizeBrzozowski.h @@ -4,12 +4,10 @@ * Created on: 18. 11. 2014 * Author: Tomas Pecka */ - + #ifndef MINIMIZE_BRZOZOWSKI_H_ #define MINIMIZE_BRZOZOWSKI_H_ -#include <core/multipleDispatch.hpp> -#include <automaton/Automaton.h> #include <automaton/FSM/DFA.h> #include <automaton/FSM/NFA.h> #include <automaton/FSM/MultiInitialStateNFA.h> @@ -21,13 +19,8 @@ namespace automaton { namespace simplify { -class MinimizeBrzozowski : public alib::SingleDispatch<MinimizeBrzozowski, automaton::Automaton, const automaton::AutomatonBase &> { +class MinimizeBrzozowski { public: - /** - * @param dfa automaton to minimize - */ - static automaton::Automaton minimize(const automaton::Automaton& dfa); - template < class SymbolType, class StateType > static automaton::DFA < SymbolType, ext::set < ext::set < StateType > > > minimize(const automaton::DFA < SymbolType, StateType > & dfa); template < class SymbolType, class StateType > diff --git a/aminimize2/makefile.conf b/aminimize2/makefile.conf index 5c778a70d8..b5072e4ce9 100644 --- a/aminimize2/makefile.conf +++ b/aminimize2/makefile.conf @@ -1,4 +1,4 @@ EXECUTABLE:=aminimize2 -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/aminimize2/src/aminimize.cpp b/aminimize2/src/aminimize.cpp index ba95aa1d38..84a7ebf879 100644 --- a/aminimize2/src/aminimize.cpp +++ b/aminimize2/src/aminimize.cpp @@ -8,13 +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/simplify/Minimize.h" -#include "automaton/simplify/MinimizeBrzozowski.h" +#include <lexer/Lexer.h> +#include <parser/Parser.h> int main(int argc, char** argv) { try { @@ -44,32 +41,35 @@ 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); - automaton::Automaton automaton = alib::XmlDataFactory::fromTokens (sax::FromXMLParserHelper::parseInput(input)); + cli::Parser parser ( cli::Lexer ( "execute <#stdin > $inputAutomaton" ) ); + parser.parse ( )->run ( environment ); measurements::end(); measurements::start("Algorithm", measurements::Type::MAIN); if(algorithm.getValue() == "hopcroft") { - automaton::Automaton res = automaton::simplify::Minimize::minimize(automaton); - - measurements::end(); - measurements::start("Output write", measurements::Type::AUXILIARY); - - alib::XmlDataFactory::toStdout(res); + parser = cli::Parser ( cli::Lexer ( "execute automaton::simplify::Minimize $inputAutomaton > $outputAutomaton" ) ); } else if(algorithm.getValue() == "brzozowski") { - automaton::Automaton res = automaton::simplify::MinimizeBrzozowski::minimize(automaton); - - measurements::end(); - measurements::start("Output write", measurements::Type::AUXILIARY); - - alib::XmlDataFactory::toStdout(res); + parser = cli::Parser ( cli::Lexer ( "execute automaton::simplify::MinimizeBrzozowski $inputAutomaton > $outputAutomaton" ) ); } else { throw exception::CommonException("Unknown algorithm selected."); } + parser.parse ( )->run ( environment ); + + measurements::end(); + measurements::start("Output write", measurements::Type::AUXILIARY); + + parser = cli::Parser ( cli::Lexer ( "execute $outputAutomaton >#stdout" ) ); + parser.parse ( )->run ( environment ); + measurements::end(); measurements::end(); -- GitLab