summaryrefslogtreecommitdiff
path: root/src/minijava/symboltable
diff options
context:
space:
mode:
Diffstat (limited to 'src/minijava/symboltable')
-rw-r--r--src/minijava/symboltable/MClass.java17
-rw-r--r--src/minijava/symboltable/MClasses.java7
-rw-r--r--src/minijava/symboltable/MMethod.java15
-rw-r--r--src/minijava/symboltable/MMethodList.java4
-rw-r--r--src/minijava/symboltable/MVarList.java4
-rw-r--r--src/minijava/symboltable/MVariable.java5
-rw-r--r--src/minijava/symboltable/OutputFormat.java12
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;
+ }
+}