diff options
Diffstat (limited to 'src/minijava/symboltable/MClass.java')
-rw-r--r-- | src/minijava/symboltable/MClass.java | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/minijava/symboltable/MClass.java b/src/minijava/symboltable/MClass.java new file mode 100644 index 0000000..a5b90f2 --- /dev/null +++ b/src/minijava/symboltable/MClass.java @@ -0,0 +1,44 @@ +/** + * 该类用于表示声明的类 + */ +package minijava.symboltable; + +import minijava.typecheck.PrintError; + +public class MClass extends MType { + public MClasses all_classes; // 所有类的列表 + public boolean isDeclared = false; // 是否已声明,用于检查符号表 + public String extend_class_name = null; // 所继承的类 + public MVarList vars; + public MMethodList methods; + + public MClass(String v_name, MClasses all, int m_line, int m_column) { + super(m_line, m_column); + name = v_name; + all_classes = all; + vars = new MVarList(); + methods = new MMethodList(); + } + + public String insertVar(MVariable var) { + String var_name = var.getName(); + if (vars.findVar(var_name)!=-1) { + return "Variable double declaration " + "\"" + var_name + "\""; + } + vars.insertVar(var); + return null; + } + + public String insertMethod(MMethod method) { + String method_name = method.getName(); + if (vars.findVar(method_name)!=-1) { + return "Method name \'" + method_name + "\' is the same of some variable."; + } + if (methods.findMethod(method_name)!=-1) { + return "Method double declaration " + "\"" + method_name + "\"."; + } + methods.addMethod(method); + return null; + } +} + |