package ast.walking; import java.util.Observable; import java.util.Observer; import java.util.Stack; import org.antlr.v4.runtime.ParserRuleContext; import ast.ASTNode; import ast.ASTNodeBuilder; public abstract class ASTWalker implements Observer { public void update(Observable obj, Object arg) { ASTWalkerEvent event = (ASTWalkerEvent) arg; switch (event.id) { case BEGIN: begin(); break; case START_OF_UNIT: startOfUnit(event.ctx, event.filename); break; case END_OF_UNIT: endOfUnit(event.ctx, event.filename); break; case PROCESS_ITEM: processItem(event.item, event.itemStack); break; case END: end(); break; } ; } public abstract void startOfUnit(ParserRuleContext ctx, String filename); public abstract void endOfUnit(ParserRuleContext ctx, String filename); public abstract void processItem(ASTNode node, Stack<ASTNodeBuilder> nodeStack); public void begin(){} public void end(){} }