/** * Create Header for the jasmin assembler code and add the code of the input file as assembler * code */ private static String createOutput(CodeGenerator codeGenerator, String fileName) { int size = codeGenerator.getSymbolTable().size() + 1; return ".bytecode 50.0\n" + ".class public " + fileName + "\n" + ".super java/lang/Object\n" + ".method public <init>()V\n" + "\t.limit stack 1\n" + "\t.limit locals 1\n" + "\taload_0\n" + "\tinvokespecial java/lang/Object/<init>()V\n" + "\treturn\n" + ".end method\n" + "\t.method public static main([Ljava/lang/String;)V\n" + "\t.limit stack " + codeGenerator.getStackHeight() + "\n" + // May work... "\t.limit locals " + size + "\n" + codeGenerator.getCode() + "\treturn\n" + ".end method\n"; }
/** * Copy SymbolTable from the TypeChecker to the CodeGenerator and give it a new index (not * necessary to know the types any more - they are all correct!) */ private static void copySymbolTable(TypeChecker typeChecker, CodeGenerator codeGenerator) { int i = typeChecker.getSymbolTable().size(); for (String id : typeChecker.getSymbolTable().keySet()) codeGenerator.getSymbolTable().put(id, i--); }