package TP2.asd; import TP2.asd.Program.*; 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 prog, H h); } //FUNCTION public interface Function { public S accept(FunctionVisitor v, H h); } public interface FunctionVisitor { public S visitFunction(FunctionImp fun, H h); } //DECLARATION public interface Declaration{ public S accept(DeclVisitor v, H h); } public interface DeclVisitor{ public S visitDeclaration(DeclarationImp instr,H h); } //INSTRUCTION public interface Instruction { public S accept(InstrVisitor v, H h); } public interface InstrVisitor{ public S visitReturn(Return_instrImp instr, H h); public S visitBloc(BlocImp instr, H h); public S visitBlocDec (BlocDecImp instr, H h); public S visitAssign(AssignImp instr, H h); public S visitPrint(PrintImp instr, H h); public S visitRead(ReadImp instr,H h); public S visitIfThen(IfThenImp instr, H h); public S visitIfThenElse(IfThenElseImp instr, H h); public S visitWhile(WhileImp instr, H h); } //EXPRESSION public interface Expression { public S accept(ExprVisitor v, H h); } public interface ExprVisitor { public S visitConst(ConstImp e,H h); public S visitBinOp(BinopExpressionImp e, H h); public S visitVar(VarImp e,H h); } public interface Type{ public S accept(TypeVisitor v, H h); } public interface TypeVisitor{ public S visitInt(Type_intImp t, H h); public S visitVoid(Type_voidImp t, H h); } public enum Op {PLUS, MINUS, TIMES, DIV, MOD} }