Ejemplo n.º 1
0
  public static void main(String[] args) {
    try {
      CLI.parse(args, new String[0]);
      InputStream inputStream =
          args.length == 0 ? System.in : new java.io.FileInputStream(CLI.infile);
      if (CLI.target == Action.SCAN) {
        CScanner scanner = new CScanner(new DataInputStream(inputStream));
        scanner.setTrace(CLI.debug);
        Token token;
        boolean done = false;
        while (!done) {
          try {
            for (token = scanner.nextToken();
                token.getType() != CParserTokenTypes.EOF;
                token = scanner.nextToken()) {
              System.out.println(token.getType());
            }
            done = true;
          } catch (Exception e) {
            // print the error:
            System.out.println("ERROR: " + CLI.infile + " " + e);
            scanner.consume();
          }
        }
      } else if (CLI.target == Action.PARSE
          || CLI.target == Action.DOT
          || CLI.target == Action.DEFAULT) {
        CScanner scanner = new CScanner(new DataInputStream(inputStream));
        CParser parser = new CParser(scanner);
        parser.setTrace(CLI.debug);
        parser.program();
        if (parser.getError()) {
          System.out.println("ERROR");
          System.exit(-1);
        }
        if (CLI.target == Action.DOT) {
          System.out.println(TreeVisualizer.generateDOT(parser.getAST()));
        }
      } else if (CLI.target == Action.LOWIR) {
        CScanner scanner = new CScanner(new DataInputStream(inputStream));
        CParser parser = new CParser(scanner);
        parser.setTrace(CLI.debug);
        parser.program();
        if (parser.getError()) {
          System.out.println("ERROR");
          System.exit(-1);
        }
        IrProgram cfg = (IrProgram) IrGenerator.getIr(parser.getAST());

        SemanticChecker checker = new SemanticChecker();
        checker.check(cfg);
        SymbolTable table = checker.getSymbolTable();

        OutputGenerator gen = new OutputGenerator();
        gen.generate(cfg, table);
      } else {
        System.out.println("Unsupported target");
      }
    } catch (Exception e) {
      // print the error:
      System.out.println(CLI.infile + " " + e);
    }
  }