diff options
author | Iru Cai <mytbk920423@gmail.com> | 2014-10-24 20:42:47 +0800 |
---|---|---|
committer | Iru Cai <mytbk920423@gmail.com> | 2014-10-24 20:42:47 +0800 |
commit | 6f42d803d875427bb705c0deddd10a9f8a13eb93 (patch) | |
tree | 4be0bf1b6e6cd1c399d42e7e659855517a7fcb45 /src/minijava | |
parent | 92f91d3e9bce1aaf581baa9339744266d7eb0c1a (diff) | |
download | minijava-6f42d803d875427bb705c0deddd10a9f8a13eb93.tar.xz |
Begin miniJava to Piglet
Diffstat (limited to 'src/minijava')
-rw-r--r-- | src/minijava/minijava2piglet/Main.java | 23 | ||||
-rw-r--r-- | src/minijava/minijava2piglet/PigletLabel.java | 9 | ||||
-rw-r--r-- | src/minijava/minijava2piglet/PigletTemp.java | 9 |
3 files changed, 36 insertions, 5 deletions
diff --git a/src/minijava/minijava2piglet/Main.java b/src/minijava/minijava2piglet/Main.java index 02e5e22..9e8607a 100644 --- a/src/minijava/minijava2piglet/Main.java +++ b/src/minijava/minijava2piglet/Main.java @@ -3,23 +3,36 @@ package minijava.minijava2piglet; import minijava.MiniJavaParser;
import minijava.ParseException;
import minijava.TokenMgrError;
+import minijava.symboltable.MClasses;
import minijava.syntaxtree.Node;
+import minijava.typecheck.PrintError;
+import minijava.visitor.BuildSymbolTableVisitor;
import minijava.visitor.GJDepthFirst;
+import minijava.visitor.GenPigletVisitor;
public class Main {
public static void main(String[] args) {
try {
- Node root = new MiniJavaParser(System.in).Goal();
+ new MiniJavaParser(System.in);
+ Node root = MiniJavaParser.Goal();
+
+ // 初始化符号表中最大的类
+ MClasses my_classes = new MClasses();
+
+ // 遍历抽象语法树,建立符号表,检查是否重复定义
+ root.accept(new BuildSymbolTableVisitor(), my_classes);
+
+ // 建立类的继承关系,寻找循环继承
+ my_classes.buildClassRelation();
+
/*
* TODO: Implement your own Visitors and other classes.
*
*/
- GJDepthFirst v = new GJDepthFirst<Object,Object>() {
- };
- //Traverse the Abstract Grammar Tree
- root.accept(v,null);
+ GJDepthFirst v = new GenPigletVisitor();
+ root.accept(v, my_classes);
}
catch(TokenMgrError e){
//Handle Lexical Errors
diff --git a/src/minijava/minijava2piglet/PigletLabel.java b/src/minijava/minijava2piglet/PigletLabel.java new file mode 100644 index 0000000..b4cf917 --- /dev/null +++ b/src/minijava/minijava2piglet/PigletLabel.java @@ -0,0 +1,9 @@ +package minijava.minijava2piglet; + +public class PigletLabel { + static int nLabels = 0; + public static String newLabel() { + nLabels++; + return "L"+nLabels; + } +} diff --git a/src/minijava/minijava2piglet/PigletTemp.java b/src/minijava/minijava2piglet/PigletTemp.java new file mode 100644 index 0000000..282f148 --- /dev/null +++ b/src/minijava/minijava2piglet/PigletTemp.java @@ -0,0 +1,9 @@ +package minijava.minijava2piglet; + +public class PigletTemp { + static int tmpid = 20; + public static String newTmp() { + tmpid++; + return "TEMP "+tmpid; + } +} |