diff --git a/src/main/java/TP2/asd/PrettyprinterVisitor.java b/src/main/java/TP2/asd/PrettyprinterVisitor.java index 132f4e0..baa6055 100644 --- a/src/main/java/TP2/asd/PrettyprinterVisitor.java +++ b/src/main/java/TP2/asd/PrettyprinterVisitor.java @@ -61,8 +61,15 @@ public class PrettyprinterVisitor implements ProgramVisitor, @Override public String visitPrint(PrintImp instr, String indent) { String str = indent + "PRINT "; - for (String elem: instr.t()){ - str += "\"" +elem +"\""; + for(int i = 0; i fonctions) implements ProgramI{ public S accept(ProgramVisitor v, H h) { @@ -84,7 +85,7 @@ public class Program{ @Override public S accept(InstrVisitor v, H h) { return v.visitRead(this, h); - } + } } //Type diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index 9b746ad..7d4ce7a 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -11,7 +11,7 @@ import TP2.llvm.ProgramLLVM.*; public class toLLVM_Visitor implements ProgramVisitor, FunctionVisitor, InstrVisitor>, - ExprVisitor, + ExprVisitor, TypeVisitor { @@ -21,13 +21,13 @@ public class toLLVM_Visitor implements ProgramVisitor toLLVM ne renvoit pas la même chose si l'expression est une simplement un val (var ou const) ou un binop */ - public static class InstrOrVal{ + public static class InstrAndVal{ public ArrayList instr = null; public ValLLVM val = null; - public InstrOrVal(ArrayList instr, ValLLVM val){ + public InstrAndVal(ArrayList instr, ValLLVM val){ this.instr = instr; - this.val = instr.getLast().var(); + this.val = val; } } @@ -57,7 +57,7 @@ public class toLLVM_Visitor implements ProgramVisitor @Override public ArrayList visitReturn(Return_instrImp instr, SymTable h) { - InstrOrVal res = instr.e().accept(this,h); + InstrAndVal res = instr.e().accept(this,h); ValLLVM var = res.val; InstructionLLVM r = new ReturnLLVMImp(var.getType(),var); @@ -70,7 +70,7 @@ public class toLLVM_Visitor implements ProgramVisitor @Override public ArrayList visitAssign(AssignImp instr, SymTable h) { - InstrOrVal res = instr.e().accept(this,h); + InstrAndVal res = instr.e().accept(this,h); ValLLVM var = res.val; ArrayList result = new ArrayList<>(); result.addAll(res.instr); @@ -93,8 +93,9 @@ public class toLLVM_Visitor implements ProgramVisitor @Override public ArrayList visitPrint(PrintImp instr, SymTable h) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitPrint'"); + ArrayList l = new ArrayList<>(); + l.add(new PrintLLVMImp(new ArrayList())); //TODO + return l; } @Override @@ -106,23 +107,23 @@ public class toLLVM_Visitor implements ProgramVisitor //EXPRESSION @Override - public InstrOrVal visitConst(ConstImp e, SymTable h) { + public InstrAndVal visitConst(ConstImp e, SymTable h) { ValLLVM val = new ValLLVMImpl(new IntLLVMImpl(),e.c()); - return new InstrOrVal(new ArrayList<>(), val); + return new InstrAndVal(new ArrayList<>(), val); } @Override - public InstrOrVal visitVar(VarImp e, SymTable h) { + public InstrAndVal visitVar(VarImp e, SymTable h) { ValLLVM val = new VarLLVMImpl(new IntLLVMImpl(), e.name()); - return new InstrOrVal(new ArrayList<>(), val); + return new InstrAndVal(new ArrayList<>(), val); } @Override - public InstrOrVal visitBinOp(BinopExpressionImp e, SymTable h) { + public InstrAndVal visitBinOp(BinopExpressionImp e, SymTable h) { ArrayList list = new ArrayList<>(); - InstrOrVal res1 = e.e1().accept(this, h); - InstrOrVal res2 = e.e2().accept(this, h); + InstrAndVal res1 = e.e1().accept(this, h); + InstrAndVal res2 = e.e2().accept(this, h); ValLLVM val1 = res1.val; ValLLVM val2 = res2.val; @@ -139,7 +140,7 @@ public class toLLVM_Visitor implements ProgramVisitor VarLLVMImpl var = new VarLLVMImpl(type,temp); list.add(new AssignLVMImp(var, new BinOpLLVMImp(type,e.op(),val1,val2))); - return new InstrOrVal(list, var); + return new InstrAndVal(list, var); } @Override diff --git a/src/main/java/TP2/llvm/Interface.java b/src/main/java/TP2/llvm/Interface.java index fb78361..0d9dfe5 100644 --- a/src/main/java/TP2/llvm/Interface.java +++ b/src/main/java/TP2/llvm/Interface.java @@ -29,6 +29,8 @@ public interface Interface { public S visitReturnLLVM(ReturnLLVMImp instr, H h); public S visitAssignLLVM(AssignLVMImp instr, H h); public S visitStoreLLVM(StoreLLVMImp instr, H h); + public S visitPrintLLVM(PrintLLVMImp instr, H h); + public S visitReadLLVM(ReadLLVMImp instr, H h); } //////////ExpressionLLVM (expression) diff --git a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java index 713df61..0c1b56b 100644 --- a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java +++ b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java @@ -100,6 +100,17 @@ TypeLLVMVisitor return "load" + " i" + e.nbBits() + ", i"+ e.nbBits2() + "* %" + e.val().accept(this, h); } + @Override + public String visitPrintLLVM(PrintLLVMImp instr, String h) { + return INDENT+"print"; + } + + @Override + public String visitReadLLVM(ReadLLVMImp instr, String h) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitReadLLVM'"); + } + @Override public String visitValLLVM(ValLLVMImpl e, String h) { return e.val() + ""; @@ -121,4 +132,5 @@ TypeLLVMVisitor } + } diff --git a/src/main/java/TP2/llvm/ProgramLLVM.java b/src/main/java/TP2/llvm/ProgramLLVM.java index 65db65c..82c44e9 100644 --- a/src/main/java/TP2/llvm/ProgramLLVM.java +++ b/src/main/java/TP2/llvm/ProgramLLVM.java @@ -61,6 +61,21 @@ public class ProgramLLVM { } } + public static record PrintLLVMImp(ArrayList l) implements InstructionLLVM{ + @Override + public S accept(InstructionLLVMVisitor v, H h) { + return v.visitPrintLLVM(this, h); + } + } + + public static record ReadLLVMImp(ArrayList l) implements InstructionLLVM{ + + @Override + public S accept(InstructionLLVMVisitor v, H h) { + return v.visitReadLLVM(this, h); + } + + } //Expression : public static record BinOpLLVMImp(TypeLLVM type,Op op, ValLLVM val1,ValLLVM val2) implements ExpressionLLVM{