diff options
author | Iru Cai <mytbk920423@gmail.com> | 2014-10-08 21:15:43 +0800 |
---|---|---|
committer | Iru Cai <mytbk920423@gmail.com> | 2014-10-08 21:15:43 +0800 |
commit | 748308e11e6791284b302f61e5bc0d99a0957b6a (patch) | |
tree | 31b88d40d043f39d54ab90393656300656aaa209 /src/minijava/typecheck | |
download | minijava-748308e11e6791284b302f61e5bc0d99a0957b6a.tar.xz |
First commit
Diffstat (limited to 'src/minijava/typecheck')
-rw-r--r-- | src/minijava/typecheck/Main.java | 42 | ||||
-rw-r--r-- | src/minijava/typecheck/PrintError.java | 24 |
2 files changed, 66 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 diff --git a/src/minijava/typecheck/PrintError.java b/src/minijava/typecheck/PrintError.java new file mode 100644 index 0000000..a5a5157 --- /dev/null +++ b/src/minijava/typecheck/PrintError.java @@ -0,0 +1,24 @@ +/** + * 存放错误信息并统一打印 + */ +package minijava.typecheck; + +import java.util.Vector; + +public class PrintError { + private static Vector<String> errors = new Vector<String>(); + + public static void print(int line, int column, String error_msg) { + String msg = "Line " + line + " Column " + column + ": " + error_msg; + errors.addElement(msg); // 存储错误信息 + } + + // 统一进行打印 + public static void printAll() { + int sz = errors.size(); + for (int i = 0; i < sz; i++) { + System.out.println(errors.elementAt(i)); + } + } +} + |