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)
|
// Pretty-print the program (to debug parsing)
|
||||||
System.err.println("todo " + ast);
|
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
|
// Verify the program semantic
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,10 @@ public interface Interface{
|
|||||||
public ArrayList<AssignLVMImp> toLLVM();
|
public ArrayList<AssignLVMImp> toLLVM();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface Val extends Expression{
|
||||||
|
public ValLLVM getValLLVM();
|
||||||
|
}
|
||||||
|
|
||||||
public interface ExprVisitor<H,S> {
|
public interface ExprVisitor<H,S> {
|
||||||
public S visitConst(ConstImp e,H h);
|
public S visitConst(ConstImp e,H h);
|
||||||
public S visitBinOp(BinopExpressionImp 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) {
|
public <H, S> S accept(ExprVisitor<H, S> v, H h) {
|
||||||
return v.visitConst(this, h);
|
return v.visitConst(this, h);
|
||||||
}
|
}
|
||||||
@@ -76,12 +76,17 @@ public class Program{
|
|||||||
return c+"";
|
return c+"";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ValLLVM getValLLVM(){
|
||||||
|
ValLLVM val = new ValLLVMImpl(new IntLLVMImpl(),c);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ArrayList<AssignLVMImp> toLLVM() { //TODO
|
public ArrayList<AssignLVMImp> toLLVM() { //TODO
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
ArrayList<AssignLVMImp> list = new ArrayList<>();
|
ArrayList<AssignLVMImp> list = new ArrayList<>();
|
||||||
ConstLLVMImp cLLVM = new ConstLLVMImp(new IntLLVMImpl(),c);
|
ValLLVM cLLVM = new ValLLVMImpl(new IntLLVMImpl(),c);
|
||||||
list.add(new AssignLVMImp(new VarLLVMImpl("todo"), cLLVM));
|
list.add(new AssignLVMImp(new VarLLVMImpl(new IntLLVMImpl(),"todo"), cLLVM));
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -108,13 +113,26 @@ public class Program{
|
|||||||
@Override
|
@Override
|
||||||
public ArrayList<AssignLVMImp> toLLVM() { //TODO si e1 ou e2 est une constante, elle doit pouvoir être mise directement dans l'expression
|
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<>();
|
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> eLLVM1 = e1.toLLVM();
|
||||||
ArrayList<AssignLVMImp> eLLVM2 = e2.toLLVM();
|
|
||||||
list.addAll(eLLVM1);
|
list.addAll(eLLVM1);
|
||||||
|
val1 = eLLVM1.getLast().getVar();
|
||||||
|
}
|
||||||
|
if(e2 instanceof Val){
|
||||||
|
val2 = ((Val) e2).getValLLVM();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ArrayList<AssignLVMImp> eLLVM2 = e2.toLLVM();
|
||||||
list.addAll(eLLVM2);
|
list.addAll(eLLVM2);
|
||||||
VarLLVMImpl var1 = eLLVM1.getLast().getVar();
|
val2 = eLLVM2.getLast().getVar();
|
||||||
VarLLVMImpl var2 = eLLVM2.getLast().getVar();
|
}
|
||||||
list.add(new AssignLVMImp(new VarLLVMImpl("todo"), new BinOpLLVMImp(new IntLLVMImpl(),op,var1,var2)));
|
|
||||||
|
list.add(new AssignLVMImp(new VarLLVMImpl(new IntLLVMImpl()/*TODO*/,"todo"), new BinOpLLVMImp(new IntLLVMImpl()/*TODO*/,op,val1,val2)));
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
@@ -134,7 +152,7 @@ public class Program{
|
|||||||
@Override
|
@Override
|
||||||
public ArrayList<InstructionLLVM> toLLVM() {
|
public ArrayList<InstructionLLVM> toLLVM() {
|
||||||
ArrayList<AssignLVMImp> list = e.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<>();
|
ArrayList<InstructionLLVM> result = new ArrayList<>();
|
||||||
result.addAll(list);
|
result.addAll(list);
|
||||||
result.add(r);
|
result.add(r);
|
||||||
@@ -158,7 +176,7 @@ public class Program{
|
|||||||
@Override
|
@Override
|
||||||
public ArrayList<InstructionLLVM> toLLVM() {
|
public ArrayList<InstructionLLVM> toLLVM() {
|
||||||
ArrayList<AssignLVMImp> list = e.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<>();
|
ArrayList<InstructionLLVM> result = new ArrayList<>();
|
||||||
result.addAll(list);
|
result.addAll(list);
|
||||||
result.add(r);
|
result.add(r);
|
||||||
|
|||||||
@@ -43,11 +43,11 @@ public interface Interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public interface ExpressionLLVMVisitor<H,S> {
|
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 S visitBinOpLLVM(BinOpLLVMImp e, H h);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface Val extends ExpressionLLVM{
|
public interface ValLLVM extends ExpressionLLVM{
|
||||||
public String prettyprinter();
|
public String prettyprinter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ public class ProgramLLVM {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Expression :
|
//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) {
|
public <H, S> S accept(ExpressionLLVMVisitor<H, S> v, H h) {
|
||||||
return v.visitBinOpLLVM(this, 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) {
|
public <H, S> S accept(ExpressionLLVMVisitor<H, S> v, H h) {
|
||||||
return v.visitConstLLVM(this, h);
|
return v.visitConstLLVM(this, h);
|
||||||
}
|
}
|
||||||
@@ -150,7 +150,7 @@ public class ProgramLLVM {
|
|||||||
return val+"";
|
return val+"";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
public static record allocaLLVMImpl(TypeLLVM type, int nbBits) implements ExpressionLLVM{
|
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(){
|
public String prettyprinter(){
|
||||||
return "load" + " i" + nbBits + ", i"+ nbBits2 + "* %" + val.prettyprinter();
|
return "load" + " i" + nbBits + ", i"+ nbBits2 + "* %" + val.prettyprinter();
|
||||||
}
|
}
|
||||||
@@ -169,14 +169,14 @@ public class ProgramLLVM {
|
|||||||
|
|
||||||
//Val
|
//Val
|
||||||
|
|
||||||
public static record ValLLVMImpl(int val) implements Val{
|
public static record ValLLVMImpl(TypeLLVM type, int val) implements ValLLVM{
|
||||||
public String prettyprinter(){
|
public String prettyprinter(){
|
||||||
return val + "";
|
return val + "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static record VarLLVMImpl(String nom) implements Val{
|
public static record VarLLVMImpl(TypeLLVM type, String nom) implements ValLLVM{
|
||||||
public String prettyprinter(){
|
public String prettyprinter(){
|
||||||
return "%"+nom;
|
return "%"+nom;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user