package minijava.symboltable; import minijava.typecheck.PrintError; public class MMethod extends MLocalVarType { MVarList params; public String ret_type_name; public MClass method_class; MVarList paramList; public MStatementList statements; public MExpression ret_expr; public MMethod(String m_name, String ret_type, int m_line, int m_column) { super(m_line, m_column); this.name = m_name; this.ret_type_name = ret_type; paramList = new MVarList(); statements = new MStatementList(); } public String insertVar(MVariable var) { String var_name = var.getName(); if (paramList.findVar(var_name)!=-1) { return "Variable \'" + var_name + "\' already in param list!"; } if (vars.findVar(var_name)!=-1) { return "Variable double declaration " + "\"" + var_name + "\""; } vars.insertVar(var); return null; } public String addParam(MVariable var) { String var_name = var.getName(); if (paramList.findVar(var_name)!=-1) { return "Parameter variable double declaration: " + var_name; } paramList.insertVar(var); return null; } // 检测函数的返回类型,参数类型,局部变量类型是否为有效类型 public boolean validVars() { if (method_class.validType(ret_type_name)==false) { PrintError.print(this.line, this.column, "Return type of method "+this.name+" invalid"); return false; } for (int i=0; i0) System.err.print(","); paramList.varlist.elementAt(i).printVar(0); } System.err.println(")"); // 输出局部变量 for (int i=0; i