-
Jan Trávníček authoredJan Trávníček authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
adiff.cpp 1.88 KiB
//============================================================================
// 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;
}
}