diff --git a/src/main/java/TP2/Main.java b/src/main/java/TP2/Main.java index 1a1bf17..73434b1 100644 --- a/src/main/java/TP2/Main.java +++ b/src/main/java/TP2/Main.java @@ -62,12 +62,12 @@ public class Main { // Pretty-print the program (to debug parsing) - System.out.println(ast.prettyprinter()); + //System.out.println(ast.prettyprinter()); // Verify the program semantic // Generate the intermediate representation - System.out.println("\n\n"); + //System.out.println("\n\n"); PrintWriter out2 = new PrintWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8), true); ProgramLLVMImp astLLVM = ast.toLLVM(); @@ -75,12 +75,8 @@ public class Main { String llvmStr = astLLVM.prettyprinter(); out2.println(llvmStr); - /* - utiliser la commande : - java -jar build/libs/TP2.jar file.vsl > file.ll - provoque peut provoquer de mauvais encodage (UTF16(LE) au lieu d'UTF8) - et empĂȘche l'utilisation de print pour autre chose - */ + /* + String sortieLLVM = args[0].replace(".vsl", ".ll"); Files.write( Paths.get(sortieLLVM), @@ -88,7 +84,7 @@ public class Main { ); System.out.println("\n[VSL compile Succes] : " + args[0] + " -> " + sortieLLVM +"\n"); - + */ } catch (IOException | RecognitionException e) { e.printStackTrace(); diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index 5fb040e..e052364 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -112,12 +112,23 @@ public class toLLVM_Visitor implements ProgramVisitor, Integer size=instr.s().get(i).size(); if(size==null){ r= h.addVar(nom,t2); + h = r.symTable; + list.add(new AssignLLVMImp(new VarLLVMImp(t2, r.var,false),new allocaLLVMImp(t2))); }else { TypeLLVM arrayType = new ArrayLLVMImp(t2, size); + + //Alloca + Result r_size= h.addNewTempVar(); + VarLLVMImp tmpVar = new VarLLVMImp(new IntLLVMImp(), r_size.var, false); + list.add(new AssignLLVMImp(tmpVar, new allocaLLVMImp(t2))); + + //Alloca table r = h.addVar(nom, arrayType); + h = r.symTable; + list.add(new AssignLLVMImp(new VarLLVMImp(t2, r.var,false),new allocaLLVMImp(new PointerLLVMImp(t2)))); + + //Store } - h = r.symTable; - list.add(new AssignLLVMImp(new VarLLVMImp(t2, r.var,false),new allocaLLVMImp(t2))); } return new InstrAndSymTable(list,h); } @@ -125,7 +136,8 @@ public class toLLVM_Visitor implements ProgramVisitor, @Override public InstrAndSymTable visitVarDecl(VarDeclImp instr, SymTable h) { ArrayList list = new ArrayList<>(); - //TODO + + return new InstrAndSymTable(list,h); } diff --git a/tests/aLaMain.vsl b/tests/aLaMain.vsl index 0666e8d..aa49412 100644 --- a/tests/aLaMain.vsl +++ b/tests/aLaMain.vsl @@ -1,4 +1,5 @@ -FUNC INT main(x,y) { +FUNC INT main() { INT a,b[10],c,d[11] a:=1 + c:=2 } \ No newline at end of file diff --git a/tests/fragment1/while2 b/tests/fragment1/while2 index 1b587af..f0013e8 100755 Binary files a/tests/fragment1/while2 and b/tests/fragment1/while2 differ