diff --git a/astat2/src/AutomataStat.cpp b/astat2/src/AutomataStat.cpp index e023eb4501d5e8ca57f26a7a1d2fc9e2ea76462e..feedb1e67838bf228a319aaa379da888926d2c3d 100644 --- a/astat2/src/AutomataStat.cpp +++ b/astat2/src/AutomataStat.cpp @@ -33,9 +33,143 @@ void AutomataStat::stat(const automaton::NFA& automaton, const Settings& setting case PrintOptions::NOOP: break; } + + switch(settings.finalStates) { + case PrintOptions::PRINT: + alib::DataFactory::toStdout(automaton.getFinalStates()); + break; + case PrintOptions::QUANTITY: + std::cout << automaton.getFinalStates().size() << std::endl; + break; + case PrintOptions::BOTH: + std::cout << automaton.getFinalStates().size() << std::endl; + alib::DataFactory::toStdout(automaton.getFinalStates()); + break; + case PrintOptions::NOOP: + break; + } + + switch(settings.initialStates) { + case PrintOptions::PRINT: + alib::DataFactory::toStdout(automaton.getInitialStates()); + break; + case PrintOptions::QUANTITY: + std::cout << automaton.getInitialStates().size() << std::endl; + break; + case PrintOptions::BOTH: + std::cout << automaton.getInitialStates().size() << std::endl; + alib::DataFactory::toStdout(automaton.getInitialStates()); + break; + case PrintOptions::NOOP: + break; + } + + switch(settings.alphabet) { + case PrintOptions::PRINT: + alib::DataFactory::toStdout(automaton.getInputAlphabet()); + break; + case PrintOptions::QUANTITY: + std::cout << automaton.getInputAlphabet().size() << std::endl; + break; + case PrintOptions::BOTH: + std::cout << automaton.getInputAlphabet().size() << std::endl; + alib::DataFactory::toStdout(automaton.getInputAlphabet()); + break; + case PrintOptions::NOOP: + break; + } + + switch(settings.transitions) { + case PrintOptions::PRINT: + alib::DataFactory::toStdout(automaton.getTransitions()); + break; + case PrintOptions::QUANTITY: + std::cout << automaton.getTransitions().size() << std::endl; + break; + case PrintOptions::BOTH: + std::cout << automaton.getTransitions().size() << std::endl; + alib::DataFactory::toStdout(automaton.getTransitions()); + break; + case PrintOptions::NOOP: + break; + } } void AutomataStat::stat(const automaton::DFA& automaton, const Settings& settings) { + switch(settings.states) { + case PrintOptions::PRINT: + alib::DataFactory::toStdout(automaton.getStates()); + break; + case PrintOptions::QUANTITY: + std::cout << automaton.getStates().size() << std::endl; + break; + case PrintOptions::BOTH: + std::cout << automaton.getStates().size() << std::endl; + alib::DataFactory::toStdout(automaton.getStates()); + break; + case PrintOptions::NOOP: + break; + } + + switch(settings.finalStates) { + case PrintOptions::PRINT: + alib::DataFactory::toStdout(automaton.getFinalStates()); + break; + case PrintOptions::QUANTITY: + std::cout << automaton.getFinalStates().size() << std::endl; + break; + case PrintOptions::BOTH: + std::cout << automaton.getFinalStates().size() << std::endl; + alib::DataFactory::toStdout(automaton.getFinalStates()); + break; + case PrintOptions::NOOP: + break; + } + + switch(settings.initialStates) { + case PrintOptions::PRINT: + alib::DataFactory::toStdout(automaton.getInitialState()); + break; + case PrintOptions::QUANTITY: + std::cout << 1 << std::endl; + break; + case PrintOptions::BOTH: + std::cout << 1 << std::endl; + alib::DataFactory::toStdout(automaton.getInitialState()); + break; + case PrintOptions::NOOP: + break; + } + + switch(settings.alphabet) { + case PrintOptions::PRINT: + alib::DataFactory::toStdout(automaton.getInputAlphabet()); + break; + case PrintOptions::QUANTITY: + std::cout << automaton.getInputAlphabet().size() << std::endl; + break; + case PrintOptions::BOTH: + std::cout << automaton.getInputAlphabet().size() << std::endl; + alib::DataFactory::toStdout(automaton.getInputAlphabet()); + break; + case PrintOptions::NOOP: + break; + } + + switch(settings.transitions) { + case PrintOptions::PRINT: + alib::DataFactory::toStdout(automaton.getTransitions()); + break; + case PrintOptions::QUANTITY: + std::cout << automaton.getTransitions().size() << std::endl; + break; + case PrintOptions::BOTH: + std::cout << automaton.getTransitions().size() << std::endl; + alib::DataFactory::toStdout(automaton.getTransitions()); + break; + case PrintOptions::NOOP: + break; + } } void AutomataStat::Visit(void*, const automaton::UnknownAutomaton&) const { diff --git a/astat2/src/astat.cpp b/astat2/src/astat.cpp index f866469739c04c1b31118e3ac5fa6b120d40e307..bab80d56dc2ffc281e101f8ecf1089a8ecffe650 100644 --- a/astat2/src/astat.cpp +++ b/astat2/src/astat.cpp @@ -29,7 +29,7 @@ int main(int argc, char* argv[]) { TCLAP::ValueArg<std::string> transitions( "t", "transitions", "Print or display number of transitions", false, "noop", &allowedVals); cmd.add(transitions); - TCLAP::UnlabeledValueArg<std::string> file( "file", "Read from file", false, "-", "file"); + TCLAP::UnlabeledValueArg<std::string> file( "file", "Read from file", false, "-", "file"); cmd.add( file ); cmd.parse(argc,argv); @@ -48,11 +48,59 @@ int main(int argc, char* argv[]) { } } + if(finalStates.isSet()) { + if(finalStates.getValue() == "noop") { + settings.finalStates = PrintOptions::NOOP; + } else if(finalStates.getValue() == "print") { + settings.finalStates = PrintOptions::PRINT; + } else if(finalStates.getValue() == "quantity") { + settings.finalStates = PrintOptions::QUANTITY; + } else if(finalStates.getValue() == "both") { + settings.finalStates = PrintOptions::BOTH; + } + } + + if(initialStates.isSet()) { + if(initialStates.getValue() == "noop") { + settings.initialStates = PrintOptions::NOOP; + } else if(initialStates.getValue() == "print") { + settings.initialStates = PrintOptions::PRINT; + } else if(initialStates.getValue() == "quantity") { + settings.initialStates = PrintOptions::QUANTITY; + } else if(initialStates.getValue() == "both") { + settings.initialStates = PrintOptions::BOTH; + } + } + + if(alphabet.isSet()) { + if(alphabet.getValue() == "noop") { + settings.alphabet = PrintOptions::NOOP; + } else if(alphabet.getValue() == "print") { + settings.alphabet = PrintOptions::PRINT; + } else if(alphabet.getValue() == "quantity") { + settings.alphabet = PrintOptions::QUANTITY; + } else if(alphabet.getValue() == "both") { + settings.alphabet = PrintOptions::BOTH; + } + } + + if(transitions.isSet()) { + if(transitions.getValue() == "noop") { + settings.transitions = PrintOptions::NOOP; + } else if(transitions.getValue() == "print") { + settings.transitions = PrintOptions::PRINT; + } else if(transitions.getValue() == "quantity") { + settings.transitions = PrintOptions::QUANTITY; + } else if(transitions.getValue() == "both") { + settings.transitions = PrintOptions::BOTH; + } + } + std::list<sax::Token> tokens; if(file.isSet()) { - sax::SaxParseInterface::parseStdin(tokens); - } else { sax::SaxParseInterface::parseFile(file.getValue(), tokens); + } else { + sax::SaxParseInterface::parseStdin(tokens); } if( alib::FromXMLParsers::automatonParser.first(tokens)) {