Exemplo n.º 1
0
  // 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;
  }
Exemplo n.º 2
0
 public LlvmValue FillTabSymbol(Program n) {
   n.accept(this);
   return null;
 }