print et read presque fini !
This commit is contained in:
@@ -12,7 +12,7 @@ public class SymTable {
|
|||||||
|
|
||||||
private PStack<PMap<String,ValueVarMap>> varMap;
|
private PStack<PMap<String,ValueVarMap>> varMap;
|
||||||
private PMap<String,ValueFunMap> functionsMap;
|
private PMap<String,ValueFunMap> functionsMap;
|
||||||
private int[] id ; //id partagé entre toute les symTable, [0] : idVar, [1] : id Label, [2] : global
|
private int[] id ; //id partagé entre toute les symTable, [0] : idVar, [1] : idLabel, [2] : idGlobalVar
|
||||||
private ArrayList<DeclarGlobalLLVMImp> declarationsGlobal;
|
private ArrayList<DeclarGlobalLLVMImp> declarationsGlobal;
|
||||||
|
|
||||||
public SymTable(){
|
public SymTable(){
|
||||||
@@ -20,8 +20,9 @@ public class SymTable {
|
|||||||
this.varMap= ConsPStack.singleton(HashTreePMap.empty());
|
this.varMap= ConsPStack.singleton(HashTreePMap.empty());
|
||||||
this.functionsMap = HashTreePMap.empty();
|
this.functionsMap = HashTreePMap.empty();
|
||||||
this.declarationsGlobal = new ArrayList<>();
|
this.declarationsGlobal = new ArrayList<>();
|
||||||
this.id[0] = 1;
|
this.id[0] = 1; //idVar
|
||||||
this.id[1] = 1;
|
this.id[1] = 1; //idLaber
|
||||||
|
this.id[2] = 1; //idGlobalVar
|
||||||
}
|
}
|
||||||
public SymTable(PStack<PMap<String,ValueVarMap>> varMap, PMap<String,ValueFunMap> functionsMap, int[] id,ArrayList<DeclarGlobalLLVMImp> declarationsGlobal){
|
public SymTable(PStack<PMap<String,ValueVarMap>> varMap, PMap<String,ValueFunMap> functionsMap, int[] id,ArrayList<DeclarGlobalLLVMImp> declarationsGlobal){
|
||||||
this.varMap= varMap;
|
this.varMap= varMap;
|
||||||
|
|||||||
@@ -160,8 +160,8 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImp>,
|
|||||||
ArrayList<ValLLVM> params = new ArrayList<>();
|
ArrayList<ValLLVM> params = new ArrayList<>();
|
||||||
|
|
||||||
String name = h.getGlobalDeclName();
|
String name = h.getGlobalDeclName();
|
||||||
DeclarGlobalLLVMImp globalDecl = new DeclarGlobalLLVMImp(name);
|
VarLLVMImp varGlobal = new VarLLVMImp(new CharLLVMImp(true),name,true);
|
||||||
VarLLVMImp varGlobal = new VarLLVMImp(new StringLLVMImp(),name,true);
|
DeclarGlobalLLVMImp globalDecl = new DeclarGlobalLLVMImp(varGlobal,new CharLLVMImp(false),0); //TODO
|
||||||
h.addGlobalDecl(globalDecl);
|
h.addGlobalDecl(globalDecl);
|
||||||
|
|
||||||
params.add(varGlobal);
|
params.add(varGlobal);
|
||||||
@@ -180,8 +180,8 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImp>,
|
|||||||
ArrayList<ValLLVM> params = new ArrayList<>();
|
ArrayList<ValLLVM> params = new ArrayList<>();
|
||||||
|
|
||||||
String name = h.getGlobalDeclName();
|
String name = h.getGlobalDeclName();
|
||||||
DeclarGlobalLLVMImp globalDecl = new DeclarGlobalLLVMImp(name);
|
VarLLVMImp varGlobal = new VarLLVMImp(new CharLLVMImp(true),name,true);
|
||||||
VarLLVMImp varGlobal = new VarLLVMImp(new StringLLVMImp(),name,true);
|
DeclarGlobalLLVMImp globalDecl = new DeclarGlobalLLVMImp(varGlobal,new CharLLVMImp(false),0);//TODO
|
||||||
h.addGlobalDecl(globalDecl);
|
h.addGlobalDecl(globalDecl);
|
||||||
|
|
||||||
params.add(varGlobal);
|
params.add(varGlobal);
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public interface Interface {
|
|||||||
public S visitIntLLVM(IntLLVMImp e,H h);
|
public S visitIntLLVM(IntLLVMImp e,H h);
|
||||||
public S visitVoidLLVM(VoidLLVMImp e, H h);
|
public S visitVoidLLVM(VoidLLVMImp e, H h);
|
||||||
public S visitBooleanLLVM(BooleanLLVMImp e, H h);
|
public S visitBooleanLLVM(BooleanLLVMImp e, H h);
|
||||||
public S visitStringLLVM(StringLLVMImp e, H h);
|
public S visitCharLLVM(CharLLVMImp e, H h);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -152,8 +152,8 @@ TypeLLVMVisitor<String,String>
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String visitDeclarGlobalLLVM(DeclarGlobalLLVMImp instr, String h) {
|
public String visitDeclarGlobalLLVM(DeclarGlobalLLVMImp instr, String h) {
|
||||||
String str = "@."+instr.name() + " = global";
|
String str = "@."+instr.var().nom() + " = global";
|
||||||
str += "[" + "x"+ "]";
|
str += " [" + instr.type().accept(this, h)+ "x"+ instr.size()+ "] ";
|
||||||
str+= "c\"\"\n";
|
str+= "c\"\"\n";
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
@@ -205,8 +205,9 @@ TypeLLVMVisitor<String,String>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String visitStringLLVM(StringLLVMImp e, String h) {
|
public String visitCharLLVM(CharLLVMImp e, String h) {
|
||||||
return "i8*";
|
if(e.isString()) return "i8*";
|
||||||
|
else return "i8";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ public class ProgramLLVM {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static record DeclarGlobalLLVMImp(String name) implements InstructionLLVM{
|
public static record DeclarGlobalLLVMImp(VarLLVMImp var,TypeLLVM type, int size) implements InstructionLLVM{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <H, S> S accept(InstructionLLVMVisitor<H, S> v, H h) {
|
public <H, S> S accept(InstructionLLVMVisitor<H, S> v, H h) {
|
||||||
@@ -218,10 +218,10 @@ public class ProgramLLVM {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static record StringLLVMImp() implements TypeLLVM{
|
public static record CharLLVMImp(Boolean isString) implements TypeLLVM{
|
||||||
@Override
|
@Override
|
||||||
public <H, S> S accept(TypeLLVMVisitor<H, S> v, H h) {
|
public <H, S> S accept(TypeLLVMVisitor<H, S> v, H h) {
|
||||||
return v.visitStringLLVM(this, h);
|
return v.visitCharLLVM(this, h);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user