diff options
Diffstat (limited to 'src/minijava/symboltable')
-rw-r--r-- | src/minijava/symboltable/MClass.java | 4 | ||||
-rw-r--r-- | src/minijava/symboltable/MLocalVarType.java | 13 | ||||
-rw-r--r-- | src/minijava/symboltable/MMethod.java | 18 |
3 files changed, 31 insertions, 4 deletions
diff --git a/src/minijava/symboltable/MClass.java b/src/minijava/symboltable/MClass.java index a5b90f2..4e64f54 100644 --- a/src/minijava/symboltable/MClass.java +++ b/src/minijava/symboltable/MClass.java @@ -5,18 +5,16 @@ package minijava.symboltable; import minijava.typecheck.PrintError; -public class MClass extends MType { +public class MClass extends MLocalVarType { 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(); } diff --git a/src/minijava/symboltable/MLocalVarType.java b/src/minijava/symboltable/MLocalVarType.java new file mode 100644 index 0000000..9824ae4 --- /dev/null +++ b/src/minijava/symboltable/MLocalVarType.java @@ -0,0 +1,13 @@ +/* 可定义局部变量的抽象类 */ + +package minijava.symboltable; + +public abstract class MLocalVarType extends MType { + public MVarList vars; + + public MLocalVarType(int m_line, int m_column) { + super(m_line, m_column); + vars = new MVarList(); + } + public abstract String insertVar(MVariable var); +} diff --git a/src/minijava/symboltable/MMethod.java b/src/minijava/symboltable/MMethod.java index 30159cf..f4b58fa 100644 --- a/src/minijava/symboltable/MMethod.java +++ b/src/minijava/symboltable/MMethod.java @@ -1,11 +1,27 @@ package minijava.symboltable; -public class MMethod extends MType { +public class MMethod extends MLocalVarType { MVarList params; String ret_type_name; + MClass method_class; + MVarList paramList; public MMethod(String m_name, int m_type, int m_column) { super(m_type, m_column); this.name = m_name; + ret_type_name = null; + paramList = new MVarList(); + } + + 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; } } |