detection d'erreur Fonction/Proto + harmonisation nom des Class dans ProgramLLVM (mélange de 'Imp' et 'Impl')

This commit is contained in:
Rochas
2025-04-27 19:02:08 +02:00
parent 0105a3f59e
commit 6dfa1c6fd8
10 changed files with 131 additions and 114 deletions

View File

@@ -9,7 +9,7 @@ public interface Interface {
}
public interface ProgramLLVMVisitor<H,S> {
public S visitProgramLLVM(ProgramLLVMImpl prog, H h);
public S visitProgramLLVM(ProgramLLVMImp prog, H h);
}
//////////DefineLLVM (function)
@@ -18,7 +18,7 @@ public interface Interface {
}
public interface DefineLLVMVisitor<H,S> {
public S visitDefineLLVM(DefineLLVMImpl define, H h);
public S visitDefineLLVM(DefineLLVMImp define, H h);
}
public interface InstructionLLVM{
@@ -26,15 +26,15 @@ public interface Interface {
}
public interface InstructionLLVMVisitor<H,S> {
public S visitReturnLLVM(ReturnLLVMImpl instr, H h);
public S visitAssignLLVM(AssignLVMImpl instr, H h);
public S visitStoreLLVM(StoreLLVMImpl instr, H h);
public S visitPrintLLVM(PrintLLVMImpl instr, H h);
public S visitReadLLVM(ReadLLVMImpl instr, H h);
public S visitReturnLLVM(ReturnLLVMImp instr, H h);
public S visitAssignLLVM(AssignLVMImp instr, H h);
public S visitStoreLLVM(StoreLLVMImp instr, H h);
public S visitPrintLLVM(PrintLLVMImp instr, H h);
public S visitReadLLVM(ReadLLVMImp instr, H h);
public S visitLabelLLVM(LabelLLVMImp instr, H h);
public S visitBrLLVM(BrLLVMImp instr, H h);
public S visitBrCondLLVM(BrCondLLVMImp instr, H h);
public S visitCallLLVM(CallLLVMImpl instr, H h);
public S visitCallLLVM(CallLLVMImp instr, H h);
}
//////////ExpressionLLVM (expression)
@@ -47,11 +47,11 @@ public interface Interface {
}
public interface ExpressionLLVMVisitor<H,S> {
public S visitBinOpLLVM(BinOpLLVMImpl e, H h);
public S visitAllocaLLVM(allocaLLVMImpl e,H h);
public S visitLoadLLVM(LoadLLVMImpl e,H h);
public S visitValLLVM(ValLLVMImpl e,H h);
public S visitVarLLVM(VarLLVMImpl e,H h);
public S visitBinOpLLVM(BinOpLLVMImp e, H h);
public S visitAllocaLLVM(allocaLLVMImp e,H h);
public S visitLoadLLVM(LoadLLVMImp e,H h);
public S visitValLLVM(ValLLVMImp e,H h);
public S visitVarLLVM(VarLLVMImp e,H h);
public S visitIcmpLLVM(IcmpLLVMImp e, H h);
}
@@ -67,8 +67,8 @@ public interface Interface {
}
public interface TypeLLVMVisitor<H,S> {
public S visitIntLLVM(IntLLVMImpl e,H h);
public S visitVoidLLVM(VoidLLVMImpl e, H h);
public S visitIntLLVM(IntLLVMImp e,H h);
public S visitVoidLLVM(VoidLLVMImp e, H h);
public S visitBooleanLLVM(BooleanLLVMImp e, H h);
public S visitStringLLVM(StringLLVMImp e, H h);
}

View File

@@ -15,7 +15,7 @@ TypeLLVMVisitor<String,String>
static String INDENT = " ";
@Override
public String visitProgramLLVM(ProgramLLVMImpl prog, String indent) {
public String visitProgramLLVM(ProgramLLVMImp prog, String indent) {
StringBuilder str = new StringBuilder();
str.append("; Target\n");
str.append("target triple = \"x86_64-pc-linux-gnu\"\n");
@@ -40,13 +40,13 @@ TypeLLVMVisitor<String,String>
}
@Override
public String visitDefineLLVM(DefineLLVMImpl define, String indent) {
public String visitDefineLLVM(DefineLLVMImp define, String indent) {
StringBuilder str = new StringBuilder("define ");
str.append(define.type().accept(this,indent)).append(" @").append(define.name()).append("(");
List<VarLLVMImpl> params = define.params();
List<VarLLVMImp> params = define.params();
for (int i = 0; i < params.size(); i++) {
VarLLVMImpl param = params.get(i);
VarLLVMImp param = params.get(i);
str.append(param.getType().accept(this, indent)).append(" ").append(param.accept(this, indent));
if (i < params.size() - 1) str.append(", ");
}
@@ -60,17 +60,17 @@ TypeLLVMVisitor<String,String>
}
@Override
public String visitReturnLLVM(ReturnLLVMImpl instr, String h) {
public String visitReturnLLVM(ReturnLLVMImp instr, String h) {
return INDENT+"ret " + instr.type().accept(this, h) + " " + instr.e().accept(this, h);
}
@Override
public String visitAssignLLVM(AssignLVMImpl instr, String h) {
public String visitAssignLLVM(AssignLVMImp instr, String h) {
return INDENT+instr.var().accept(this, h) + " = " + instr.e().accept(this, h);
}
@Override
public String visitBinOpLLVM(BinOpLLVMImpl e, String h) {
public String visitBinOpLLVM(BinOpLLVMImp e, String h) {
String str = "";
switch(e.op()){
case PLUS:
@@ -100,23 +100,23 @@ TypeLLVMVisitor<String,String>
}
@Override
public String visitAllocaLLVM(allocaLLVMImpl e, String h) {
public String visitAllocaLLVM(allocaLLVMImp e, String h) {
return "alloca " + e.type().accept(this, h);
}
@Override
public String visitStoreLLVM(StoreLLVMImpl instr, String h) {
public String visitStoreLLVM(StoreLLVMImp instr, String h) {
return INDENT+"store " + instr.valType().accept(this, "") + " " + instr.e().accept(this, "") + ", " + instr.varType().accept(this, "") + "* " + instr.var().accept(this,"");
}
@Override
public String visitLoadLLVM(LoadLLVMImpl e, String h) {
public String visitLoadLLVM(LoadLLVMImp e, String h) {
return "load" + " " + e.getType().accept(this, h) + ", "+ e.getType().accept(this, h) + "* " + e.val().accept(this, h);
}
@Override
public String visitCallLLVM(CallLLVMImpl instr, String h) {
public String visitCallLLVM(CallLLVMImp instr, String h) {
String str = INDENT+ "call " + instr.str() + instr.f().type().accept(this, h) + " @"+instr.f().name() + "(";
for(int i = 0; i<instr.params().size(); i++){
str += instr.params().get(i).getType().accept(this, h) + " " + instr.params().get(i).accept(this,h);
@@ -126,16 +126,16 @@ TypeLLVMVisitor<String,String>
}
@Override
public String visitPrintLLVM(PrintLLVMImpl instr, String h) { //TODO
DefineLLVMImpl printLLVM = new DefineLLVMImpl("printf", new IntLLVMImpl(), new ArrayList<>(), new ArrayList<>());
CallLLVMImpl callPrint = new CallLLVMImpl(printLLVM, new ArrayList<>(),"(i8*,...) ");
public String visitPrintLLVM(PrintLLVMImp instr, String h) { //TODO
DefineLLVMImp printLLVM = new DefineLLVMImp("printf", new IntLLVMImp(), new ArrayList<>(), new ArrayList<>());
CallLLVMImp callPrint = new CallLLVMImp(printLLVM, new ArrayList<>(),"(i8*,...) ");
return callPrint.accept(this, h);
}
@Override
public String visitReadLLVM(ReadLLVMImpl instr, String h) { //TODO
DefineLLVMImpl readLLVM = new DefineLLVMImpl("scanf", new IntLLVMImpl(), new ArrayList<>(), new ArrayList<>());
CallLLVMImpl callRead = new CallLLVMImpl(readLLVM, instr.l(),"(i8*,...) ");
public String visitReadLLVM(ReadLLVMImp instr, String h) { //TODO
DefineLLVMImp readLLVM = new DefineLLVMImp("scanf", new IntLLVMImp(), new ArrayList<>(), new ArrayList<>());
CallLLVMImp callRead = new CallLLVMImp(readLLVM, instr.l(),"(i8*,...) ");
return callRead.accept(this, h);
}
@@ -158,22 +158,22 @@ TypeLLVMVisitor<String,String>
@Override
public String visitValLLVM(ValLLVMImpl e, String h) {
public String visitValLLVM(ValLLVMImp e, String h) {
return e.val() + "";
}
@Override
public String visitVarLLVM(VarLLVMImpl e, String h) {
public String visitVarLLVM(VarLLVMImp e, String h) {
return "%"+e.nom();
}
@Override
public String visitIntLLVM(IntLLVMImpl e, String h) {
public String visitIntLLVM(IntLLVMImp e, String h) {
return "i32";
}
@Override
public String visitVoidLLVM(VoidLLVMImpl e, String h) {
public String visitVoidLLVM(VoidLLVMImp e, String h) {
return "void";
}

View File

@@ -9,7 +9,7 @@ import TP2.llvm.Interface.*;
public class ProgramLLVM {
//Program
public static record ProgramLLVMImpl(ArrayList<Integer> declration ,ArrayList<DefineLLVM> fonctions) implements ProgLLVM{
public static record ProgramLLVMImp(ArrayList<Integer> declration ,ArrayList<DefineLLVM> fonctions) implements ProgLLVM{
public <H, S> S accept(ProgramLLVMVisitor<H, S> v, H h) {
return v.visitProgramLLVM(this, h);
}
@@ -22,7 +22,7 @@ public class ProgramLLVM {
//Define
public static record DefineLLVMImpl(String name, TypeLLVM type, ArrayList<VarLLVMImpl> params, ArrayList<InstructionLLVM> instrs) implements DefineLLVM{
public static record DefineLLVMImp(String name, TypeLLVM type, ArrayList<VarLLVMImp> params, ArrayList<InstructionLLVM> instrs) implements DefineLLVM{
public <H, S> S accept(DefineLLVMVisitor<H, S> v, H h) {
return v.visitDefineLLVM(this, h);
}
@@ -45,7 +45,7 @@ public class ProgramLLVM {
}
}
public static record BrCondLLVMImp(VarLLVMImpl var, String label, String labelElse) implements InstructionLLVM{
public static record BrCondLLVMImp(VarLLVMImp var, String label, String labelElse) implements InstructionLLVM{
@Override
public <H, S> S accept(InstructionLLVMVisitor<H, S> v, H h) {
return v.visitBrCondLLVM(this, h);
@@ -53,42 +53,42 @@ public class ProgramLLVM {
}
public static record AssignLVMImpl(VarLLVMImpl var, ExpressionLLVM e) implements InstructionLLVM{
public static record AssignLVMImp(VarLLVMImp var, ExpressionLLVM e) implements InstructionLLVM{
@Override
public <H, S> S accept(InstructionLLVMVisitor<H, S> v, H h) {
return v.visitAssignLLVM(this, h);
}
}
public static record ReturnLLVMImpl(TypeLLVM type, ExpressionLLVM e) implements InstructionLLVM{
public static record ReturnLLVMImp(TypeLLVM type, ExpressionLLVM e) implements InstructionLLVM{
@Override
public <H, S> S accept(InstructionLLVMVisitor<H, S> v, H h) {
return v.visitReturnLLVM(this, h);
}
}
public static record StoreLLVMImpl(TypeLLVM valType, ExpressionLLVM e,TypeLLVM varType, ValLLVM var) implements InstructionLLVM{
public static record StoreLLVMImp(TypeLLVM valType, ExpressionLLVM e,TypeLLVM varType, ValLLVM var) implements InstructionLLVM{
@Override
public <H, S> S accept(InstructionLLVMVisitor<H, S> v, H h) {
return v.visitStoreLLVM(this, h);
}
}
public static record CallLLVMImpl(DefineLLVMImpl f, ArrayList<ValLLVM> params, String str) implements InstructionLLVM{
public static record CallLLVMImp(DefineLLVMImp f, ArrayList<ValLLVM> params, String str) implements InstructionLLVM{
@Override
public <H, S> S accept(InstructionLLVMVisitor<H, S> v, H h) {
return v.visitCallLLVM(this, h);
}
}
public static record PrintLLVMImpl(ArrayList<ValLLVM> l) implements InstructionLLVM{ //TODO c'est un Call qui appel la fonction print
public static record PrintLLVMImp(ArrayList<ValLLVM> l) implements InstructionLLVM{ //TODO c'est un Call qui appel la fonction print
@Override
public <H, S> S accept(InstructionLLVMVisitor<H, S> v, H h) {
return v.visitPrintLLVM(this, h);
}
}
public static record ReadLLVMImpl(ArrayList<ValLLVM> l) implements InstructionLLVM{ //TODO c'est un Call qui appel la fonction read
public static record ReadLLVMImp(ArrayList<ValLLVM> l) implements InstructionLLVM{ //TODO c'est un Call qui appel la fonction read
@Override
public <H, S> S accept(InstructionLLVMVisitor<H, S> v, H h) {
@@ -97,7 +97,7 @@ public class ProgramLLVM {
}
//Expression :
public static record BinOpLLVMImpl(TypeLLVM type,Op op, ValLLVM val1,ValLLVM val2) implements ExpressionLLVM{
public static record BinOpLLVMImp(TypeLLVM type,Op op, ValLLVM val1,ValLLVM val2) implements ExpressionLLVM{
@Override
public <H, S> S accept(ExpressionLLVMVisitor<H, S> v, H h) {
return v.visitBinOpLLVM(this, h);
@@ -123,7 +123,7 @@ public class ProgramLLVM {
}*/
public static record allocaLLVMImpl(TypeLLVM type) implements ExpressionLLVM{
public static record allocaLLVMImp(TypeLLVM type) implements ExpressionLLVM{
@Override
public <H, S> S accept(ExpressionLLVMVisitor<H, S> v, H h) {
return v.visitAllocaLLVM(this, h);
@@ -136,7 +136,7 @@ public class ProgramLLVM {
}
public static record LoadLLVMImpl(ValLLVM val) implements ExpressionLLVM{
public static record LoadLLVMImp(ValLLVM val) implements ExpressionLLVM{
@Override
public <H, S> S accept(ExpressionLLVMVisitor<H, S> v, H h) {
return v.visitLoadLLVM(this, h);
@@ -163,7 +163,7 @@ public class ProgramLLVM {
//Val
public static record ValLLVMImpl(TypeLLVM type, int val) implements ValLLVM{
public static record ValLLVMImp(TypeLLVM type, int val) implements ValLLVM{
@Override
public <H, S> S accept(ExpressionLLVMVisitor<H, S> v, H h) {
return v.visitValLLVM(this, h);
@@ -176,7 +176,7 @@ public class ProgramLLVM {
}
public static record VarLLVMImpl(TypeLLVM type, String nom) implements ValLLVM{
public static record VarLLVMImp(TypeLLVM type, String nom) implements ValLLVM{
@Override
public <H, S> S accept(ExpressionLLVMVisitor<H, S> v, H h) {
return v.visitVarLLVM(this, h);
@@ -189,7 +189,7 @@ public class ProgramLLVM {
}
public static record IntLLVMImpl() implements TypeLLVM{
public static record IntLLVMImp() implements TypeLLVM{
@Override
public <H, S> S accept(TypeLLVMVisitor<H, S> v, H h) {
return v.visitIntLLVM(this, h);
@@ -197,7 +197,7 @@ public class ProgramLLVM {
}
public static record VoidLLVMImpl() implements TypeLLVM{
public static record VoidLLVMImp() implements TypeLLVM{
@Override
public <H, S> S accept(TypeLLVMVisitor<H, S> v, H h) {
return v.visitVoidLLVM(this, h);