Ejemplo n.º 1
0
  /**
   * Converts an int token code into the name of the token by reflection on the cup symbol
   * class/interface sym
   *
   * <p>This code was contributed by Karl Meissner <*****@*****.**>
   */
  private String getTokenName(int token) {
    try {
      java.lang.reflect.Field[] classFields = GFinalCoordSym.class.getFields();
      for (int i = 0; i < classFields.length; i++) {
        if (classFields[i].getInt(null) == token) {
          return classFields[i].getName();
        }
      }
    } catch (Exception e) {
      e.printStackTrace(System.err);
    }

    return "UNKNOWN TOKEN";
  }
Ejemplo n.º 2
0
 /**
  * Runs the scanner on input files.
  *
  * <p>This is a standalone scanner, it will print any unmatched text to System.out unchanged.
  *
  * @param argv the command line, contains the filenames to run the scanner on.
  */
 public static void main(String argv[]) {
   if (argv.length == 0) {
     System.out.println("Usage : java GFinalCoordLexer <inputfile>");
   } else {
     for (int i = 0; i < argv.length; i++) {
       GFinalCoordLexer scanner = null;
       try {
         scanner = new GFinalCoordLexer(new java.io.FileReader(argv[i]));
         while (!scanner.zzAtEOF) scanner.next_token();
       } catch (java.io.FileNotFoundException e) {
         System.out.println("File not found : \"" + argv[i] + "\"");
       } catch (java.io.IOException e) {
         System.out.println("IO error scanning file \"" + argv[i] + "\"");
         System.out.println(e);
       } catch (Exception e) {
         System.out.println("Unexpected exception:");
         e.printStackTrace();
       }
     }
   }
 }
Ejemplo n.º 3
0
  public static void main(String[] args) throws IOException // may be thrown by the scanner
      {
    // check for command-line args
    if (args.length != 2) {
      System.err.println(
          "please supply name of file to be parsed and name of file for unparsed version.");
      System.exit(-1);
    }

    try {
      Codegen.p = new PrintWriter("/home/ben/Scripts/github/Academic/cs 536/p6/gencode.asm");
    } catch (FileNotFoundException e) {
      System.err.println("File " + args[0] + " not found.");
      System.exit(-1);
    }

    // open input file
    FileReader inFile = null;
    try {
      inFile = new FileReader(args[0]);
    } catch (FileNotFoundException ex) {
      System.err.println("File " + args[0] + " not found.");
      System.exit(-1);
    }

    // open output file
    PrintWriter outFile = null;
    try {
      outFile = new PrintWriter(args[1]);
    } catch (FileNotFoundException ex) {
      System.err.println("File " + args[1] + " could not be opened for writing.");
      System.exit(-1);
    }

    parser P = new parser(new Yylex(inFile));

    Symbol root = null; // the parser will return a Symbol whose value
    // field is the translation of the root
    // nonterminal (i.e., of the nonterminal
    // "program")

    try {
      root = P.parse(); // do the parse
      System.out.println("Little program parsed correctly.");
    } catch (Exception ex) {
      System.err.println("Exception occured during parse: " + ex);
      ex.printStackTrace();
      System.exit(-1);
    }
    try {
      //		((SymTabNode)root.value).provideSymTab(new SymTab());
      ((ProgramNode) root.value).processNames();
    } catch (Exception ex) {
      System.err.println("Exception occured during parse: " + ex);
      ex.printStackTrace();
      System.exit(-1);
    }
    if (!Errors.errors) {
      ((ASTnode) root.value).unparse(outFile, 0);
      try {
        ((ProgramNode) root.value).typeCheck();
      } catch (Exception ex) {
        System.err.println("Exception occured during typecheck: " + ex);
        ex.printStackTrace();
        System.exit(-1);
      }
    }

    if (!Errors.errors) {
      try {
        ((ProgramNode) root.value).generate();
        Codegen.p.close();
      } catch (Exception ex) {
        System.err.println("Exception occured during codegen: " + ex);
        ex.printStackTrace();
        System.exit(-1);
      }
    }
    outFile.close();

    return;
  }