// Método de entrada do Codegen public String translate(Program p, Env env) { codeGenerator = new Codegen(); // Preenchendo a Tabela de Símbolos // Quem quiser usar 'env', apenas comente essa linha // codeGenerator.symTab.FillTabSymbol(p); // Formato da String para o System.out.printlnijava "%d\n" codeGenerator.assembler.add( new LlvmConstantDeclaration( "@.formatting.string", "private constant [4 x i8] c\"%d\\0A\\00\"")); // NOTA: sempre que X.accept(Y), então Y.visit(X); // NOTA: Logo, o comando abaixo irá chamar codeGenerator.visit(Program), linha 75 p.accept(codeGenerator); // Link do printf List<LlvmType> pts = new LinkedList<LlvmType>(); pts.add(new LlvmPointer(LlvmPrimitiveType.I8)); pts.add(LlvmPrimitiveType.DOTDOTDOT); codeGenerator.assembler.add(new LlvmExternalDeclaration("@printf", LlvmPrimitiveType.I32, pts)); List<LlvmType> mallocpts = new LinkedList<LlvmType>(); mallocpts.add(LlvmPrimitiveType.I32); codeGenerator.assembler.add( new LlvmExternalDeclaration("@malloc", new LlvmPointer(LlvmPrimitiveType.I8), mallocpts)); String r = new String(); for (LlvmInstruction instr : codeGenerator.assembler) r += instr + "\n"; return r; }
public LlvmValue FillTabSymbol(Program n) { n.accept(this); return null; }