test unimplant
This commit is contained in:
@@ -15,7 +15,6 @@ public interface Interface{
|
||||
public S visitProgram(ProgramImp prog, H h);
|
||||
}
|
||||
|
||||
|
||||
//////////Function
|
||||
public interface Function {
|
||||
public <H,S> S accept(FunctionVisitor<H,S> v, H h);
|
||||
@@ -42,10 +41,7 @@ public interface Interface{
|
||||
public S visitWhile(WhileImp instr, H h);
|
||||
}
|
||||
|
||||
|
||||
//////////Expression
|
||||
//We put prettyprinter here beause each expr will have to implement it like accept visitor
|
||||
//but each implement will be different for prettyprinter
|
||||
public interface Expression {
|
||||
public <H,S> S accept(ExprVisitor<H,S> v, H h);
|
||||
}
|
||||
|
||||
@@ -78,7 +78,10 @@ public class PrettyprinterVisitor implements ProgramVisitor<String,String>,
|
||||
public String visitIfThen(IfThenImp instr, String indent) {
|
||||
String str = indent + "IF ";
|
||||
str +=(instr.e().accept(this, ""));
|
||||
str +=" THEN " + (instr.i1().accept(this, ""));
|
||||
str +=" THEN ";
|
||||
for(int i=0; i<instr.i1().size();i++){
|
||||
str+= instr.i1().get(i).accept(this, "");
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
@@ -86,8 +89,14 @@ public class PrettyprinterVisitor implements ProgramVisitor<String,String>,
|
||||
public String visitIfThenElse(IfThenElseImp instr, String indent) {
|
||||
String str = indent + "IF ";
|
||||
str +=(instr.e().accept(this, ""));
|
||||
str +=" THEN " + (instr.i1().accept(this, ""));
|
||||
str +=" ELSE "+ (instr.i2().accept(this, ""));
|
||||
str +=" THEN ";
|
||||
for(int i=0; i<instr.i1().size();i++){
|
||||
str+= instr.i1().get(i).accept(this, "");
|
||||
}
|
||||
str +=" ELSE ";
|
||||
for(int i=0; i<instr.i2().size();i++){
|
||||
str+= instr.i2().get(i).accept(this, "");
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
@@ -105,7 +114,10 @@ public class PrettyprinterVisitor implements ProgramVisitor<String,String>,
|
||||
public String visitWhile(WhileImp instr, String indent) {
|
||||
String str = indent+"WHILE ";
|
||||
str += (instr.e().accept(this, ""));
|
||||
str+= " DO "+ (instr.i1().accept(this, ""));
|
||||
str+= " DO ";
|
||||
for(int i=0; i<instr.i1().size();i++){
|
||||
str+= instr.i1().get(i).accept(this, "");
|
||||
}
|
||||
str+= " DONE";
|
||||
return str;
|
||||
}
|
||||
|
||||
@@ -88,21 +88,21 @@ public class Program{
|
||||
}
|
||||
}
|
||||
|
||||
public static record IfThenImp(Expression e, Instruction i1) implements Instruction {
|
||||
public static record IfThenImp(Expression e, ArrayList<Instruction> i1) implements Instruction {
|
||||
@Override
|
||||
public <H, S> S accept(InstrVisitor<H, S> v, H h) {
|
||||
return v.visitIfThen(this, h);
|
||||
}
|
||||
}
|
||||
|
||||
public static record IfThenElseImp(Expression e, Instruction i1, Instruction i2) implements Instruction {
|
||||
public static record IfThenElseImp(Expression e, ArrayList<Instruction> i1, ArrayList<Instruction> i2) implements Instruction {
|
||||
@Override
|
||||
public <H, S> S accept(InstrVisitor<H, S> v, H h) {
|
||||
return v.visitIfThenElse(this, h);
|
||||
}
|
||||
}
|
||||
|
||||
public static record WhileImp(Expression e, Instruction i1) implements Instruction {
|
||||
public static record WhileImp(Expression e, ArrayList<Instruction> i1) implements Instruction {
|
||||
@Override
|
||||
public <H, S> S accept(InstrVisitor<H, S> v, H h) {
|
||||
return v.visitWhile(this, h);
|
||||
|
||||
@@ -85,10 +85,7 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImpl>
|
||||
ArrayList<InstructionLLVM> list = new ArrayList<>();
|
||||
for(int i = 0; i<instr.s().size();i++){
|
||||
TypeLLVM t2 = instr.t().accept(this,h);
|
||||
//String name = instr.s().get(i);//h.addVarLLVM(instr.s().get(i));
|
||||
Result r = h.addVar(instr.s().get(i));
|
||||
String name = r.var;
|
||||
h = r.symTable;
|
||||
String name = instr.s().get(i);//h.addVarLLVM(instr.s().get(i));
|
||||
list.add(new AssignLVMImpl(new VarLLVMImpl(t2, name),new allocaLLVMImpl(t2)));
|
||||
}
|
||||
return list;
|
||||
@@ -120,11 +117,10 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImpl>
|
||||
throw new UnsupportedOperationException("Unimplemented method 'visitIfThenElse'");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ArrayList<InstructionLLVM> visitWhile(WhileImp instr, SymTable h) {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("Unimplemented method 'visitWhile'");
|
||||
ArrayList<InstructionLLVM> l = new ArrayList<>();
|
||||
return l;
|
||||
}
|
||||
|
||||
//EXPRESSION
|
||||
@@ -137,7 +133,7 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImpl>
|
||||
|
||||
@Override
|
||||
public InstrAndVal visitVar(VarImp e, SymTable h) {
|
||||
ValLLVM val = new VarLLVMImpl(new IntLLVMImpl(), h.getVar(e.name()));
|
||||
ValLLVM val = new VarLLVMImpl(new IntLLVMImpl(), e.name());
|
||||
return new InstrAndVal(new ArrayList<>(), val);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
package TP2.llvm;
|
||||
import TP2.asd.Program.IfThenElseImp;
|
||||
import TP2.llvm.ProgramLLVM.*;
|
||||
|
||||
public interface Interface {
|
||||
@@ -31,6 +32,9 @@ public interface Interface {
|
||||
public S visitStoreLLVM(StoreLLVMImpl instr, H h);
|
||||
public S visitPrintLLVM(PrintLLVMImpl instr, H h);
|
||||
public S visitReadLLVM(ReadLLVMImpl instr, H h);
|
||||
public S visitIfThenElseLLVM(IfThenElseImp instr, H h);
|
||||
public S visitIfThenLLVM(IfThenImp instr, H h);
|
||||
public S visitWhileLLVM(WhileImp instr, H h);
|
||||
}
|
||||
|
||||
//////////ExpressionLLVM (expression)
|
||||
|
||||
@@ -74,9 +74,35 @@ public class ProgramLLVM {
|
||||
public <H, S> S accept(InstructionLLVMVisitor<H, S> v, H h) {
|
||||
return v.visitReadLLVM(this, h);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static record IfThenLLVMImp() implements InstructionLLVM{
|
||||
@Override
|
||||
public <H, S> S accept(InstructionLLVMVisitor<H, S> v, H h) {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("Unimplemented method 'accept'");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static record IfThenElseLLVMImp() implements InstructionLLVM{
|
||||
|
||||
@Override
|
||||
public <H, S> S accept(InstructionLLVMVisitor<H, S> v, H h) {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("Unimplemented method 'accept'");
|
||||
}
|
||||
}
|
||||
|
||||
public static record WhileLLVMImp() implements InstructionLLVM{
|
||||
|
||||
@Override
|
||||
public <H, S> S accept(InstructionLLVMVisitor<H, S> v, H h) {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("Unimplemented method 'accept'");
|
||||
}
|
||||
}
|
||||
|
||||
//Expression :
|
||||
public static record BinOpLLVMImpl(TypeLLVM type,Op op, ValLLVM val1,ValLLVM val2) implements ExpressionLLVM{
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user