diff --git a/src/main/java/TP2/asd/Interface.java b/src/main/java/TP2/asd/Interface.java index 7fc9730..faa7206 100644 --- a/src/main/java/TP2/asd/Interface.java +++ b/src/main/java/TP2/asd/Interface.java @@ -4,7 +4,9 @@ import TP2.asd.Program.*; import TP2.llvm.ProgramLLVM.*; public interface Interface{ + //PROGRAM + public interface ProgramI { public S accept(ProgramVisitor v, H h); public String prettyprinter(); @@ -15,8 +17,8 @@ public interface Interface{ public S visitProgram(ProgramImp prog, H h); } - //FUNCTION + public interface Function { public S accept(FunctionVisitor v, H h); } @@ -43,7 +45,6 @@ public interface Interface{ public S accept(InstrVisitor v, H h); } - public interface InstrVisitor{ public S visitReturn(Return_instrImp instr, H h); public S visitBloc(BlocImp instr, H h); diff --git a/src/main/java/TP2/asd/Program.java b/src/main/java/TP2/asd/Program.java index 4b9516d..5ae82b9 100644 --- a/src/main/java/TP2/asd/Program.java +++ b/src/main/java/TP2/asd/Program.java @@ -32,9 +32,6 @@ public class Program{ //Fonction public static record FunctionImp(Type type, String nom, ArrayList params,Instruction instruction) implements Function { - //public FunctionImp(Type type, String name, Instruction instruction) { - // this(type, name, new ArrayList<>() {{ add(instruction); }}); C KOI ? - //} public S accept(FunctionVisitor v, H h) { return v.visitFunction(this, h); diff --git a/src/main/java/TP2/asd/SymTable.java b/src/main/java/TP2/asd/SymTable.java index 53620e8..f7b3109 100644 --- a/src/main/java/TP2/asd/SymTable.java +++ b/src/main/java/TP2/asd/SymTable.java @@ -2,13 +2,10 @@ package TP2.asd; import java.util.ArrayList; import org.pcollections.*; -import TP2.asd.Interface.Type; -import TP2.asd.Program.Type_intImp; import TP2.llvm.Interface.TypeLLVM; import TP2.llvm.ProgramLLVM.DeclarGlobalLLVMImp; import TP2.llvm.ProgramLLVM.DefineLLVMImp; import TP2.llvm.ProgramLLVM.IntLLVMImp; -import TP2.llvm.ProgramLLVM.PointerLLVMImp; public class SymTable { @@ -35,6 +32,8 @@ public class SymTable { this.declarationsGlobal = declarationsGlobal; } + + public static class ValueFunMap{ public DefineLLVMImp define; public Boolean isProto; @@ -56,6 +55,18 @@ public class SymTable { } } + public static class Result{ + public SymTable symTable; + public String var; + public Result(SymTable symTable, String var){ + this.symTable = symTable; + this.var = var; + } + } + + + //Fonction SymTable : + public SymTable newBlock() { return new SymTable(varMap.plus(HashTreePMap.empty()), functionsMap, id,declarationsGlobal); } @@ -68,20 +79,11 @@ public class SymTable { } } + public ArrayList getDeclarationGlobal(){ return this.declarationsGlobal; } - public static class Result{ - public SymTable symTable; - public String var; - public Result(SymTable symTable, String var){ - this.symTable = symTable; - this.var = var; - } - } - - public SymTable addFunction(DefineLLVMImp function, Boolean isProto){ ValueFunMap value = this.functionsMap.get(function.name()); if(value == null || (value!=null && value.isProto && !isProto)){ @@ -196,14 +198,6 @@ public class SymTable { return false; } - public TypeLLVM getvar_Type(String s){ - for (PMap scope : varMap) { - if (scope.containsKey(s)) { - return scope.get(s).type; - } - } - return null; - } //retourne le type de la var public TypeLLVM getType(String nomVar){ @@ -216,11 +210,10 @@ public class SymTable { } - public SymTable addVarInTab(String nomVar, TypeLLVM type, boolean isParam) { PMap top = varMap.get(0); if (top.containsKey(nomVar)) { - System.err.println(nomVar+ " déjà déclaré."); + System.err.println("[VSL compile error] : " + nomVar+ " déjà déclaré."); return this; } top = top.plus(nomVar, new ValueVarMap(type, id[0], isParam)); @@ -228,29 +221,30 @@ public class SymTable { return new SymTable(varMap.minus(0).plus(0, top), functionsMap, id, this.declarationsGlobal); } + public String print_all(){ StringBuilder str = new StringBuilder(); - str.append("Id = ").append(id[0]).append("\n"); - str.append("VARIABLES:\n"); + str.append("Id = ").append(id[0]).append("\n"); + str.append("VARIABLES:\n"); - int scopeLevel = varMap.size(); - for (PMap scope : varMap) { - str.append("Block Level ").append(scopeLevel--).append(":\n"); - for (String varName : scope.keySet()) { - ValueVarMap value = scope.get(varName); - str.append("Name: ").append(varName) - .append(", Id: ").append(value.id) - .append(", Type: ").append(value.type) - .append(", IsParam: ").append(value.isParam) - .append("\n"); + int scopeLevel = varMap.size(); + for (PMap scope : varMap) { + str.append("Block Level ").append(scopeLevel--).append(":\n"); + for (String varName : scope.keySet()) { + ValueVarMap value = scope.get(varName); + str.append("Name: ").append(varName) + .append(", Id: ").append(value.id) + .append(", Type: ").append(value.type) + .append(", IsParam: ").append(value.isParam) + .append("\n"); + } } - } - str.append("FUNCTIONS:\n"); - for (String funcName : functionsMap.keySet()) { - str.append(" Name: ").append(funcName).append("\n"); - } + str.append("FUNCTIONS:\n"); + for (String funcName : functionsMap.keySet()) { + str.append(" Name: ").append(funcName).append("\n"); + } - return str.toString(); + return str.toString(); } } diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index 5483457..72f855c 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -432,10 +432,10 @@ public class toLLVM_Visitor implements ProgramVisitor, @Override public InstrAndVal visitVar(VarImp e, SymTable h) { ArrayList l =new ArrayList<>(); - ValLLVM val = new VarLLVMImp(h.getvar_Type(e.name()),h.getVar(e.name()),false); + ValLLVM val = new VarLLVMImp(h.getType(e.name()),h.getVar(e.name()),false); Result r = h.addNewTempVar(); h = r.symTable; - VarLLVMImp varTemp = new VarLLVMImp(h.getvar_Type(e.name()),r.var,false); + VarLLVMImp varTemp = new VarLLVMImp(h.getType(e.name()),r.var,false); l.add(new AssignLLVMImp(varTemp,((ExpressionLLVM)(new LoadLLVMImp(val))))); return new InstrAndVal(l, varTemp); }