X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Repair%2FRepairCompiler%2FMCC%2FCLI.java;h=7a38d83066ff4a605133cdf2ccefcb1e78e4769c;hb=3e4091248270631ee6dab18b323d0c441a4e4ae1;hp=96690778369cd69fb9216e4a1b9996f5f165005f;hpb=6eb0d44a90242a5a01db9b8c5c0acebf2bd42347;p=repair.git diff --git a/Repair/RepairCompiler/MCC/CLI.java b/Repair/RepairCompiler/MCC/CLI.java index 9669077..7a38d83 100755 --- a/Repair/RepairCompiler/MCC/CLI.java +++ b/Repair/RepairCompiler/MCC/CLI.java @@ -1,7 +1,7 @@ package MCC; -import java.util.Vector; -import java.util.StringTokenizer; +import java.util.*; +import MCC.IR.DebugItem; /** * A generic command-line interface for 6.035 compilers. This class @@ -11,47 +11,9 @@ import java.util.StringTokenizer; * files. * * @author le01, 6.035 Staff (6.035-staff@mit.edu) - * @version $Id: CLI.java,v 1.1 2003/07/07 16:13:33 droy Exp $ + * @version $Id: CLI.java,v 1.16 2005/10/02 05:13:26 bdemsky Exp $ */ public class CLI { - /** - * Target value indicating that the compiler should produce its - * default output. - */ - public static final int DEFAULT = 0; - - /** - * Target value indicating that the compiler should scan the input - * and stop. - */ - public static final int SCAN = 1; - - /** - * Target value indicating that the compiler should scan and parse - * its input, and stop. - */ - public static final int PARSE = 2; - - /** - * Target value indicating that the compiler should produce a - * high-level intermediate representation from its input, and stop. - * This is not one of the segment targets for Fall 2000, but you - * may wish to use it for your own purposes. - */ - public static final int INTER = 3; - - /** - * Target value indicating that the compiler should produce a - * low-level intermediate representation from its input, and stop. - */ - public static final int LOWIR = 4; - - /** - * Target value indicating that the compiler should produce - * assembly from its input. - */ - public static final int ASSEMBLY = 5; - /** * Array indicating which optimizations should be performed. If * a particular element is true, it indicates that the optimization @@ -59,13 +21,13 @@ public class CLI { * should be performed. */ public boolean opts[]; - + /** * Vector of String containing the command-line arguments which could * not otherwise be parsed. */ public Vector extras; - + /** * Vector of String containing the optimizations which could not be * parsed. It is okay to complain about anything in this list, even @@ -77,49 +39,19 @@ public class CLI { * Name of the file to put the output in. */ public String outfile; - + /** * Name of the file to get input from. This is null if the user didn't * provide a file name. */ public String infile; - /** - * The target stage. This should be one of the integer constants - * defined elsewhere in this package. - */ - public int target; - /** * The debug flag. This is true if -debug was passed on * the command line, requesting debugging output. */ public boolean debug; - /** - * Native MIPS architecture is specified by "-native". The default - * is SPIM. - */ - public boolean fNative; - - /** - * Runs IRVis on final node tree. - */ - public boolean fVis; - public String visClass; - public String visMethod; - - /** - * Dumps the before and after Node structure to two files that can be diffed. - */ - public boolean fDiff; - public String diffFile; - - /** - * Maximum optimization iterations. - */ - public int numIterations = 5; - /** * Verbose output */ @@ -134,16 +66,9 @@ public class CLI { public CLI() { outfile = null; infile = null; - target = DEFAULT; extras = new Vector(); extraopts = new Vector(); - fNative = false; - fVis = false; verbose = 0; - visClass = ""; - visMethod = ""; - fDiff = false; - diffFile = ""; } /** @@ -173,21 +98,51 @@ public class CLI { opts = new boolean[optnames.length]; + if (args.length==0) { + System.out.println("-debugcompiler -- print out debug messages"); + System.out.println("-depth depthnum constraintnum -- generate dependency graph from constraintnum with depth of depthnum"); + System.out.println("-depthconj depthnum constraintnum conjunctionnum -- generate dependency graph from constraintnum with depth of depthnum"); + System.out.println("-instrument -- generate instrumentation code"); + System.out.println("-aggressivesearch -- search for one repair per constraint"); + System.out.println("-prunequantifiernodes -- prune nodes that satisfy constraint by decreasing scope"); + System.out.println("-cplusplus -- properly set up c++ classes"); + System.out.println("-time -- generate timing code"); + System.out.println("-omitcomp -- omit compensation updates"); + System.out.println("-mergenodes -- omit nodes for simpler role dependence graphs"); + System.out.println("-debuggraph -- add edge labels and support to debug graph"); + System.exit(-1); + } + for (int i = 0; i < args.length; i++) { - if (args[i].equals("-debug")) { + if (args[i].equals("-debugcompiler")) { context = 0; debug = true; - } else if (args[i].equals("-native")) { - context = 0; - fNative = true; - } else if (args[i].equals("-vis")) { - context = 4; - fVis = true; - } else if (args[i].equals("-diff")) { - context = 5; - fDiff = true; - } else if (args[i].equals("-i")) { - context = 6; + } else if (args[i].equals("-checkonly")) { + Compiler.REPAIR=false; + } else if (args[i].equals("-omitcomp")) { + Compiler.OMITCOMP=true; + } else if (args[i].equals("-debuggraph")) { + Compiler.DEBUGGRAPH=true; + } else if (args[i].equals("-mergenodes")) { + Compiler.MERGENODES=true; + } else if (args[i].equals("-depth")) { + Compiler.debuggraphs.add(new DebugItem(Integer.parseInt(args[i+1]),Integer.parseInt(args[i+2]))); + i+=2; + } else if (args[i].equals("-depthconj")) { + Compiler.debuggraphs.add(new DebugItem(Integer.parseInt(args[i+1]),Integer.parseInt(args[i+2]),Integer.parseInt(args[i+3]))); + i+=3; + } else if (args[i].equals("-debug")) { + Compiler.GENERATEDEBUGHOOKS=true; + } else if (args[i].equals("-time")) { + Compiler.TIME=true; + } else if (args[i].equals("-instrument")) { + Compiler.GENERATEINSTRUMENT=true; + } else if (args[i].equals("-aggressivesearch")) { + Compiler.AGGRESSIVESEARCH=true; + } else if (args[i].equals("-prunequantifiernodes")) { + Compiler.PRUNEQUANTIFIERS=true; + } else if (args[i].equals("-cplusplus")) { + Compiler.ALLOCATECPLUSPLUS=true; } else if (args[i].equals("-verbose") || args[i].equals("-v")) { context = 0; verbose++; @@ -195,8 +150,6 @@ public class CLI { context = 1; else if (args[i].equals("-o")) context = 2; - else if (args[i].equals("-target")) - context = 3; else if (context == 1) { boolean hit = false; for (int j = 0; j < optnames.length; j++) { @@ -212,41 +165,9 @@ public class CLI { } if (!hit) extraopts.addElement(args[i]); - } - else if (context == 2) { + } else if (context == 2) { outfile = args[i]; context = 0; - } - else if (context == 3) { - // Process case insensitive. - String argSansCase = args[i].toLowerCase(); - // accept "scan" and "scanner" due to handout mistake - if (argSansCase.equals("scan") || - argSansCase.equals("scanner")) - target = SCAN; - else if (argSansCase.equals("parse")) - target = PARSE; - else if (argSansCase.equals("inter")) - target = INTER; - else if (argSansCase.equals("lowir")) - target = LOWIR; - else if (argSansCase.equals("assembly") || - argSansCase.equals("codegen")) - target = ASSEMBLY; - else - target = DEFAULT; // Anything else is just default - context = 0; - } else if (context == 4) { // -vis - StringTokenizer st = new StringTokenizer(args[i], "."); - visClass = st.nextToken(); - visMethod = st.nextToken(); - context = 0; - } else if (context == 5) { // -diff - diffFile = args[i]; // argument following is filename - context = 0; - } else if (context == 6) { // -i - numIterations = Integer.parseInt(args[i]); - context = 0; } else { boolean hit = false; for (int j = 0; j < optnames.length; j++) { @@ -265,7 +186,7 @@ public class CLI { int i = 0; while (infile == null && i < extras.size()) { String fn = (String) extras.elementAt(i); - + if (fn.charAt(0) != '-') { infile = fn; @@ -273,40 +194,5 @@ public class CLI { } i++; } - - // create outfile name - switch (target) { - case SCAN: - ext = ".scan"; - break; - case PARSE: - ext = ".parse"; - break; - case INTER: - ext = ".ir"; - break; - case LOWIR: - ext = ".lowir"; - break; - case ASSEMBLY: - ext = ".s"; - break; - case DEFAULT: - default: - ext = ".out"; - break; - } - - if (outfile == null && infile != null) { - int dot = infile.lastIndexOf('.'); - int slash = infile.lastIndexOf('/'); - // Last dot comes after last slash means that the file - // has an extention. Note that the base case where dot - // or slash are -1 also work. - if (dot <= slash) - outfile = infile + ext; - else - outfile = infile.substring(0, dot) + ext; - } } }