summaryrefslogtreecommitdiff
path: root/src/piglet/piglet2spiglet
diff options
context:
space:
mode:
Diffstat (limited to 'src/piglet/piglet2spiglet')
-rw-r--r--src/piglet/piglet2spiglet/GenSpigletCtl.java25
-rw-r--r--src/piglet/piglet2spiglet/Main.java11
-rw-r--r--src/piglet/piglet2spiglet/PigletExpr.java19
3 files changed, 51 insertions, 4 deletions
diff --git a/src/piglet/piglet2spiglet/GenSpigletCtl.java b/src/piglet/piglet2spiglet/GenSpigletCtl.java
new file mode 100644
index 0000000..a95dcc4
--- /dev/null
+++ b/src/piglet/piglet2spiglet/GenSpigletCtl.java
@@ -0,0 +1,25 @@
+package piglet.piglet2spiglet;
+
+import java.util.Vector;
+
+public class GenSpigletCtl {
+ /* DEFAULT: return a PigletExpr
+ * PRINT: used with procedure, print the StmtExp
+ * LIST: used with call, add things to list, return null
+ */
+ public enum Control { DEFAULT, PRINT, LIST };
+ Control c;
+ public Vector<PigletExpr> call_list;
+
+ public GenSpigletCtl(Control _c) {
+ c = _c;
+ call_list = new Vector<PigletExpr>();
+ }
+ public boolean isPrint() {
+ return c==Control.PRINT;
+ }
+
+ public boolean isList() {
+ return c==Control.LIST;
+ }
+}
diff --git a/src/piglet/piglet2spiglet/Main.java b/src/piglet/piglet2spiglet/Main.java
index db68b6a..7c3d01b 100644
--- a/src/piglet/piglet2spiglet/Main.java
+++ b/src/piglet/piglet2spiglet/Main.java
@@ -6,6 +6,8 @@ import piglet.PigletParser;
import piglet.TokenMgrError;
import piglet.syntaxtree.Node;
import piglet.visitor.GJDepthFirst;
+import piglet.visitor.GenSpigletVisitor;
+import piglet.visitor.ScanTempVisitor;
public class Main {
@@ -17,10 +19,11 @@ public class Main {
* TODO: Implement your own Visitors and other classes.
*
*/
- GJDepthFirst v = new GJDepthFirst<Object,Object>() {
- };
- //Traverse the Abstract Grammar Tree
- root.accept(v,null);
+ ScanTempVisitor vt = new ScanTempVisitor();
+ root.accept(vt);
+ GenSpigletVisitor gen = new GenSpigletVisitor();
+ gen.nTemp = Math.max(vt.maxtmp, 20);
+ root.accept(gen, null);
}
catch(TokenMgrError e){
//Handle Lexical Errors
diff --git a/src/piglet/piglet2spiglet/PigletExpr.java b/src/piglet/piglet2spiglet/PigletExpr.java
new file mode 100644
index 0000000..a8289e6
--- /dev/null
+++ b/src/piglet/piglet2spiglet/PigletExpr.java
@@ -0,0 +1,19 @@
+package piglet.piglet2spiglet;
+
+public class PigletExpr {
+ public enum Expr_t { Temp, Int, Label, Other };
+ public Expr_t type;
+ public String s;
+ public PigletExpr(Expr_t t, String _s) {
+ type = t;
+ s = _s;
+ }
+
+ public boolean isSimple() {
+ return type==Expr_t.Temp || type==Expr_t.Int || type==Expr_t.Label;
+ }
+
+ public String toString() {
+ return s;
+ }
+}