package TP2.asd; import java.util.ArrayList; import java.util.List; import TP2.asd.Program.*; import TP2.llvm.Interface.*; import TP2.llvm.ProgramLLVM.*; public interface Interface{ //////////Program public interface ProgramI { public S accept(ProgramVisitor v, H h); public String prettyprinter(); public ProgramLLVMImpl toLLVM(); } public interface ProgramVisitor { public S visitProgram(ProgramImp programImp, H h); } //////////Function public interface Function { public S accept(FunctionVisitor v, H h); public String prettyprinter(String indent); public DefineLLVM toLLVM(); } public interface FunctionVisitor { public S visitFunction(FunctionImp e, H h); } //////////Instruction public interface Instruction { public S accept(InstrVisitor v, H h); public String prettyprinter(String indent); public ArrayList toLLVM(); } public interface InstrVisitor{ public S visitReturn(Return_instrImp e, H h); public S visitAssign(AssignImp e, 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 S accept(ExprVisitor v, H h); public String prettyprinter(); public ArrayList toLLVM(); } public interface ExprVisitor { public S visitConst(ConstImp e,H h); public S visitBinOp(BinopExpressionImp e, H h); } public interface Type{ public String prettyprinter(); public TypeLLVM toLLVM(); } public enum Op {PLUS, MINUS, TIMES, DIV, MOD} }