change fmt to .fmt

This commit is contained in:
Vu Tuan Minh
2025-04-30 08:40:17 +02:00
parent d238ac0887
commit 0e82527b4b
6 changed files with 19 additions and 13 deletions

View File

@@ -56,12 +56,12 @@ public class Main {
//System.err.println("todo " + ast); //System.err.println("todo " + ast);
//System.out.println("\n\n PRETTYPRINTER VSL : \n--------------\n"); //System.out.println("\n\n PRETTYPRINTER VSL : \n--------------\n");
System.out.println(ast.prettyprinter()); //System.out.println(ast.prettyprinter());
//System.out.println("\n\n PRETTYPRINTER VSL : \n--------------\n"); //System.out.println("\n\n PRETTYPRINTER VSL : \n--------------\n");
// Verify the program semantic // Verify the program semantic
// Generate the intermediate representation // Generate the intermediate representation
System.out.println("\n\n"); //System.out.println("\n\n");
ProgramLLVMImp astLLVM = ast.toLLVM(); ProgramLLVMImp astLLVM = ast.toLLVM();
//System.out.println("\n\n PRETTYPRINTER LLVM : \n--------------\n"); //System.out.println("\n\n PRETTYPRINTER LLVM : \n--------------\n");

View File

@@ -132,7 +132,7 @@ public class SymTable {
} }
public String getGlobalDeclName(){; public String getGlobalDeclName(){;
return "fmt"+id[2]; return ".fmt"+id[2];
} }
public void addGlobalDecl(DeclarGlobalLLVMImp decl){ public void addGlobalDecl(DeclarGlobalLLVMImp decl){

View File

@@ -78,6 +78,8 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImp>,
if(!(instrLLVM.getLast() instanceof ReturnLLVMImp || instrLLVM.getLast() instanceof BrLLVMImp)){ if(!(instrLLVM.getLast() instanceof ReturnLLVMImp || instrLLVM.getLast() instanceof BrLLVMImp)){
instrLLVM.add(new ReturnLLVMImp(type, new ValLLVMImp(type,0))); instrLLVM.add(new ReturnLLVMImp(type, new ValLLVMImp(type,0)));
} }
}else {
//TODO
} }
DefineLLVMImp define = new DefineLLVMImp(fun.nom(), type, paramsLLVM, instrLLVM); DefineLLVMImp define = new DefineLLVMImp(fun.nom(), type, paramsLLVM, instrLLVM);
return define; return define;
@@ -225,7 +227,6 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImp>,
h.addGlobalDecl(globalDecl); h.addGlobalDecl(globalDecl);
l.add(new ScanLLVMImp(globalDecl,params)); l.add(new ScanLLVMImp(globalDecl,params));
return l; return l;
} }
@@ -257,9 +258,9 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImp>,
@Override @Override
public ArrayList<InstructionLLVM> visitIfThen(IfThenImp instr, SymTable h) { public ArrayList<InstructionLLVM> visitIfThen(IfThenImp instr, SymTable h) {
ArrayList<InstructionLLVM> l = new ArrayList<>(); ArrayList<InstructionLLVM> l = new ArrayList<>();
String labelIf= "if"+h.getNewIdLabel()+":"; String labelIf= "if"+h.getNewIdLabel();
String labelThen= "then"+h.getNewIdLabel()+":"; String labelThen= "then"+h.getNewIdLabel();
String labelFin= "fin"+h.getNewIdLabel(); String labelFin= "fi"+h.getNewIdLabel();
l.add(new LabelLLVMImp(labelIf)); l.add(new LabelLLVMImp(labelIf));
InstrAndVal temp = instr.e().accept(this,h); InstrAndVal temp = instr.e().accept(this,h);
@@ -406,6 +407,10 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImp>,
//} //}
//Pour c=func(x,y) //Pour c=func(x,y)
if (fLLVM.define.type() instanceof VoidLLVMImp) {
l.add(new CallVoidLLVMImp(fLLVM.define, paramsLLVM, ""));
return new InstrAndVal(l, null);
} else {
Result res = h.addNewTempVar(); Result res = h.addNewTempVar();
h = res.symTable; h = res.symTable;
VarLLVMImp var = new VarLLVMImp(fLLVM.define.type(), res.var, false); VarLLVMImp var = new VarLLVMImp(fLLVM.define.type(), res.var, false);
@@ -413,6 +418,7 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImp>,
l.add(new AssignLLVMImp(var, new CallLLVMImp(fLLVM.define, paramsLLVM, ""))); l.add(new AssignLLVMImp(var, new CallLLVMImp(fLLVM.define, paramsLLVM, "")));
return new InstrAndVal(l, var); return new InstrAndVal(l, var);
} }
}
@Override @Override
public TypeLLVM visitInt(Type_intImp t, SymTable h) { public TypeLLVM visitInt(Type_intImp t, SymTable h) {

BIN
tests/fragment1/if1 Executable file

Binary file not shown.

BIN
tests/fragment1/if2 Executable file

Binary file not shown.

BIN
tests/fragment1/while1 Executable file

Binary file not shown.