summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2014-10-24 20:42:47 +0800
committerIru Cai <mytbk920423@gmail.com>2014-10-24 20:42:47 +0800
commit6f42d803d875427bb705c0deddd10a9f8a13eb93 (patch)
tree4be0bf1b6e6cd1c399d42e7e659855517a7fcb45
parent92f91d3e9bce1aaf581baa9339744266d7eb0c1a (diff)
downloadminijava-6f42d803d875427bb705c0deddd10a9f8a13eb93.tar.xz
Begin miniJava to Piglet
-rw-r--r--src/minijava/minijava2piglet/Main.java23
-rw-r--r--src/minijava/minijava2piglet/PigletLabel.java9
-rw-r--r--src/minijava/minijava2piglet/PigletTemp.java9
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;
+ }
+}