summaryrefslogtreecommitdiff
path: root/src/minijava/typecheck/Main.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/minijava/typecheck/Main.java')
-rw-r--r--src/minijava/typecheck/Main.java42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/minijava/typecheck/Main.java b/src/minijava/typecheck/Main.java
new file mode 100644
index 0000000..35ac860
--- /dev/null
+++ b/src/minijava/typecheck/Main.java
@@ -0,0 +1,42 @@
+/**
+ * 用于类型检查的主函数入口
+ */
+package minijava.typecheck;
+
+import minijava.MiniJavaParser;
+import minijava.ParseException;
+import minijava.TokenMgrError;
+import minijava.symboltable.MClasses;
+import minijava.symboltable.MType;
+import minijava.syntaxtree.Node;
+import minijava.visitor.BuildSymbolTableVisitor;
+
+public class Main {
+
+ public static void main(String[] args) {
+
+ try {
+ new MiniJavaParser(System.in);
+ Node root = MiniJavaParser.Goal();
+
+ // 初始化符号表中最大的类
+ MType my_classes = new MClasses();
+
+ // 遍历抽象语法树,建立符号表,检查是否重复定义
+ root.accept(new BuildSymbolTableVisitor(), my_classes);
+
+ // 打印错误信息
+ PrintError.printAll();
+ } catch (TokenMgrError e) {
+
+ // Handle Lexical Errors
+ e.printStackTrace();
+ } catch (ParseException e) {
+
+ // Handle Grammar Errors
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+} \ No newline at end of file