diff --git a/src/main/java/TP2/Error/TypeChecking.java b/src/main/java/TP2/Error/TypeChecking.java index 54cda8d..d169e75 100644 --- a/src/main/java/TP2/Error/TypeChecking.java +++ b/src/main/java/TP2/Error/TypeChecking.java @@ -1,4 +1,4 @@ -package TP2.Error; +/*package TP2.Error; import TP2.asd.SymTable; import TP2.asd.Program.*; @@ -164,3 +164,4 @@ public class TypeChecking { } } } +*/ \ No newline at end of file diff --git a/src/main/java/TP2/asd/Interface.java b/src/main/java/TP2/asd/Interface.java index 215bd00..c424f54 100644 --- a/src/main/java/TP2/asd/Interface.java +++ b/src/main/java/TP2/asd/Interface.java @@ -53,6 +53,7 @@ public interface Interface{ public S visitIfThen(IfThenImp instr, H h); public S visitIfThenElse(IfThenElseImp instr, H h); public S visitWhile(WhileImp instr, H h); + public S visitVoidFunction(VoidFunctionImp instr, H h); } //EXPRESSION diff --git a/src/main/java/TP2/asd/PrettyprinterVisitor.java b/src/main/java/TP2/asd/PrettyprinterVisitor.java index cc916a9..7c037cf 100644 --- a/src/main/java/TP2/asd/PrettyprinterVisitor.java +++ b/src/main/java/TP2/asd/PrettyprinterVisitor.java @@ -156,17 +156,19 @@ public class PrettyprinterVisitor implements ProgramVisitor, } @Override - public String visitAppeal(AppealImp instr,String indent){ - String str = indent + instr.fName() + "("; - for(int i=0; i, return "(" + e.e1().accept(this,"") +" "+ opStr +" " + e.e2().accept(this,"") + ")"; } + @Override + public String visitAppeal(AppealImp instr,String indent){ + String str = indent + instr.fName() + "("; + for(int i=0; i expr) implements Instruction{ + @Override + public S accept(InstrVisitor v, H h) { + return v.visitVoidFunction(this, h); + } + } + //Type public static record Type_voidImp() implements Type{ @Override diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index c7a578a..bc13772 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -185,6 +185,30 @@ public class toLLVM_Visitor implements ProgramVisitor, return l; } + @Override + public ArrayList visitVoidFunction(VoidFunctionImp instr, SymTable h) { + ArrayList l = new ArrayList<>(); + ArrayList paramsLLVM = new ArrayList<>(); + + for(Expression param: instr.expr()){ + InstrAndVal result = param.accept(this, h); + l.addAll(result.instrs); + paramsLLVM.add(result.val); + } + ValueFunMap fun= h.getFunction(instr.nom()); + if(fun == null){ + System.err.println("Function n'est pas trouvé"); + return l; + } + + if (!(fun.define.type() instanceof VoidLLVMImp)){ + System.err.println("Fonction n'est pas un void"); + } + + l.add(new CallLLVMImp(fun.define,paramsLLVM,"")); + return l; + } + @Override public ArrayList visitIfThen(IfThenImp instr, SymTable h) { SymTable prevSymTable = h; diff --git a/tests/aLaMain.vsl b/tests/aLaMain.vsl index 9c80693..c13f29e 100644 --- a/tests/aLaMain.vsl +++ b/tests/aLaMain.vsl @@ -6,11 +6,16 @@ FUNC INT add(a,b) { RETURN z } +FUNC VOID affiche(x){ + PRINT x +} + FUNC INT main(x,y) { INT a,b,c,minh x := 5 minh := x * y b:=3 + affiche(b) c:=add(x,b) PRINT "coucou, tu peux réparer le visitPrint dans LLVM stp","il manque virgule au milieu", c*5+b WHILE b - 1