diff options
Diffstat (limited to 'src/minijava/symboltable')
-rw-r--r-- | src/minijava/symboltable/MClass.java | 17 | ||||
-rw-r--r-- | src/minijava/symboltable/MClasses.java | 7 | ||||
-rw-r--r-- | src/minijava/symboltable/MMethod.java | 15 | ||||
-rw-r--r-- | src/minijava/symboltable/MMethodList.java | 4 | ||||
-rw-r--r-- | src/minijava/symboltable/MVarList.java | 4 | ||||
-rw-r--r-- | src/minijava/symboltable/MVariable.java | 5 | ||||
-rw-r--r-- | src/minijava/symboltable/OutputFormat.java | 12 |
7 files changed, 63 insertions, 1 deletions
diff --git a/src/minijava/symboltable/MClass.java b/src/minijava/symboltable/MClass.java index 4e64f54..37bfcfb 100644 --- a/src/minijava/symboltable/MClass.java +++ b/src/minijava/symboltable/MClass.java @@ -38,5 +38,22 @@ public class MClass extends MLocalVarType { methods.addMethod(method); return null; } + + // 调试输出: 打印该类的信息 + public void printClass(int spaces) { + String ps = OutputFormat.spaces(spaces); + if (this.extend_class_name!=null) { + System.err.println(ps + "Class "+this.name+" extends "+this.extend_class_name); + } else { + System.err.println(ps + "Class "+this.name); + } + for (int i=0; i<vars.size(); i++) { + vars.varlist.elementAt(i).printVar(spaces+2); + System.err.println(); + } + for (int i=0; i<methods.size(); i++) { + methods.methods.elementAt(i).printMethod(spaces+2); + } + } } diff --git a/src/minijava/symboltable/MClasses.java b/src/minijava/symboltable/MClasses.java index a4d066f..2df2ba8 100644 --- a/src/minijava/symboltable/MClasses.java +++ b/src/minijava/symboltable/MClasses.java @@ -27,5 +27,12 @@ public class MClasses extends MType { } return false; } + + // 调试输出: 打印所有的类的信息 + public void printClasses(int spaces) { + for (int i=0; i<mj_classes.size(); i++) { + mj_classes.elementAt(i).printClass(spaces); + } + } } diff --git a/src/minijava/symboltable/MMethod.java b/src/minijava/symboltable/MMethod.java index ea2a363..3b0888e 100644 --- a/src/minijava/symboltable/MMethod.java +++ b/src/minijava/symboltable/MMethod.java @@ -10,7 +10,6 @@ public class MMethod extends MLocalVarType { super(m_line, m_column); this.name = m_name; this.ret_type_name = ret_type; - ret_type_name = null; paramList = new MVarList(); } @@ -34,4 +33,18 @@ public class MMethod extends MLocalVarType { paramList.insertVar(var); return null; } + + public void printMethod(int spaces) { + String ps = OutputFormat.spaces(spaces); + System.err.print(ps + this.ret_type_name + " " + this.name + "("); + for (int i=0; i<paramList.size(); i++) { + if (i>0) System.err.print(","); + paramList.varlist.elementAt(i).printVar(0); + } + System.err.println(")"); + for (int i=0; i<vars.size(); i++) { + vars.varlist.elementAt(i).printVar(spaces+2); + System.err.println(); + } + } } diff --git a/src/minijava/symboltable/MMethodList.java b/src/minijava/symboltable/MMethodList.java index 34f79e6..01bef3c 100644 --- a/src/minijava/symboltable/MMethodList.java +++ b/src/minijava/symboltable/MMethodList.java @@ -21,4 +21,8 @@ public class MMethodList extends MType { } return -1; } + + public int size() { + return methods.size(); + } } diff --git a/src/minijava/symboltable/MVarList.java b/src/minijava/symboltable/MVarList.java index ede97fc..79f7457 100644 --- a/src/minijava/symboltable/MVarList.java +++ b/src/minijava/symboltable/MVarList.java @@ -21,4 +21,8 @@ public class MVarList extends MType { } return -1; } + + public int size() { + return varlist.size(); + } } diff --git a/src/minijava/symboltable/MVariable.java b/src/minijava/symboltable/MVariable.java index 2655561..4501396 100644 --- a/src/minijava/symboltable/MVariable.java +++ b/src/minijava/symboltable/MVariable.java @@ -8,4 +8,9 @@ public class MVariable extends MType { name = v_name; typename = v_type; } + + public void printVar(int spaces) { + String ps = OutputFormat.spaces(spaces); + System.err.print(ps + typename + " " + this.name); + } } diff --git a/src/minijava/symboltable/OutputFormat.java b/src/minijava/symboltable/OutputFormat.java new file mode 100644 index 0000000..71a819e --- /dev/null +++ b/src/minijava/symboltable/OutputFormat.java @@ -0,0 +1,12 @@ +package minijava.symboltable; + +public class OutputFormat { + public static String spaces(int n) { + String s = ""; + while (n>0) { + s+=" "; + n--; + } + return s; + } +} |