package me.august.lumen.compile.analyze;
import me.august.lumen.compile.parser.ast.ClassNode;
import me.august.lumen.compile.parser.ast.FieldNode;
import me.august.lumen.compile.parser.ast.MethodNode;
import me.august.lumen.compile.parser.ast.ProgramNode;
import me.august.lumen.compile.parser.ast.expr.Expression;
import me.august.lumen.compile.parser.ast.stmt.*;
/**
* Visitor pattern used for traversing the AST.
*
* Methods must be invoked in this order:
* visitProgram
* visitClass
* (
* visitField |
* visitMethod (
* (visitBody ... visitBodyEnd | visitVar | visitExpression)*
* )*
* )*
* visitClassEnd
* visitProgramEnd
*/
public interface ASTVisitor {
default void visitProgram(ProgramNode program) {}
default void visitProgramEnd(ProgramNode program) {}
default void visitClass(ClassNode cls) {}
default void visitClassEnd(ClassNode cls) {}
default void visitField(FieldNode field) {}
default void visitMethod(MethodNode method) {}
default void visitMethodEnd(MethodNode method) {}
default void visitBody(Body body) {}
default void visitBodyEnd(Body body) {}
default void visitVar(VarStmt var) {}
default void visitReturn(ReturnStmt ret) {}
default void visitWhileStmt(WhileStmt stmt) {}
default void visitEachStmt(EachStmt stmt) {}
default void visitForStmt(ForStmt stmt) {}
default void visitBreakStmt(BreakStmt stmt) {}
default void visitNextStmt(NextStmt stmt) {}
default void visitExpression(Expression expr) {}
}