summaryrefslogtreecommitdiff
path: root/src/minijava/symboltable/MClass.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/minijava/symboltable/MClass.java')
-rw-r--r--src/minijava/symboltable/MClass.java44
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;
+ }
+}
+