correction bug addLLVM avec des val
This commit is contained in:
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"files.watcherExclude": {
|
||||
"**/target": true
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -51,6 +51,10 @@ public interface Interface{
|
||||
public ArrayList<AssignLVMImp> toLLVM();
|
||||
}
|
||||
|
||||
public interface Val extends Expression{
|
||||
public ValLLVM getValLLVM();
|
||||
}
|
||||
|
||||
public interface ExprVisitor<H,S> {
|
||||
public S visitConst(ConstImp e,H h);
|
||||
public S visitBinOp(BinopExpressionImp e, H h);
|
||||
|
||||
@@ -67,7 +67,7 @@ public class Program{
|
||||
}
|
||||
|
||||
|
||||
public static record ConstImp(int c) implements Expression{
|
||||
public static record ConstImp(int c) implements Val{
|
||||
public <H, S> S accept(ExprVisitor<H, S> 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<AssignLVMImp> toLLVM() { //TODO
|
||||
// TODO Auto-generated method stub
|
||||
ArrayList<AssignLVMImp> 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<AssignLVMImp> toLLVM() { //TODO si e1 ou e2 est une constante, elle doit pouvoir être mise directement dans l'expression
|
||||
ArrayList<AssignLVMImp> list = new ArrayList<>();
|
||||
ValLLVM val1 = null;
|
||||
ValLLVM val2 = null;
|
||||
if(e1 instanceof Val){
|
||||
val1 = ((Val) e1).getValLLVM();
|
||||
}
|
||||
else {
|
||||
ArrayList<AssignLVMImp> eLLVM1 = e1.toLLVM();
|
||||
ArrayList<AssignLVMImp> eLLVM2 = e2.toLLVM();
|
||||
list.addAll(eLLVM1);
|
||||
val1 = eLLVM1.getLast().getVar();
|
||||
}
|
||||
if(e2 instanceof Val){
|
||||
val2 = ((Val) e2).getValLLVM();
|
||||
}
|
||||
else {
|
||||
ArrayList<AssignLVMImp> eLLVM2 = e2.toLLVM();
|
||||
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)));
|
||||
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<InstructionLLVM> toLLVM() {
|
||||
ArrayList<AssignLVMImp> list = e.toLLVM();
|
||||
InstructionLLVM r = new ReturnLLVMImp(new IntLLVMImpl(),list.getLast().getVar());
|
||||
InstructionLLVM r = new ReturnLLVMImp(new IntLLVMImpl()/*TODO*/,list.getLast().getVar());
|
||||
ArrayList<InstructionLLVM> result = new ArrayList<>();
|
||||
result.addAll(list);
|
||||
result.add(r);
|
||||
@@ -158,7 +176,7 @@ public class Program{
|
||||
@Override
|
||||
public ArrayList<InstructionLLVM> toLLVM() {
|
||||
ArrayList<AssignLVMImp> 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<InstructionLLVM> result = new ArrayList<>();
|
||||
result.addAll(list);
|
||||
result.add(r);
|
||||
|
||||
@@ -43,11 +43,11 @@ public interface Interface {
|
||||
}
|
||||
|
||||
public interface ExpressionLLVMVisitor<H,S> {
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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 <H, S> S accept(ExpressionLLVMVisitor<H, S> 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 <H, S> S accept(ExpressionLLVMVisitor<H, S> 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user