Change to the spec...missed a consistency property. Adding timing option.
[repair.git] / Repair / RepairCompiler / MCC / CLI.java
index 609455ac2bd4484b332908f3313035b0643a2c1a..febfd744040537deb30a6f6c48d240b85989b389 100755 (executable)
@@ -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 (<tt>6.035-staff@mit.edu</tt>)
- * @version <tt>$Id: CLI.java,v 1.2 2004/04/15 05:41:46 bdemsky Exp $</tt>
+ * @version <tt>$Id: CLI.java,v 1.12 2004/08/16 20:53:53 bdemsky Exp $</tt>
  */
 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 <tt>-debug</tt> 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 <iterations>
-                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;
-       }
     }
 }