/* MiniJava+ compiler */ import java.io.*; public class mjpc { public static void main(String[] args) throws Exception { Global.sourcefile = args[0]; Global.targetfile = args[1]; parser Pr = new parser(); absyn Prog = (absyn) Pr.parse().value; // parse and get absyn tree PrintWriter pw = new PrintWriter(new FileWriter(args[1])); // cppvisitor translator = new cppvisitor(pw); // Prog.accept(translator); // type check: // create and use symbol-table generation visitor: tablemaker tm = new tablemaker(); programentry symboltable = (programentry)Prog.accept(tm); if (symboltable!=null) System.out.println("symbol table constructed"); // create type checking visitor using symboltable typechecker tpr = new typechecker(symboltable); String t = Prog.accept(tpr); System.out.println("type checking complete"); // create abstract code-generation visitor using symboltable generator2 abscoder = new generator2(symboltable); Prog.accept(abscoder); // create gnu assembly instruction coder: x86 filecoder = new x86(); pw.println("/* generated by minijava+ compiler */\n"); for (operation op : abscoder.Code) pw.print(op.accept(filecoder)); pw.close(); System.out.println("assembly code written to "+args[1]); // invoke gcc as assembler to produce a.out: Runtime shell = Runtime.getRuntime(); System.out.println("invoking assembler to produce executable ..."); shell.exec("gcc "+args[1]); } } // mjpc