diff options
Diffstat (limited to 'src/piglet/piglet2spiglet')
-rw-r--r-- | src/piglet/piglet2spiglet/GenSpigletCtl.java | 25 | ||||
-rw-r--r-- | src/piglet/piglet2spiglet/Main.java | 11 | ||||
-rw-r--r-- | src/piglet/piglet2spiglet/PigletExpr.java | 19 |
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; + } +} |