public static void main(String[] args) {

    if (args.length == 0) {
      System.out.println("Usage: java -jar cmtjavac.jar <options> <source file>");
      System.exit(0);
    }

    StringBuffer buffer = new StringBuffer();
    for (int i = 0; i < args.length - 1; i++) {
      buffer.append(args[i]);
      buffer.append(" ");
    }

    String parameters = buffer.toString();
    String filename = args[args.length - 1];
    try {
      compile(filename, parameters);
    } catch (Exception e) {
      System.out.println("Exception caught compiling file: " + e);
      e.printStackTrace();
    }
  }
  public static void compile(String filename, String parameters) throws Exception {

    String source = "";
    String s = "";

    int last = filename.lastIndexOf(".cmtjava");
    if (last == -1) { // arquivos devem ter extensão cmtjava
      System.out.println("Usage: java -jar cmtjavac.jar <options> <source file>");
      System.exit(0);
    } else source = filename.substring(0, last);

    last = source.lastIndexOf('/');
    if (last != -1) source = source.substring(last + 1, source.length());

    System.out.println("Translating " + source + ".cmtjava");

    String environmentVariable = System.getenv("CMTJAVAC");
    String pathForTemplate = environmentVariable + "/CMTJava.stg";

    // load in CMTJava.stg template group, put in templates variable
    FileReader groupFileR = null;
    try {
      groupFileR = new FileReader(pathForTemplate);
    } catch (Exception e) {
      System.out.println(
          "Could not load the template file for translating the source file.\nPlease set the CMTJAVAC environment variable with the path of the template file");
      System.exit(0);
    }
    StringTemplateGroup templates = new StringTemplateGroup(groupFileR);
    groupFileR.close();

    File f = new File(filename);
    FileInputStream fis = new FileInputStream(f);
    ANTLRInputStream input = new ANTLRInputStream(fis);

    CMTJavaLexer lexer = new CMTJavaLexer(input);
    TokenRewriteStream tokens = new TokenRewriteStream(lexer);
    CMTJavaParser parser = new CMTJavaParser(tokens);
    parser.setTemplateLib(templates);

    /*CMTJavaParser.compilationUnit_return r = */ parser
        .compilationUnit(); // parse rule compilationUnit
    // StringTemplate output = (StringTemplate)r.getTemplate();

    try {
      BufferedWriter out = new BufferedWriter(new FileWriter(source + ".java"));
      out.write(tokens.toString());
      out.close();
    } catch (IOException e) {
      e.printStackTrace();
    }

    Process t = null;
    try {
      System.out.println("javac " + parameters + " " + source + ".java");
      t = Runtime.getRuntime().exec("javac " + parameters + " " + source + ".java");
    } catch (Exception e) {
      System.out.println("Could not load the javac compiler.");
      System.exit(0);
    }
    BufferedReader stdInput = new BufferedReader(new InputStreamReader(t.getInputStream()));
    BufferedReader stdError = new BufferedReader(new InputStreamReader(t.getErrorStream()));

    // read the output from the command
    System.out.println("Compiling " + source + ".java");
    while ((s = stdInput.readLine()) != null) {
      System.out.println("éoq");
      System.out.println(s);
    }

    // read any errors from the attempted command
    while ((s = stdError.readLine()) != null) {
      System.out.println(s);
    }
  }