//============================================================================ // Name : adiff.cpp // Author : Honza // Version : // Copyright : // Description : //============================================================================ #include <iostream> #include "automaton/UnknownAutomaton.h" #include "grammar/UnknownGrammar.h" #include "factory/DataFactory.hpp" #include "exception/AlibException.h" #include "AutomatonDiff.h" #include "GrammarDiff.h" int main(int argc, char** argv) { try { if (argc == 2 && std::string("-h").compare(argv[1]) == 0) { std::cout << "Diff." << std::endl << "Usage: adiff file.xml file.xml" << std::endl; return -1; } std::list<sax::Token> tokens1; std::list<sax::Token> tokens2; if (argc == 3) { sax::SaxParseInterface::parseFile(argv[1], tokens1); sax::SaxParseInterface::parseFile(argv[2], tokens2); if(alib::FromXMLParsers::automatonParser.first(tokens1) && alib::FromXMLParsers::automatonParser.first(tokens2)) { automaton::Automaton automaton1 = alib::DataFactory::fromTokens<automaton::Automaton>(tokens1); automaton::Automaton automaton2 = alib::DataFactory::fromTokens<automaton::Automaton>(tokens2); return AutomatonDiff::diff(automaton1, automaton2); } if(alib::FromXMLParsers::grammarParser.first(tokens1) && alib::FromXMLParsers::grammarParser.first(tokens2)) { grammar::Grammar grammar1 = alib::DataFactory::fromTokens<grammar::Grammar>(tokens1); grammar::Grammar grammar2 = alib::DataFactory::fromTokens<grammar::Grammar>(tokens2); return GrammarDiff::diff(grammar1, grammar2); } std::cout << "Only automata and grammars can be differenciated." << std::endl; return 2; } std::cout << "Nothing to differ." << std::endl; return -1; } catch (const exception::AlibException& e) { std::cout << e.getCause() << std::endl; return 1; } catch (...) { return 127; } }