From 149f5cd83b7a176c68e4293ab5c390ea5d8a3493 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Mon, 8 Jun 2015 17:06:10 +0200 Subject: [PATCH] + measurement to all algoritm access binaries --- aarbology2/src/aarbology.cpp | 1 + acompaction2/src/acompaction.cpp | 29 +++- acompare2/src/acompare.cpp | 30 +++- aconversions2/src/ConversionHandler.cpp | 180 ++++++++++++++++++------ aconversions2/src/aconversion.cpp | 15 ++ aconvert2/src/aconvert.cpp | 78 ++++++++-- aderivation2/src/aderivation.cpp | 28 +++- adeterminize2/src/adeterminize.cpp | 27 +++- aepsilon2/src/aepsilon.cpp | 106 +++++++++++--- agenerate2/src/agenerate.cpp | 26 +++- aintegral2/src/aintegral.cpp | 28 +++- alangop2/src/alangop.cpp | 102 ++++++++++++-- aminimize2/src/aminimize.cpp | 34 ++++- anormalize2/src/anormalize.cpp | 120 +++++++++++++--- arand2/src/arand.cpp | 58 ++++++-- araw2/src/araw.cpp | 24 ++++ arename2/src/arename.cpp | 28 +++- areverse2/src/areverse.cpp | 28 +++- arun2/src/arun.cpp | 48 +++++-- astat2/src/astat.cpp | 41 ++++-- astringology2/src/astringology.cpp | 89 ++++++++++-- atrim2/src/atrim.cpp | 56 ++++++-- tniceprint/src/tniceprint.cpp | 22 +++ 23 files changed, 1029 insertions(+), 169 deletions(-) diff --git a/aarbology2/src/aarbology.cpp b/aarbology2/src/aarbology.cpp index 4ba348d530..9babf7af9a 100644 --- a/aarbology2/src/aarbology.cpp +++ b/aarbology2/src/aarbology.cpp @@ -54,6 +54,7 @@ int main(int argc, char* argv[]) { std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<std::deque<sax::Token>> subjectTokens; if(subject.isSet()) { for(const std::string& fileName : subject.getValue()) { diff --git a/acompaction2/src/acompaction.cpp b/acompaction2/src/acompaction.cpp index 04c3d201d0..a093feaa6d 100644 --- a/acompaction2/src/acompaction.cpp +++ b/acompaction2/src/acompaction.cpp @@ -11,6 +11,7 @@ #include "exception/AlibException.h" #include "factory/XmlDataFactory.hpp" #include "automaton/transform/Compaction.h" +#include <chrono> int main(int argc, char** argv) { @@ -20,8 +21,17 @@ int main(int argc, char** argv) { TCLAP::ValueArg<std::string> input( "i", "input", "Automaton to compactify", false, "-", "file"); cmd.add( input ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> tokens; if(input.isSet()) { if(input.getValue() == "-") { @@ -33,9 +43,24 @@ int main(int argc, char** argv) { sax::SaxParseInterface::parseStdin(tokens); } - alib::XmlDataFactory::toStdout(automaton::transform::Compaction::convert(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); - return 0; + automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + automaton::Automaton res = automaton::transform::Compaction::convert(automaton); + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + + return 0; } catch (const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); return 1; diff --git a/acompare2/src/acompare.cpp b/acompare2/src/acompare.cpp index 36e8fa8bd4..d7b1a8650a 100644 --- a/acompare2/src/acompare.cpp +++ b/acompare2/src/acompare.cpp @@ -25,8 +25,17 @@ int main(int argc, char** argv) { TCLAP::UnlabeledValueArg<std::string> input2( "input2", "The second input to compare", true, "-", "file"); cmd.add( input2 ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> tokens1; if(input1.isSet()) { if(input1.getValue() == "-") { @@ -57,23 +66,32 @@ int main(int argc, char** argv) { if(alib::XmlDataFactory::first<exception::AlibException>(tokens2)) std::cerr << alib::XmlDataFactory::fromTokens<exception::AlibException>(tokens2).getCause() << std::endl; if(alib::XmlDataFactory::first<exception::AlibException>(tokens1) || alib::XmlDataFactory::first<exception::AlibException>(tokens2)) return 0; + int res; + if(alib::XmlDataFactory::first<automaton::Automaton>(tokens1) && alib::XmlDataFactory::first<automaton::Automaton>(tokens2)) { automaton::Automaton automaton1 = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens1); automaton::Automaton automaton2 = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens2); - return AutomatonCompare::compare(automaton1, automaton2); - } + std::chrono::measurements::end(); + std::chrono::measurements::start("Compare", std::chrono::measurements::Type::MAIN); - if(alib::XmlDataFactory::first<grammar::Grammar>(tokens1) && alib::XmlDataFactory::first<grammar::Grammar>(tokens2)) { + res = AutomatonCompare::compare(automaton1, automaton2); + } else if(alib::XmlDataFactory::first<grammar::Grammar>(tokens1) && alib::XmlDataFactory::first<grammar::Grammar>(tokens2)) { grammar::Grammar grammar1 = alib::XmlDataFactory::fromTokens<grammar::Grammar>(tokens1); grammar::Grammar grammar2 = alib::XmlDataFactory::fromTokens<grammar::Grammar>(tokens2); - return GrammarCompare::compare(grammar1, grammar2); + std::chrono::measurements::end(); + std::chrono::measurements::start("Compare", std::chrono::measurements::Type::MAIN); + + res = GrammarCompare::compare(grammar1, grammar2); + } else { + throw exception::AlibException("Only automata and grammars can be compared."); } - throw exception::AlibException("Only automata and grammars can be compared."); + std::chrono::measurements::end(); + std::chrono::measurements::end(); - return 2; + return res; } catch (const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); return 1; diff --git a/aconversions2/src/ConversionHandler.cpp b/aconversions2/src/ConversionHandler.cpp index 2555aaaf09..932abdee54 100644 --- a/aconversions2/src/ConversionHandler.cpp +++ b/aconversions2/src/ConversionHandler.cpp @@ -101,14 +101,29 @@ void ConversionHandler::convertFAtoRE( void ) { const automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(m_tokens); + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + switch( m_algorithm ) { - case BRZOZOWSKI_ALGEBRAIC: - alib::XmlDataFactory::toStdout(automaton::convert::ToRegExpAlgebraic::convert( automaton ) ); - break; + case BRZOZOWSKI_ALGEBRAIC: { + regexp::RegExp regexp = automaton::convert::ToRegExpAlgebraic::convert( automaton ); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(regexp); + break; + } case STATE_ELIMINATION: - case DEFAULT: - alib::XmlDataFactory::toStdout(automaton::convert::ToRegExpStateElimination::convert(automaton)); - break; + case DEFAULT: { + regexp::RegExp regexp = automaton::convert::ToRegExpStateElimination::convert(automaton); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( regexp ); + break; + } default: throw exception::AlibException( "ConversionHandler: Invalid algorithm." ); } @@ -118,14 +133,29 @@ void ConversionHandler::convertFAtoRG( void ) { const automaton::Automaton fsm = alib::XmlDataFactory::fromTokens<automaton::Automaton>( m_tokens ); + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + switch( m_algorithm ) { - case INCOMING_TRANSITIONS: - alib::XmlDataFactory::toStdout(automaton::convert::ToGrammarLeftRG::convert(fsm)); - break; + case INCOMING_TRANSITIONS: { + grammar::Grammar grammar = automaton::convert::ToGrammarLeftRG::convert(fsm); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( grammar ); + break; + } case OUTGOING_TRANSITIONS: - case DEFAULT: - alib::XmlDataFactory::toStdout(automaton::convert::ToGrammarRightRG::convert(fsm)); - break; + case DEFAULT: { + grammar::Grammar grammar = automaton::convert::ToGrammarRightRG::convert(fsm); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(grammar); + break; + } default: throw exception::AlibException( "ConversionHandler: Invalid algorithm." ); } @@ -137,17 +167,38 @@ void ConversionHandler::convertREtoFA( void ) { const regexp::RegExp regexp = alib::XmlDataFactory::fromTokens<regexp::RegExp>(m_tokens); + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + switch( m_algorithm ) { - case BRZOZOWSKI_DERIVATION: - alib::XmlDataFactory::toStdout(regexp::convert::ToAutomatonDerivation::convert(regexp)); - break; - case THOMPSON_NFA: - alib::XmlDataFactory::toStdout(regexp::convert::ToAutomatonThompson::convert(regexp)); - break; + case BRZOZOWSKI_DERIVATION: { + automaton::Automaton automaton = regexp::convert::ToAutomatonDerivation::convert(regexp); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(automaton); + break; + } + case THOMPSON_NFA: { + automaton::Automaton automaton = regexp::convert::ToAutomatonThompson::convert(regexp); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(automaton); + break; + } case GLUSHKOV_NFA: - case DEFAULT: - alib::XmlDataFactory::toStdout(regexp::convert::ToAutomatonGlushkov::convert(regexp)); - break; + case DEFAULT: { + automaton::NFA automaton = regexp::convert::ToAutomatonGlushkov::convert(regexp); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(automaton); + break; + } default: throw exception::AlibException( "ConversionHandler: Invalid algorithm." ); } @@ -157,14 +208,29 @@ void ConversionHandler::convertREtoRG( void ) { const regexp::RegExp regexp = alib::XmlDataFactory::fromTokens<regexp::RegExp>(m_tokens); + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + switch(m_algorithm) { - case BRZOZOWSKI_DERIVATION: - alib::XmlDataFactory::toStdout(regexp::convert::ToGrammarRightRGDerivation::convert(regexp)); - break; + case BRZOZOWSKI_DERIVATION: { + grammar::RightRG grammar = regexp::convert::ToGrammarRightRGDerivation::convert(regexp); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( grammar ); + break; + } case GLUSHKOV_NFA: - case DEFAULT: - alib::XmlDataFactory::toStdout(regexp::convert::ToGrammarRightRGGlushkov::convert(regexp)); - break; + case DEFAULT: { + grammar::Grammar grammar = regexp::convert::ToGrammarRightRGGlushkov::convert(regexp); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( grammar ); + break; + } default: throw exception::AlibException( "ConversionHandler: Invalid algorithm." ); } @@ -174,10 +240,20 @@ void ConversionHandler::convertREtoRG( void ) void ConversionHandler::convertRGtoFA( void ) { const grammar::Grammar grammar = alib::XmlDataFactory::fromTokens<grammar::Grammar>(m_tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + switch( m_algorithm ) { - case DEFAULT: - alib::XmlDataFactory::toStdout(grammar::convert::ToAutomaton::convert(grammar)); - break; + case DEFAULT: { + automaton::Automaton automaton = grammar::convert::ToAutomaton::convert(grammar); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( automaton ); + break; + } default: throw exception::AlibException( "ConversionHandler: Invalid algorithm." ); } @@ -186,11 +262,20 @@ void ConversionHandler::convertRGtoFA( void ) { void ConversionHandler::convertRGtoRE( void ) { const grammar::Grammar grammar = alib::XmlDataFactory::fromTokens<grammar::Grammar>(m_tokens); + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + switch( m_algorithm ) { case BRZOZOWSKI_ALGEBRAIC: - case DEFAULT: - alib::XmlDataFactory::toStdout(grammar::convert::ToRegExpAlgebraic::convert(grammar)); - break; + case DEFAULT: { + regexp::RegExp regexp = grammar::convert::ToRegExpAlgebraic::convert(grammar); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( regexp ); + break; + } default: throw exception::AlibException( "ConversionHandler: Invalid algorithm." ); } @@ -199,14 +284,30 @@ void ConversionHandler::convertRGtoRE( void ) { void ConversionHandler::convertCFGtoPDA( void ) { const grammar::Grammar grammar = alib::XmlDataFactory::fromTokens<grammar::Grammar>(m_tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + switch( m_algorithm ) { - case TOP_DOWN: - alib::XmlDataFactory::toStdout(grammar::convert::ToAutomaton::convert(grammar)); - break; - case BOTTOM_UP: - alib::XmlDataFactory::toStdout(grammar::convert::ToAutomatonBottomUp::convert(grammar)); - break; + case TOP_DOWN: { + automaton::Automaton automaton = grammar::convert::ToAutomaton::convert(grammar); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( automaton ); + break; + } + case BOTTOM_UP: { + automaton::Automaton automaton = grammar::convert::ToAutomatonBottomUp::convert(grammar); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( automaton ); + break; + } default: throw exception::AlibException( "ConversionHandler: Invalid algorithm." ); } @@ -238,7 +339,6 @@ ConversionHandler::TFormalism ConversionHandler::parseFormalismFromTokens( void if( alib::XmlDataFactory::first<grammar::Grammar>(m_tokens) ) return REGULAR_GRAMMAR; - throw exception::AlibException( "ConversionHandler: Invalid input formalism." ); } diff --git a/aconversions2/src/aconversion.cpp b/aconversions2/src/aconversion.cpp index 25c0e320fe..9a19de88ff 100644 --- a/aconversions2/src/aconversion.cpp +++ b/aconversions2/src/aconversion.cpp @@ -31,8 +31,17 @@ int main(int argc, char* argv[]) TCLAP::ValueArg<std::string> input( "i", "input", "input to convert", false, "-", "file"); cmd.add( input ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> inputTokens; if(input.isSet()) { if(input.getValue() == "-") { @@ -46,6 +55,12 @@ int main(int argc, char* argv[]) ConversionHandler conv( inputTokens, target.getValue(), algorithm.getValue() ); conv.convert( ); + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + return 0; } catch(const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); diff --git a/aconvert2/src/aconvert.cpp b/aconvert2/src/aconvert.cpp index 885ac7b7c6..eb03aa481c 100644 --- a/aconvert2/src/aconvert.cpp +++ b/aconvert2/src/aconvert.cpp @@ -17,44 +17,92 @@ #include "GasTexConverter.h" void automatonFromString(std::istream& in, std::ostream& out) { - alib::XmlDataFactory::toStream(alib::StringDataFactory::fromStream<automaton::Automaton>(in), out); + automaton::Automaton automaton = alib::StringDataFactory::fromStream<automaton::Automaton>(in); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStream( automaton, out); } void grammarFromString(std::istream& in, std::ostream& out) { - alib::XmlDataFactory::toStream(alib::StringDataFactory::fromStream<grammar::Grammar>(in), out); + grammar::Grammar grammar = alib::StringDataFactory::fromStream<grammar::Grammar>(in); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStream( grammar, out); } void regexpFromString(std::istream& in, std::ostream& out) { - alib::XmlDataFactory::toStream(alib::StringDataFactory::fromStream<regexp::RegExp>(in), out); + regexp::RegExp regexp = alib::StringDataFactory::fromStream<regexp::RegExp>(in); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStream( regexp, out ); } void stringFromString(std::istream& in, std::ostream& out) { - alib::XmlDataFactory::toStream(alib::StringDataFactory::fromStream<string::String>(in), out); + string::String string = alib::StringDataFactory::fromStream<string::String>(in); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStream(string, out); } void automatonToString(std::istream& in, std::ostream& out) { - alib::StringDataFactory::toStream(alib::XmlDataFactory::fromStream<automaton::Automaton>(in), out); + automaton::Automaton automaton = alib::XmlDataFactory::fromStream<automaton::Automaton>(in); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::StringDataFactory::toStream( automaton, out); } void grammarToString(std::istream& in, std::ostream& out) { - alib::StringDataFactory::toStream(alib::XmlDataFactory::fromStream<grammar::Grammar>(in), out); + grammar::Grammar grammar = alib::XmlDataFactory::fromStream<grammar::Grammar>(in); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::StringDataFactory::toStream( grammar, out); } void regexpToString(std::istream& in, std::ostream& out) { - alib::StringDataFactory::toStream(alib::XmlDataFactory::fromStream<regexp::RegExp>(in), out); + regexp::RegExp regexp = alib::XmlDataFactory::fromStream<regexp::RegExp>(in); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::StringDataFactory::toStream( regexp, out); } void stringToString(std::istream& in, std::ostream& out) { - alib::StringDataFactory::toStream(alib::XmlDataFactory::fromStream<string::String>(in), out); + string::String string = alib::XmlDataFactory::fromStream<string::String>(in); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::StringDataFactory::toStream( string, out); } void automatonToDot(std::istream& in, std::ostream& out) { automaton::Automaton automaton = alib::XmlDataFactory::fromStream<automaton::Automaton>(in); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + DotConverter::convert(automaton, out); } void automatonToGasTex(std::istream& in, std::ostream& out) { automaton::Automaton automaton = alib::XmlDataFactory::fromStream<automaton::Automaton>(in); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + GasTexConverter::convert(automaton, out); } @@ -95,8 +143,17 @@ int main(int argc, char* argv[]) { TCLAP::ValueArg<std::string> input( "i", "input", "Input file", false, "-", "file"); cmd.add( input ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::istream* in = NULL; if(input.isSet()) { if(input.getValue() == "-") { @@ -134,6 +191,11 @@ int main(int argc, char* argv[]) { delete in; } + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + return 0; } catch (const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); diff --git a/aderivation2/src/aderivation.cpp b/aderivation2/src/aderivation.cpp index c1da231f41..625ff05d61 100644 --- a/aderivation2/src/aderivation.cpp +++ b/aderivation2/src/aderivation.cpp @@ -21,8 +21,17 @@ int main(int argc, char** argv) { TCLAP::ValueArg<std::string> regexp( "r", "regexp", "Regexp to derivate", false, "-", "file"); cmd.add( regexp ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> stringTokens; if(string.isSet()) { if(string.getValue() == "-") { @@ -45,7 +54,24 @@ int main(int argc, char** argv) { sax::SaxParseInterface::parseStdin(regexpTokens); } - alib::XmlDataFactory::toStdout(regexp::RegExpDerivation::derivation(alib::XmlDataFactory::fromTokens<regexp::RegExp>(regexpTokens), alib::XmlDataFactory::fromTokens<string::LinearString>(stringTokens))); + string::LinearString stringData = alib::XmlDataFactory::fromTokens<string::LinearString>(stringTokens); + regexp::RegExp regexpData = alib::XmlDataFactory::fromTokens<regexp::RegExp>(regexpTokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + regexp::RegExp result = regexp::RegExpDerivation::derivation(regexpData, stringData); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(result); + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + return 0; } catch(const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); diff --git a/adeterminize2/src/adeterminize.cpp b/adeterminize2/src/adeterminize.cpp index ec5c98a694..8a8ff3543b 100644 --- a/adeterminize2/src/adeterminize.cpp +++ b/adeterminize2/src/adeterminize.cpp @@ -19,8 +19,17 @@ int main(int argc, char** argv) { TCLAP::ValueArg<std::string> input( "i", "input", "Automaton to determinize", false, "-", "file"); cmd.add( input ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> tokens; if(input.isSet()) { if(input.getValue() == "-") { @@ -32,7 +41,23 @@ int main(int argc, char** argv) { sax::SaxParseInterface::parseStdin(tokens); } - alib::XmlDataFactory::toStdout(automaton::determinize::Determinize::determinize(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); + automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + automaton::Automaton res = automaton::determinize::Determinize::determinize(automaton); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + return 0; } catch (const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); diff --git a/aepsilon2/src/aepsilon.cpp b/aepsilon2/src/aepsilon.cpp index 32e8ec60cb..d643140a5c 100644 --- a/aepsilon2/src/aepsilon.cpp +++ b/aepsilon2/src/aepsilon.cpp @@ -32,8 +32,17 @@ int main(int argc, char** argv) { TCLAP::SwitchArg efficient( "e", "efficient", "Use efficient implementation", false); cmd.add( efficient ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> tokens; if(input.isSet()) { if(input.getValue() == "-") { @@ -46,30 +55,93 @@ int main(int argc, char** argv) { } if(algorithm.getValue() == "outgoing") { - if(efficient.getValue()) - alib::XmlDataFactory::toStdout(automaton::simplify::efficient::EpsilonRemoverOutgoing::remove(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); - else - alib::XmlDataFactory::toStdout(automaton::simplify::EpsilonRemoverOutgoing::remove(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); + automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + if(efficient.getValue()) { + automaton::Automaton res = automaton::simplify::efficient::EpsilonRemoverOutgoing::remove(automaton); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); + } else { + automaton::Automaton res = automaton::simplify::EpsilonRemoverOutgoing::remove(automaton); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); + } } else if(algorithm.getValue() == "incoming") { - if(efficient.getValue()) - alib::XmlDataFactory::toStdout(automaton::simplify::efficient::EpsilonRemoverIncoming::remove(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); - else - alib::XmlDataFactory::toStdout(automaton::simplify::EpsilonRemoverIncoming::remove(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); + automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + if(efficient.getValue()) { + automaton::Automaton res = automaton::simplify::efficient::EpsilonRemoverIncoming::remove(automaton); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); + } else { + automaton::Automaton res = automaton::simplify::EpsilonRemoverIncoming::remove(automaton); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); + } } else if(algorithm.getValue() == "default") { - if(alib::XmlDataFactory::first<automaton::Automaton>(tokens)) - if(efficient.getValue()) - alib::XmlDataFactory::toStdout(automaton::simplify::EpsilonRemoverIncoming::remove(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); - else - alib::XmlDataFactory::toStdout(automaton::simplify::efficient::EpsilonRemoverIncoming::remove(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); - else if(alib::XmlDataFactory::first<grammar::Grammar>(tokens)) - alib::XmlDataFactory::toStdout(grammar::simplify::EpsilonRemover::remove(alib::XmlDataFactory::fromTokens<grammar::Grammar>(tokens))); - else + if(alib::XmlDataFactory::first<automaton::Automaton>(tokens)) { + automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + if(efficient.getValue()) { + automaton::Automaton res = automaton::simplify::EpsilonRemoverIncoming::remove(automaton); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); + } else { + automaton::Automaton res = automaton::simplify::efficient::EpsilonRemoverIncoming::remove(automaton); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); + } + } else if(alib::XmlDataFactory::first<grammar::Grammar>(tokens)) { + grammar::Grammar grammar = alib::XmlDataFactory::fromTokens<grammar::Grammar>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + grammar::Grammar res = grammar::simplify::EpsilonRemover::remove(grammar); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); + } else throw exception::AlibException("Invalid formalism"); } else { throw exception::AlibException("Invalid algorithm"); } - return 0; + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + + return 0; } catch (const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); return 1; diff --git a/agenerate2/src/agenerate.cpp b/agenerate2/src/agenerate.cpp index 7d040e0054..f0e0af1f7c 100644 --- a/agenerate2/src/agenerate.cpp +++ b/agenerate2/src/agenerate.cpp @@ -24,8 +24,17 @@ int main(int argc, char* argv[]) { TCLAP::ValueArg<std::string> grammar( "g", "grammar", "Grammar to use", false, "-", "file"); cmd.add( grammar ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> grammarTokens; if(grammar.isSet()) { if(grammar.getValue() == "-") { @@ -39,13 +48,26 @@ int main(int argc, char* argv[]) { if( upto.isSet() ) { grammar::Grammar grammar = alib::XmlDataFactory::fromTokens<grammar::Grammar>(grammarTokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + std::set<string::LinearString> res = grammar::generate::GenerateUpToLength::generate(grammar, upto.getValue()); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout( res ); - return 0; } else { throw exception::AlibException( "Invalid run type" ); - return 1; } + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + + return 0; } catch ( const exception::AlibException & exception ) { alib::XmlDataFactory::toStdout( exception ); return 1; diff --git a/aintegral2/src/aintegral.cpp b/aintegral2/src/aintegral.cpp index 30621e0b6d..ee69721452 100644 --- a/aintegral2/src/aintegral.cpp +++ b/aintegral2/src/aintegral.cpp @@ -21,8 +21,17 @@ int main(int argc, char** argv) { TCLAP::ValueArg<std::string> regexp( "r", "regexp", "Regexp to derivate", false, "-", "file"); cmd.add( regexp ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> stringTokens; if(string.isSet()) { if(string.getValue() == "-") { @@ -45,7 +54,24 @@ int main(int argc, char** argv) { sax::SaxParseInterface::parseStdin(regexpTokens); } - alib::XmlDataFactory::toStdout(regexp::RegExpIntegral::integral(alib::XmlDataFactory::fromTokens<regexp::RegExp>(regexpTokens), alib::XmlDataFactory::fromTokens<string::LinearString>(stringTokens))); + string::LinearString stringData = alib::XmlDataFactory::fromTokens<string::LinearString>(stringTokens); + regexp::RegExp regexpData = alib::XmlDataFactory::fromTokens<regexp::RegExp>(regexpTokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + regexp::RegExp res = regexp::RegExpIntegral::integral(regexpData, stringData); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + return 0; } catch(const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); diff --git a/alangop2/src/alangop.cpp b/alangop2/src/alangop.cpp index d6dea3a435..a2808c7652 100644 --- a/alangop2/src/alangop.cpp +++ b/alangop2/src/alangop.cpp @@ -43,8 +43,17 @@ int main(int argc, char* argv[]) { cmd.add( a1 ); cmd.add( a2 ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc,argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> a1Tokens, a2Tokens; if(a1.isSet()) { if(a1.getValue() == "-") { @@ -70,34 +79,97 @@ int main(int argc, char* argv[]) { if( algorithm.getValue() == "unionEpsilon") { automaton::Automaton automaton2 = alib::XmlDataFactory::fromTokens<automaton::Automaton>(a2Tokens); - alib::XmlDataFactory::toStdout(automaton::transform::AutomataUnionEpsilonTransition::unification(automaton1, automaton2)); - return 0; + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + automaton::Automaton res = automaton::transform::AutomataUnionEpsilonTransition::unification(automaton1, automaton2); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( res ); + } else if( algorithm.getValue() == "unionCartesian") { automaton::Automaton automaton2 = alib::XmlDataFactory::fromTokens<automaton::Automaton>(a2Tokens); - alib::XmlDataFactory::toStdout(automaton::transform::AutomataUnionCartesianProduct::unification(automaton1, automaton2)); - return 0; + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + automaton::Automaton res = automaton::transform::AutomataUnionCartesianProduct::unification(automaton1, automaton2); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( res ); } else if( algorithm.getValue() == "concatenationEpsilon") { automaton::Automaton automaton2 = alib::XmlDataFactory::fromTokens<automaton::Automaton>(a2Tokens); - alib::XmlDataFactory::toStdout(automaton::transform::AutomataConcatenationEpsilonTransition::concatenation(automaton1, automaton2)); - return 0; + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + automaton::Automaton res = automaton::transform::AutomataConcatenationEpsilonTransition::concatenation(automaton1, automaton2); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( res ); } else if( algorithm.getValue() == "concatenation") { automaton::Automaton automaton2 = alib::XmlDataFactory::fromTokens<automaton::Automaton>(a2Tokens); - alib::XmlDataFactory::toStdout(automaton::transform::AutomataConcatenation::concatenation(automaton1, automaton2)); - return 0; + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + automaton::Automaton res = automaton::transform::AutomataConcatenation::concatenation(automaton1, automaton2); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( res ); } else if( algorithm.getValue() == "intersectionCartesian") { automaton::Automaton automaton2 = alib::XmlDataFactory::fromTokens<automaton::Automaton>(a2Tokens); - alib::XmlDataFactory::toStdout(automaton::transform::AutomataIntersectionCartesianProduct::intersection(automaton1, automaton2)); - return 0; + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + automaton::Automaton res = automaton::transform::AutomataIntersectionCartesianProduct::intersection(automaton1, automaton2); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( res ); } else if( algorithm.getValue() == "iteration") { - alib::XmlDataFactory::toStdout(automaton::transform::AutomatonIteration::iteration(automaton1)); - return 0; + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + automaton::Automaton res = automaton::transform::AutomatonIteration::iteration(automaton1); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( res ); } else if( algorithm.getValue() == "iterationEpsilon") { - alib::XmlDataFactory::toStdout(automaton::transform::AutomatonIterationEpsilonTransition::iteration(automaton1)); - return 0; + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + automaton::Automaton res = automaton::transform::AutomatonIterationEpsilonTransition::iteration(automaton1); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( res ); } else { throw exception::AlibException( "Invalid algorithm" ); - return 1; } + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + + return 0; } catch( const exception::AlibException & exception ) { alib::XmlDataFactory::toStdout( exception ); return 1; diff --git a/aminimize2/src/aminimize.cpp b/aminimize2/src/aminimize.cpp index 1290a94677..430faf5993 100644 --- a/aminimize2/src/aminimize.cpp +++ b/aminimize2/src/aminimize.cpp @@ -26,8 +26,17 @@ int main(int argc, char** argv) { TCLAP::ValueArg<std::string> algorithm( "a", "algorithm", "Use specific algorithm. Hopcroft default.", false, "hopcroft", &algorithmVals); cmd.add( algorithm ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> tokens; if(input.isSet()) { if(input.getValue() == "-") { @@ -39,16 +48,35 @@ int main(int argc, char** argv) { sax::SaxParseInterface::parseStdin(tokens); } + automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + if(algorithm.getValue() == "hopcroft") { - alib::XmlDataFactory::toStdout(automaton::simplify::Minimize::minimize(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); + automaton::Automaton res = automaton::simplify::Minimize::minimize(automaton); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); } else if(algorithm.getValue() == "brzozowski") { - alib::XmlDataFactory::toStdout(automaton::simplify::MinimizeBrzozowski::minimize(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); + automaton::Automaton res = automaton::simplify::MinimizeBrzozowski::minimize(automaton); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); } else { throw exception::AlibException("Unknown algorithm selected."); } - return 0; + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + return 0; } catch (const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); return 1; diff --git a/anormalize2/src/anormalize.cpp b/anormalize2/src/anormalize.cpp index b70a34215e..f7626cead5 100644 --- a/anormalize2/src/anormalize.cpp +++ b/anormalize2/src/anormalize.cpp @@ -43,8 +43,17 @@ int main(int argc, char** argv) { TCLAP::ValueArg<std::string> alphabet( "a", "alphabet", "Normalize alphabet", false, "", &inputTypeVals2); cmd.add( alphabet ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> tokens; if(input.isSet()) { if(input.getValue() == "-") { @@ -57,32 +66,111 @@ int main(int argc, char** argv) { } if(labels.getValue() == "automaton") { - alib::XmlDataFactory::toStdout(automaton::simplify::Normalize::normalize(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); - return 0; + automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + automaton::Automaton res = automaton::simplify::Normalize::normalize(automaton); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); } else if(labels.getValue() == "grammar") { -// alib::XmlDataFactory::toStdout(automaton::simplify::Normalize::normalize(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); - return 0; +// grammar::Grammar grammar = alib::XmlDataFactory::fromTokens<grammar::Grammar>( tokens ); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + +// grammar::Grammar res = grammar::simplify::Normalize::normalize(grammar); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + +// alib::XmlDataFactory::toStdout(res); } else if(alphabet.getValue() == "string") { - alib::XmlDataFactory::toStdout(string::simplify::NormalizeAlphabet::normalize(alib::XmlDataFactory::fromTokens<string::String>(tokens))); - return 0; + string::String string = alib::XmlDataFactory::fromTokens<string::String>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + string::String res = string::simplify::NormalizeAlphabet::normalize(string); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); } else if(form.getValue() == "leftRG") { - alib::XmlDataFactory::toStdout(grammar::convert::ToGrammarLeftRG::convert(alib::XmlDataFactory::fromTokens<grammar::Grammar>( tokens ))); - return 0; + grammar::Grammar grammar = alib::XmlDataFactory::fromTokens<grammar::Grammar>( tokens ); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + grammar::LeftRG res = grammar::convert::ToGrammarLeftRG::convert(grammar); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); } else if(form.getValue() == "rightRG") { - alib::XmlDataFactory::toStdout(grammar::convert::ToGrammarRightRG::convert(alib::XmlDataFactory::fromTokens<grammar::Grammar>( tokens ))); - return 0; + grammar::Grammar grammar = alib::XmlDataFactory::fromTokens<grammar::Grammar>( tokens ); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + grammar::RightRG res = grammar::convert::ToGrammarRightRG::convert(grammar); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); } else if(form.getValue() == "singleInitialState") { - alib::XmlDataFactory::toStdout(automaton::simplify::SingleInitialState::convert(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); - return 0; + automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + automaton::Automaton res = automaton::simplify::SingleInitialState::convert(automaton); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); } else if(form.getValue() == "CNF") { - alib::XmlDataFactory::toStdout(grammar::simplify::ToCNF::convert(alib::XmlDataFactory::fromTokens<grammar::Grammar>( tokens ))); - return 0; + grammar::Grammar grammar = alib::XmlDataFactory::fromTokens<grammar::Grammar>( tokens ); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + grammar::Grammar res = grammar::simplify::ToCNF::convert(grammar); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); } else if(form.getValue() == "GNF") { - alib::XmlDataFactory::toStdout(grammar::simplify::ToGNF::convert(alib::XmlDataFactory::fromTokens<grammar::Grammar>( tokens ))); - return 0; + grammar::Grammar grammar = alib::XmlDataFactory::fromTokens<grammar::Grammar>( tokens ); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + grammar::Grammar res = grammar::simplify::ToGNF::convert(grammar); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); } else { throw exception::AlibException("Invalid normalize command"); } + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + + return 0; } catch (const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); return 1; diff --git a/arand2/src/arand.cpp b/arand2/src/arand.cpp index 8779ef1bc0..63117b7c08 100644 --- a/arand2/src/arand.cpp +++ b/arand2/src/arand.cpp @@ -60,64 +60,92 @@ int main(int argc, char* argv[]) { TCLAP::ValueArg<int> maxRank( "", "rank", "Maximal rank of tree nodes", false, 5, "integer"); cmd.add( maxRank ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc,argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + if(!type.isSet()) throw exception::AlibException("Type is not defined."); if( type.getValue() == "FSM" ) { - - if(!density.isSet()) throw exception::AlibException("Density is not defined."); if( density.getValue() < 1 || density.getValue() > 100 ) { //TODO: floating point arithmetic throw exception::AlibException("You must specify density as a number between 1 and 100."); } - if(!states.isSet()) throw exception::AlibException("Number of states is not defined."); - if(!alphabetSize.isSet()) throw exception::AlibException("Alphabet size is not defined."); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); automaton::NFA res = automaton::generate::RandomAutomatonFactory::generateNFA( states.getValue(), alphabetSize.getValue(), randomizedAlphabet.getValue(), density.getValue() ); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout(res); } else if( type.getValue() == "CFG" ) { - - if(!density.isSet()) throw exception::AlibException("Density is not defined."); if( density.getValue() < 1 || density.getValue() > 100 ) { //TODO: floating point arithmetic throw exception::AlibException("You must specify density as a number between 1 and 100."); } - if(!nonterminals.isSet()) throw exception::AlibException("Number of nonterminals is not defined."); - if(!alphabetSize.isSet()) throw exception::AlibException("Alphabet size is not defined."); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); grammar::CFG res = grammar::generate::RandomGrammarFactory::generateCFG( nonterminals.getValue(), alphabetSize.getValue(), randomizedAlphabet.getValue(), density.getValue() ); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout(res); } else if( type.getValue() == "RE" ) { + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); - if(!height.isSet()) throw exception::AlibException("Height is not defined."); + regexp::UnboundedRegExp res = regexp::generate::RandomRegExpFactory::generateUnboundedRegExp(terminalNodes.getValue(), height.getValue(), alphabetSize.getValue(), randomizedAlphabet.getValue() ); - if(!terminalNodes.isSet()) throw exception::AlibException("Number of terminal nodes is not defined."); - if(!alphabetSize.isSet()) throw exception::AlibException("Alphabet size is not defined."); + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); - regexp::UnboundedRegExp res = regexp::generate::RandomRegExpFactory::generateUnboundedRegExp(terminalNodes.getValue(), height.getValue(), alphabetSize.getValue(), randomizedAlphabet.getValue() ); alib::XmlDataFactory::toStdout(res); } else if( type.getValue() == "ST" ) { + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); - if(!length.isSet()) throw exception::AlibException("Size is not defined."); + string::LinearString res = string::generate::RandomStringFactory::generateLinearString(length.getValue(), alphabetSize.getValue(), randomizedAlphabet.getValue() ); - if(!alphabetSize.isSet()) throw exception::AlibException("Alphabet size is not defined."); + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); - string::LinearString res = string::generate::RandomStringFactory::generateLinearString(length.getValue(), alphabetSize.getValue(), randomizedAlphabet.getValue() ); alib::XmlDataFactory::toStdout(res); } else if( type.getValue() == "UT" ) { + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + tree::UnrankedTree res = tree::generate::RandomTreeFactory::generateUnrankedTree(height.getValue(), nodes.getValue(), alphabetSize.getValue(), randomizedAlphabet.getValue(), maxRank.getValue()); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout(res); } else if( type.getValue() == "RT" ) { + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + tree::RankedTree res = tree::generate::RandomTreeFactory::generateRankedTree(height.getValue(), nodes.getValue(), alphabetSize.getValue(), randomizedAlphabet.getValue(), maxRank.getValue()); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout(res); } else { throw exception::AlibException("Invalid type."); } + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + return 0; } catch( const exception::AlibException & exception ) { alib::XmlDataFactory::toStdout( exception ); diff --git a/araw2/src/araw.cpp b/araw2/src/araw.cpp index 356a1138bd..dca118b4e5 100644 --- a/araw2/src/araw.cpp +++ b/araw2/src/araw.cpp @@ -39,7 +39,17 @@ int main(int argc, char** argv) { TCLAP::SwitchArg matrix_to_raw( "", "matrix_to_raw", "Convert string to raw representation (csv)"); cmd.add( matrix_to_raw ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + if(tree_from_raw.getValue()) { std::deque<sax::Token> tokens; if(input.isSet()) { @@ -54,6 +64,10 @@ int main(int argc, char** argv) { std::deque<sax::Token>::iterator iter = tokens.begin(); tree::Tree tree = alib::FromRawParsers::treeParser.parseTree(iter); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout(tree); } else if(tree_to_raw.getValue()) { std::deque<sax::Token> tokens; @@ -68,12 +82,22 @@ int main(int argc, char** argv) { } tree::Tree tree = alib::XmlDataFactory::fromTokens<tree::Tree>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> tokens2; alib::ToRawComposers::treeComposer.compose(tokens2, tree); sax::SaxComposeInterface::printStdout(tokens2); } else { throw exception::AlibException("Invalid input format specified"); } + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + return 0; } catch(const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); diff --git a/arename2/src/arename.cpp b/arename2/src/arename.cpp index af46fc99d6..34d69a3bd8 100644 --- a/arename2/src/arename.cpp +++ b/arename2/src/arename.cpp @@ -19,8 +19,17 @@ int main(int argc, char** argv) { TCLAP::ValueArg<std::string> input( "i", "input", "Automaton to rename", false, "-", "file"); cmd.add( input ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> tokens; if(input.isSet()) { if(input.getValue() == "-") { @@ -32,9 +41,24 @@ int main(int argc, char** argv) { sax::SaxParseInterface::parseStdin(tokens); } - alib::XmlDataFactory::toStdout(automaton::simplify::Rename::rename(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); - return 0; + automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + automaton::Automaton res = automaton::simplify::Rename::rename(automaton); + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + + return 0; } catch (const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); return 1; diff --git a/areverse2/src/areverse.cpp b/areverse2/src/areverse.cpp index 1ced05b837..da282230ee 100644 --- a/areverse2/src/areverse.cpp +++ b/areverse2/src/areverse.cpp @@ -20,8 +20,17 @@ int main(int argc, char** argv) { TCLAP::ValueArg<std::string> input( "i", "input", "Automaton to reverse", false, "-", "file"); cmd.add( input ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> tokens; if(input.isSet()) { if(input.getValue() == "-") { @@ -33,9 +42,24 @@ int main(int argc, char** argv) { sax::SaxParseInterface::parseStdin(tokens); } - alib::XmlDataFactory::toStdout(automaton::transform::Reverse::convert(alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens))); - return 0; + automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + automaton::Automaton res = automaton::transform::Reverse::convert(automaton); + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout(res); + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + + return 0; } catch (const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); return 1; diff --git a/arun2/src/arun.cpp b/arun2/src/arun.cpp index d08b2b3b79..3271cf66ac 100644 --- a/arun2/src/arun.cpp +++ b/arun2/src/arun.cpp @@ -39,8 +39,17 @@ int main(int argc, char* argv[]) { TCLAP::ValueArg<std::string> automaton( "a", "automaton", "Automaton to run", false, "-", "file"); cmd.add( automaton ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> inputTokens; if(input.isSet()) { if(input.getValue() == "-") { @@ -63,26 +72,43 @@ int main(int argc, char* argv[]) { sax::SaxParseInterface::parseStdin(automatonTokens); } + alib::Object inputData = alib::XmlDataFactory::fromTokens<alib::Object>(inputTokens); + automaton::Automaton automatonData = alib::XmlDataFactory::fromTokens<automaton::Automaton>(automatonTokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + if( type.getValue() == "occurrences") { - alib::Object input = alib::XmlDataFactory::fromTokens<alib::Object>(inputTokens); - automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(automatonTokens); - std::set<unsigned> res = automaton::run::Occurrences::occurrences(automaton, input); + std::set<unsigned> res = automaton::run::Occurrences::occurrences(automatonData, inputData); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout( res ); - return 0; } else if( type.getValue() == "accept") { - alib::Object input = alib::XmlDataFactory::fromTokens<alib::Object>(inputTokens); - automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(automatonTokens); - bool res = automaton::run::Accept::accept(automaton, input); + bool res = automaton::run::Accept::accept(automatonData, inputData); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout( res ); } else if( type.getValue() == "result") { - alib::Object input = alib::XmlDataFactory::fromTokens<alib::Object>(inputTokens); - automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(automatonTokens); - label::Label res = automaton::run::Result::result(automaton, input); + label::Label res = automaton::run::Result::result(automatonData, inputData); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout( res ); } else { throw exception::AlibException( "Invalid run type" ); - return 1; } + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + + return 0; } catch ( const exception::AlibException & exception ) { alib::XmlDataFactory::toStdout( exception ); return 1; diff --git a/astat2/src/astat.cpp b/astat2/src/astat.cpp index e5da34a233..9e40a770be 100644 --- a/astat2/src/astat.cpp +++ b/astat2/src/astat.cpp @@ -56,8 +56,17 @@ int main(int argc, char* argv[]) { TCLAP::ValueArg<std::string> file( "i", "input", "Read from file", false, "-", "file"); cmd.add( file ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + PrintingOptions printingOption = translatePrintingOptions(presentation.getValue()); std::deque<sax::Token> tokens; @@ -92,29 +101,43 @@ int main(int argc, char* argv[]) { } automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens); - AutomataStat::stat(automaton, settings); - return 0; + std::chrono::measurements::end(); + std::chrono::measurements::start("Stats print", std::chrono::measurements::Type::MAIN); + + AutomataStat::stat(automaton, settings); } else if( alib::XmlDataFactory::first<grammar::Grammar>(tokens) /* && grammar.isSet() */) { - grammar::Grammar grammar = alib::XmlDataFactory::fromTokens<grammar::Grammar>(tokens); - return 0; + std::chrono::measurements::end(); + std::chrono::measurements::start("Stats print", std::chrono::measurements::Type::MAIN); + + grammar::Grammar grammar = alib::XmlDataFactory::fromTokens<grammar::Grammar>(tokens); } else if( alib::XmlDataFactory::first<regexp::RegExp>(tokens) /* && regexp.isSet() */) { - regexp::RegExp regexp = alib::XmlDataFactory::fromTokens<regexp::RegExp>(tokens); - return 0; + std::chrono::measurements::end(); + std::chrono::measurements::start("Stats print", std::chrono::measurements::Type::MAIN); + + regexp::RegExp regexp = alib::XmlDataFactory::fromTokens<regexp::RegExp>(tokens); } else if( alib::XmlDataFactory::first<container::ObjectsSet>(tokens) && setContainer.isSet()) { + + std::chrono::measurements::end(); + std::chrono::measurements::start("Stats print", std::chrono::measurements::Type::MAIN); + SetSettings settings = {PrintingOptions::NOOP}; settings.general = printingOption; container::ObjectsSet data = alib::XmlDataFactory::fromTokens<container::ObjectsSet>(tokens); SetStat::stat(data, settings); - - return 0; } else { throw exception::AlibException( "Input not recognized." ); - return 1; } + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + + return 0; } catch ( const exception::AlibException & exception ) { alib::XmlDataFactory::toStdout( exception ); return 1; diff --git a/astringology2/src/astringology.cpp b/astringology2/src/astringology.cpp index fee3b130ed..79cd933851 100644 --- a/astringology2/src/astringology.cpp +++ b/astringology2/src/astringology.cpp @@ -47,6 +47,12 @@ int main(int argc, char* argv[]) { TCLAP::MultiArg<std::string> pattern( "p", "pattern", "Pattern string from file", false, "file"); cmd.add( pattern ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc,argv); int needPattern = 0; @@ -70,6 +76,9 @@ int main(int argc, char* argv[]) { } else { } + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<std::deque<sax::Token>> subjectTokens; if(subject.isSet()) { for(const std::string& fileName : subject.getValue()) { @@ -107,52 +116,114 @@ int main(int argc, char* argv[]) { if( algorithm.getValue() == "exactFactorMatch") { string::String subject = alib::XmlDataFactory::fromTokens<string::String>(subjectTokens.front()); string::String pattern = alib::XmlDataFactory::fromTokens<string::String>(patternTokens.front()); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + std::set<unsigned> res = stringology::exact::ExactFactorMatch::match(subject, pattern); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout(res); - return 0; } else if( algorithm.getValue() == "boyerMooreHorspool") { string::String subject = alib::XmlDataFactory::fromTokens<string::String>(subjectTokens.front()); string::String pattern = alib::XmlDataFactory::fromTokens<string::String>(patternTokens.front()); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + std::set<unsigned> res = stringology::exact::BoyerMooreHorspool::match(subject, pattern); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout(res); - return 0; } else if( algorithm.getValue() == "exactMatchingAutomaton") { string::String pattern = alib::XmlDataFactory::fromTokens<string::String>(patternTokens.front()); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + automaton::Automaton automaton = stringology::exact::ExactMatchingAutomaton::construct(pattern); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout(automaton); - return 0; } else if( algorithm.getValue() == "exactFactorAutomaton") { string::String subject = alib::XmlDataFactory::fromTokens<string::String>(subjectTokens.front()); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + automaton::Automaton automaton = stringology::exact::ExactFactorAutomaton::construct(subject); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout(automaton); - return 0; } else if( algorithm.getValue() == "exactSubsequenceAutomaton") { string::String subject = alib::XmlDataFactory::fromTokens<string::String>(subjectTokens.front()); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + automaton::Automaton automaton = stringology::exact::ExactSubsequenceAutomaton::construct(subject); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout(automaton); - return 0; } else if( algorithm.getValue() == "exactNondeterministicSubsequenceAutomaton") { string::String subject = alib::XmlDataFactory::fromTokens<string::String>(subjectTokens.front()); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + automaton::Automaton automaton = stringology::exact::ExactNondeterministicSubsequenceAutomaton::construct(subject); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout(automaton); - return 0; } else if( algorithm.getValue() == "exactMultiNondeterministicSubsequenceAutomaton") { std::set<string::String> subjects; for(std::deque<sax::Token>& tokens : subjectTokens) { subjects.insert(alib::XmlDataFactory::fromTokens<string::String>(tokens)); } + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + automaton::Automaton automaton = stringology::exact::ExactMultiNondeterministicSubsequenceAutomaton::construct(subjects); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout(automaton); - return 0; } else if( algorithm.getValue() == "borderArray") { string::String subject = alib::XmlDataFactory::fromTokens<string::String>(subjectTokens.front()); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + std::vector<unsigned> borderArray = stringology::exact::BorderArray::construct(subject); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout(borderArray); - return 0; } else { throw exception::AlibException( "Invalid algorithm" ); - return 1; } + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + + return 0; } catch( const exception::AlibException & exception ) { alib::XmlDataFactory::toStdout( exception ); return 1; diff --git a/atrim2/src/atrim.cpp b/atrim2/src/atrim.cpp index 55363ffc7b..66141dc2f1 100644 --- a/atrim2/src/atrim.cpp +++ b/atrim2/src/atrim.cpp @@ -74,8 +74,17 @@ int main(int argc, char* argv[]) { TCLAP::SwitchArg efficient( "e", "efficient", "Use efficient implementation", false); cmd.add( efficient ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> tokens; if(input.isSet()) { if(input.getValue() == "-") { @@ -90,29 +99,58 @@ int main(int argc, char* argv[]) { if( alib::XmlDataFactory::first<automaton::Automaton>(tokens)) { automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens); - if(efficient.getValue()) - alib::XmlDataFactory::toStdout( efficientTrimAutomaton(automaton, unreachable.getValue(), useless.getValue() ) ); - else - alib::XmlDataFactory::toStdout( trimAutomaton(automaton, unreachable.getValue(), useless.getValue() ) ); - return 0; + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + if(efficient.getValue()) { + automaton::Automaton res = efficientTrimAutomaton(automaton, unreachable.getValue(), useless.getValue() ); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( res ); + } else { + automaton::Automaton res = trimAutomaton(automaton, unreachable.getValue(), useless.getValue() ); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + + alib::XmlDataFactory::toStdout( res ); + } } else if( alib::XmlDataFactory::first<grammar::Grammar>(tokens)) { grammar::Grammar grammar = alib::XmlDataFactory::fromTokens<grammar::Grammar>(tokens); + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + grammar::Grammar res = trimGrammar(grammar, unreachable.getValue(), useless.getValue() ); + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + alib::XmlDataFactory::toStdout( res ); - return 0; } else if( alib::XmlDataFactory::first<regexp::RegExp>(tokens)) { regexp::RegExp regexp = alib::XmlDataFactory::fromTokens<regexp::RegExp>(tokens); - regexp::RegExp res = optimizeRegExp(regexp ); + std::chrono::measurements::end(); + std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + + regexp::RegExp res = optimizeRegExp( regexp ); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); alib::XmlDataFactory::toStdout( res ); - return 0; } else { throw exception::AlibException( "Input not recognized." ); - return 1; } + + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + + return 0; } catch( const exception::AlibException & exception ) { alib::XmlDataFactory::toStdout( exception ); return 1; diff --git a/tniceprint/src/tniceprint.cpp b/tniceprint/src/tniceprint.cpp index 676884a3b8..28d94650a8 100644 --- a/tniceprint/src/tniceprint.cpp +++ b/tniceprint/src/tniceprint.cpp @@ -20,8 +20,17 @@ int main(int argc, char** argv) { TCLAP::ValueArg<std::string> input( "i", "input", "Input to nice print", false, "-", "file"); cmd.add( input ); + TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); + cmd.add( measure ); + + TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); + cmd.add( verbose ); + cmd.parse(argc, argv); + std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); + std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + std::deque<sax::Token> tokens; if(input.isSet()) { if(input.getValue() == "-") { @@ -35,12 +44,25 @@ int main(int argc, char** argv) { if (alib::XmlDataFactory::first<tree::RankedTree>(tokens)) { const tree::RankedTree & tree = alib::XmlDataFactory::fromTokens<tree::RankedTree>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + tree.nicePrint(std::cout); } else if (alib::XmlDataFactory::first<tree::UnrankedTree>(tokens)) { const tree::UnrankedTree & tree = alib::XmlDataFactory::fromTokens<tree::UnrankedTree>(tokens); + + std::chrono::measurements::end(); + std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + tree.nicePrint(std::cout); } else throw exception::AlibException("no tree on input"); + std::chrono::measurements::end(); + std::chrono::measurements::end(); + + if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + return 0; } catch(const exception::AlibException& exception) { alib::XmlDataFactory::toStdout(exception); -- GitLab