/** * Copyright (c) 2009-2011, The HATS Consortium. All rights reserved. * This file is licensed under the terms of the Modified BSD License. */ package deadlock.analyser; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import abs.common.NotImplementedYetException; import abs.common.WrongProgramArgumentException; import abs.frontend.ast.Model; import abs.frontend.delta.DeltaModellingException; import abs.frontend.parser.Main; public class Tester extends Main { protected int numberOfIterations = 3; private int fixpointVersion = 2; public static void main(final String... args) { // TODO Auto-generated method stub try { new Tester().compile(args); } catch (NotImplementedYetException e) { System.err.println(e.getMessage()); System.exit(0); } catch (Exception e) { System.err.println("An error occurred during compilation:\n" + e.getMessage()); if (Arrays.asList(args).contains("-debug")) { e.printStackTrace(); } System.exit(1); } } private void compile(String[] args) throws DeltaModellingException, IOException, WrongProgramArgumentException, ParserConfigurationException { // TODO Auto-generated method stub final Model model = this.parse(args); if (model.hasParserErrors() || model.hasErrors() || model.hasTypeErrors()) return; if (verbose) { System.out.println("Starting deadlock analysis..."); } /*Instantiate the analyzer and perform deadlock analysis*/ Analyser a = new Analyser(); a.deadlockAnalysis(model, verbose, numberOfIterations, fixpointVersion, System.out); } @Override public List<String> parseArgs(String[] args) { List<String> restArgs = super.parseArgs(args); List<String> remainingArgs = new ArrayList<String>(); for (int i = 0; i < restArgs.size(); i++) { String arg = restArgs.get(i); if (arg.startsWith("-it=")){ try{ numberOfIterations = Integer.parseInt(arg.split("=")[1]); } catch (Exception e) { System.err.println("The number of iterations (-it) should be an integer"); System.exit(1); } } else if (arg.startsWith("-fixPointVersion=")){ try{ fixpointVersion = Integer.parseInt(arg.split("=")[1]); } catch (Exception e) { System.err.println(restArgs.toString()); System.err.println(e.toString()); System.err.println("The fix point version (-fixPointVersion) should be an integer. Default value 1 for original version, value 2 for the newest version"); System.exit(1); } } else { remainingArgs.add(arg); } } return remainingArgs; } @Override protected void printUsage() { super.printUsage(); System.out.println("Deadlock analyzer:\n" + " -it=<var> max number of iterations before saturating\n" + " -fixPointVersion=<var> Default value 1 for original version, value 2 for the newest version\n"); } }