diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..32cfc61 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.watcherExclude": { + "**/target": true + } +} \ No newline at end of file diff --git a/src/main/java/TP2/Main.java b/src/main/java/TP2/Main.java index dd34045..7dd3ebf 100644 --- a/src/main/java/TP2/Main.java +++ b/src/main/java/TP2/Main.java @@ -47,7 +47,7 @@ public class Main { // Pretty-print the program (to debug parsing) System.err.println("todo " + ast); - System.out.println("\n\n PRETTYPRINTER VSK : \n--------------\n" + ast.prettyprinter() + "\n--------------\nFIN PRETTYPRINTER"); + System.out.println("\n\n PRETTYPRINTER VSL : \n--------------\n" + ast.prettyprinter() + "\n--------------\nFIN PRETTYPRINTER"); // Verify the program semantic diff --git a/src/main/java/TP2/asd/Interface.java b/src/main/java/TP2/asd/Interface.java index d072b61..ce449ac 100644 --- a/src/main/java/TP2/asd/Interface.java +++ b/src/main/java/TP2/asd/Interface.java @@ -51,6 +51,10 @@ public interface Interface{ public ArrayList toLLVM(); } + public interface Val extends Expression{ + public ValLLVM getValLLVM(); + } + public interface ExprVisitor { public S visitConst(ConstImp e,H h); public S visitBinOp(BinopExpressionImp e, H h); diff --git a/src/main/java/TP2/asd/Program.java b/src/main/java/TP2/asd/Program.java index ea26c6c..caee95d 100644 --- a/src/main/java/TP2/asd/Program.java +++ b/src/main/java/TP2/asd/Program.java @@ -67,7 +67,7 @@ public class Program{ } - public static record ConstImp(int c) implements Expression{ + public static record ConstImp(int c) implements Val{ public S accept(ExprVisitor v, H h) { return v.visitConst(this, h); } @@ -76,12 +76,17 @@ public class Program{ return c+""; } + public ValLLVM getValLLVM(){ + ValLLVM val = new ValLLVMImpl(new IntLLVMImpl(),c); + return val; + } + @Override public ArrayList toLLVM() { //TODO // TODO Auto-generated method stub ArrayList list = new ArrayList<>(); - ConstLLVMImp cLLVM = new ConstLLVMImp(new IntLLVMImpl(),c); - list.add(new AssignLVMImp(new VarLLVMImpl("todo"), cLLVM)); + ValLLVM cLLVM = new ValLLVMImpl(new IntLLVMImpl(),c); + list.add(new AssignLVMImp(new VarLLVMImpl(new IntLLVMImpl(),"todo"), cLLVM)); return list; } } @@ -108,13 +113,26 @@ public class Program{ @Override public ArrayList toLLVM() { //TODO si e1 ou e2 est une constante, elle doit pouvoir ĂȘtre mise directement dans l'expression ArrayList list = new ArrayList<>(); - ArrayList eLLVM1 = e1.toLLVM(); - ArrayList eLLVM2 = e2.toLLVM(); - list.addAll(eLLVM1); - list.addAll(eLLVM2); - VarLLVMImpl var1 = eLLVM1.getLast().getVar(); - VarLLVMImpl var2 = eLLVM2.getLast().getVar(); - list.add(new AssignLVMImp(new VarLLVMImpl("todo"), new BinOpLLVMImp(new IntLLVMImpl(),op,var1,var2))); + ValLLVM val1 = null; + ValLLVM val2 = null; + if(e1 instanceof Val){ + val1 = ((Val) e1).getValLLVM(); + } + else { + ArrayList eLLVM1 = e1.toLLVM(); + list.addAll(eLLVM1); + val1 = eLLVM1.getLast().getVar(); + } + if(e2 instanceof Val){ + val2 = ((Val) e2).getValLLVM(); + } + else { + ArrayList eLLVM2 = e2.toLLVM(); + list.addAll(eLLVM2); + val2 = eLLVM2.getLast().getVar(); + } + + list.add(new AssignLVMImp(new VarLLVMImpl(new IntLLVMImpl()/*TODO*/,"todo"), new BinOpLLVMImp(new IntLLVMImpl()/*TODO*/,op,val1,val2))); return list; } @@ -134,7 +152,7 @@ public class Program{ @Override public ArrayList toLLVM() { ArrayList list = e.toLLVM(); - InstructionLLVM r = new ReturnLLVMImp(new IntLLVMImpl(),list.getLast().getVar()); + InstructionLLVM r = new ReturnLLVMImp(new IntLLVMImpl()/*TODO*/,list.getLast().getVar()); ArrayList result = new ArrayList<>(); result.addAll(list); result.add(r); @@ -158,7 +176,7 @@ public class Program{ @Override public ArrayList toLLVM() { ArrayList list = e.toLLVM(); - InstructionLLVM r = new AssignLVMImp(new VarLLVMImpl(t),list.getLast().getVar()); + InstructionLLVM r = new AssignLVMImp(new VarLLVMImpl(new IntLLVMImpl()/*TODO*/,t),list.getLast().getVar()); ArrayList result = new ArrayList<>(); result.addAll(list); result.add(r); diff --git a/src/main/java/TP2/llvm/Interface.java b/src/main/java/TP2/llvm/Interface.java index af5053a..deb9e93 100644 --- a/src/main/java/TP2/llvm/Interface.java +++ b/src/main/java/TP2/llvm/Interface.java @@ -43,11 +43,11 @@ public interface Interface { } public interface ExpressionLLVMVisitor { - public S visitConstLLVM(ConstLLVMImp e,H h); + public S visitConstLLVM(ValLLVM e,H h); public S visitBinOpLLVM(BinOpLLVMImp e, H h); } - public interface Val extends ExpressionLLVM{ + public interface ValLLVM extends ExpressionLLVM{ public String prettyprinter(); } diff --git a/src/main/java/TP2/llvm/ProgramLLVM.java b/src/main/java/TP2/llvm/ProgramLLVM.java index 1bddbbc..220244e 100644 --- a/src/main/java/TP2/llvm/ProgramLLVM.java +++ b/src/main/java/TP2/llvm/ProgramLLVM.java @@ -115,7 +115,7 @@ public class ProgramLLVM { } //Expression : - public static record BinOpLLVMImp(TypeLLVM type,Op op, Val val1,Val val2) implements ExpressionLLVM{ + public static record BinOpLLVMImp(TypeLLVM type,Op op, ValLLVM val1,ValLLVM val2) implements ExpressionLLVM{ public S accept(ExpressionLLVMVisitor v, H h) { return v.visitBinOpLLVM(this, h); } @@ -140,7 +140,7 @@ public class ProgramLLVM { } - public static record ConstLLVMImp(TypeLLVM type, int val) implements ExpressionLLVM{ + /*public static record ConstLLVMImp(TypeLLVM type, int val) implements ExpressionLLVM{ public S accept(ExpressionLLVMVisitor v, H h) { return v.visitConstLLVM(this, h); } @@ -150,7 +150,7 @@ public class ProgramLLVM { return val+""; } - } + }*/ public static record allocaLLVMImpl(TypeLLVM type, int nbBits) implements ExpressionLLVM{ @@ -160,7 +160,7 @@ public class ProgramLLVM { } - public static record loadLLVMImpl(TypeLLVM type, int nbBits,int nbBits2, Val val) implements ExpressionLLVM{ + public static record loadLLVMImpl(TypeLLVM type, int nbBits,int nbBits2, ValLLVM val) implements ExpressionLLVM{ public String prettyprinter(){ return "load" + " i" + nbBits + ", i"+ nbBits2 + "* %" + val.prettyprinter(); } @@ -169,14 +169,14 @@ public class ProgramLLVM { //Val - public static record ValLLVMImpl(int val) implements Val{ + public static record ValLLVMImpl(TypeLLVM type, int val) implements ValLLVM{ public String prettyprinter(){ return val + ""; } } - public static record VarLLVMImpl(String nom) implements Val{ + public static record VarLLVMImpl(TypeLLVM type, String nom) implements ValLLVM{ public String prettyprinter(){ return "%"+nom; }