package midend.visit; import java.util.ArrayList; import frontend.ast.CompUnit; import frontend.ast.decl.Decl; import frontend.ast.func.FuncDef; import frontend.ast.func.MainFuncDef; import midend.symbol.SymbolManager; public class Visitor { private CompUnit compUnit; public Visitor(CompUnit compUnit) { this.compUnit = compUnit; SymbolManager.reset(); SymbolManager.nextTable(); } public void visit() { ArrayList decls = this.compUnit.GetDecls(); ArrayList funcDefs = this.compUnit.GetFuncDefs(); MainFuncDef mainFuncDef = this.compUnit.GetMainFuncDef(); for (Decl decl : decls) { VisitorDecl.visitDecl(decl); } for (FuncDef funcDef : funcDefs) { VisitorFuncDef.visitFuncDef(funcDef); } VisitorFuncDef.visitMainFuncDef(mainFuncDef); } //:TODO:符号表的变换,什么时候往前进一个符号表,这需要人工手工来操作 }