From a86f3433be0b5690003de1008590898aed4c0160 Mon Sep 17 00:00:00 2001 From: Vu Tuan Minh Date: Thu, 24 Apr 2025 07:00:31 +0200 Subject: [PATCH] jsp c'est un arraylist de string ou varImp dans proto et func --- src/main/antlr/VSLParser.g | 4 ++-- src/main/java/TP2/Error/TypeChecking.java | 4 ++-- src/main/java/TP2/asd/PrettyprinterVisitor.java | 12 +++++++++++- src/main/java/TP2/asd/Program.java | 2 +- .../java/TP2/llvm/PrettyprinterLLVM_Visitor.java | 8 +++++++- tests/aLaMain.vsl | 2 +- 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/main/antlr/VSLParser.g b/src/main/antlr/VSLParser.g index b8c7b69..7211c7f 100644 --- a/src/main/antlr/VSLParser.g +++ b/src/main/antlr/VSLParser.g @@ -64,9 +64,9 @@ functions returns [ArrayList out] ; function returns [Function out]: - FUNCTION t=type i=ident ParO ParF instr= instruction + FUNCTION t=type i=ident ParO vars_locaux ParF instr= instruction { - $out=new FunctionImp($t.return_type, $i.out, $instr.out); + $out=new FunctionImp($t.return_type, $i.out, $vars_locaux.out, $instr.out); } ; diff --git a/src/main/java/TP2/Error/TypeChecking.java b/src/main/java/TP2/Error/TypeChecking.java index 13ee354..d7c8ee7 100644 --- a/src/main/java/TP2/Error/TypeChecking.java +++ b/src/main/java/TP2/Error/TypeChecking.java @@ -54,7 +54,7 @@ public class TypeChecking { if(!h.searchVar(instr.t())){ return TypeCheckExprDiag.error("Variable "+instr.t()+" n'existe pas"); } - Type t_type=h.getvar_Type(instr.t()).type; + Type t_type=h.getvar_Type(instr.t()); TypeCheckExprDiag expr= instr.e().accept(expr_check, h); if (!expr.get_check()) return expr; @@ -132,7 +132,7 @@ public class TypeChecking { if(!h.searchVar(e.name())){ return TypeCheckExprDiag.error("Ce variable n'existe pas"); } - Type e_type= h.getvar_Type(e.name()).type; + Type e_type= h.getvar_Type(e.name()); return TypeCheckExprDiag.checked(e_type); } diff --git a/src/main/java/TP2/asd/PrettyprinterVisitor.java b/src/main/java/TP2/asd/PrettyprinterVisitor.java index 026517a..1127c41 100644 --- a/src/main/java/TP2/asd/PrettyprinterVisitor.java +++ b/src/main/java/TP2/asd/PrettyprinterVisitor.java @@ -35,19 +35,29 @@ public class PrettyprinterVisitor implements ProgramVisitor, @Override public String visitPrototype(PrototypeImp proto, String indent){ String str= indent + "PROTO "+proto.type().accept(this, "")+ " "+ proto.nom() + "("; + for(int i=0; i s,Instruction instruction)implements Function { //public FunctionImp(Type type, String name, Instruction instruction) { // this(type, name, new ArrayList<>() {{ add(instruction); }}); C KOI ? //} diff --git a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java index 9b8ad86..e030e3a 100644 --- a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java +++ b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java @@ -1,6 +1,7 @@ package TP2.llvm; import java.util.ArrayList; +import java.util.List; import TP2.asd.Program.IfThenElseImp; import TP2.llvm.Interface.*; @@ -44,7 +45,12 @@ TypeLLVMVisitor StringBuilder str = new StringBuilder("define "); str.append(define.type().accept(this,indent)).append(" @").append(define.name()).append("("); - //TODO param + List params = define.params(); + for (int i = 0; i < params.size(); i++) { + VarLLVMImpl param = params.get(i); + str.append(param.getType().accept(this, indent)).append(" ").append(param.accept(this, indent)); + if (i < params.size() - 1) str.append(", "); + } str.append("){\n"); for(InstructionLLVM instr : define.instrs()){ diff --git a/tests/aLaMain.vsl b/tests/aLaMain.vsl index 446f575..8a04240 100644 --- a/tests/aLaMain.vsl +++ b/tests/aLaMain.vsl @@ -1,5 +1,5 @@ PROTO INT add(x,y) -FUNC INT main() { +FUNC INT main(x,y) { INT a,b,c b:=3 c:=1