X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Repair%2FRepairCompiler%2FMCC%2FCLI.java;h=febfd744040537deb30a6f6c48d240b85989b389;hb=776aa309a1d977afed4f101cc0ba5a079b7e85a6;hp=609455ac2bd4484b332908f3313035b0643a2c1a;hpb=ca628f50b6dedc5c650dea4c6862260efba76136;p=repair.git diff --git a/Repair/RepairCompiler/MCC/CLI.java b/Repair/RepairCompiler/MCC/CLI.java index 609455a..febfd74 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.2 2004/04/15 05:41:46 bdemsky Exp $ + * @version $Id: CLI.java,v 1.12 2004/08/16 20:53:53 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 @@ -84,42 +46,12 @@ public class CLI { */ 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,23 +98,42 @@ 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"); + System.out.println("-prunequantifiernodes"); + System.out.println("-cplusplus"); + System.out.println("-time"); + 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("-checkonly")) { Compiler.REPAIR=false; - } 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("-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++; @@ -197,8 +141,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++) { @@ -214,41 +156,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++) { @@ -275,40 +185,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; - } } }