diff options
Diffstat (limited to 'src/spiglet/spiglet2kanga')
-rw-r--r-- | src/spiglet/spiglet2kanga/Main.java | 7 | ||||
-rw-r--r-- | src/spiglet/spiglet2kanga/SpgExpr.java | 27 | ||||
-rw-r--r-- | src/spiglet/spiglet2kanga/SpgGoal.java | 15 | ||||
-rw-r--r-- | src/spiglet/spiglet2kanga/SpgProc.java | 24 | ||||
-rw-r--r-- | src/spiglet/spiglet2kanga/SpgSimpExpr.java | 13 | ||||
-rw-r--r-- | src/spiglet/spiglet2kanga/SpgStmt.java | 17 | ||||
-rw-r--r-- | src/spiglet/spiglet2kanga/SpgSym.java | 5 | ||||
-rw-r--r-- | src/spiglet/spiglet2kanga/SpgTemp.java | 12 |
8 files changed, 116 insertions, 4 deletions
diff --git a/src/spiglet/spiglet2kanga/Main.java b/src/spiglet/spiglet2kanga/Main.java index e6e15f6..3778ef3 100644 --- a/src/spiglet/spiglet2kanga/Main.java +++ b/src/spiglet/spiglet2kanga/Main.java @@ -5,6 +5,7 @@ import spiglet.SpigletParser; import spiglet.TokenMgrError;
import spiglet.syntaxtree.Node;
import spiglet.visitor.GJDepthFirst;
+import spiglet.visitor.GenKangaVisitor;
@@ -18,10 +19,8 @@ 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);
+ SpgGoal goal = new SpgGoal();
+ root.accept(new GenKangaVisitor(), goal);
}
catch(TokenMgrError e){
//Handle Lexical Errors
diff --git a/src/spiglet/spiglet2kanga/SpgExpr.java b/src/spiglet/spiglet2kanga/SpgExpr.java new file mode 100644 index 0000000..da9fa46 --- /dev/null +++ b/src/spiglet/spiglet2kanga/SpgExpr.java @@ -0,0 +1,27 @@ +package spiglet.spiglet2kanga; + +import java.util.Vector; + +public class SpgExpr extends SpgSym { + public enum ExpType { CALL, ALLOC, BinOp, Simple }; + + public ExpType type; + public String op; + public SpgTemp oprand; + public SpgSimpExpr se; + public Vector<SpgTemp> callParams; + + public SpgExpr(ExpType t) { + type = t; + callParams = new Vector<SpgTemp>(); + } + + public void addCallParam(SpgTemp t) { + if (type!=ExpType.CALL) { + System.err.println("Error adding parameter, should be a CALL expression."); + return; + } + callParams.addElement(t); + } + +} diff --git a/src/spiglet/spiglet2kanga/SpgGoal.java b/src/spiglet/spiglet2kanga/SpgGoal.java new file mode 100644 index 0000000..c7dd464 --- /dev/null +++ b/src/spiglet/spiglet2kanga/SpgGoal.java @@ -0,0 +1,15 @@ +package spiglet.spiglet2kanga; + +import java.util.Vector; + +public class SpgGoal extends SpgSym { + Vector<SpgProc> procs; + + public SpgGoal() { + procs = new Vector<SpgProc>(); + } + + public void addProc(SpgProc p) { + procs.addElement(p); + } +} diff --git a/src/spiglet/spiglet2kanga/SpgProc.java b/src/spiglet/spiglet2kanga/SpgProc.java new file mode 100644 index 0000000..5d62dfa --- /dev/null +++ b/src/spiglet/spiglet2kanga/SpgProc.java @@ -0,0 +1,24 @@ +package spiglet.spiglet2kanga; + +import java.util.Vector; + +public class SpgProc extends SpgSym { + String name; + int argCount; + int stkCount; + int maxCallArgCount; + + public Vector<SpgStmt> statements; + public SpgSimpExpr retexp; + + public SpgProc(String s, int n) { + name = s; + argCount = n; + statements = new Vector<SpgStmt>(); + } + + public void addStmt(SpgStmt s) { + statements.addElement(s); + } + +} diff --git a/src/spiglet/spiglet2kanga/SpgSimpExpr.java b/src/spiglet/spiglet2kanga/SpgSimpExpr.java new file mode 100644 index 0000000..6b1b212 --- /dev/null +++ b/src/spiglet/spiglet2kanga/SpgSimpExpr.java @@ -0,0 +1,13 @@ +package spiglet.spiglet2kanga; + +public class SpgSimpExpr extends SpgExpr { + public enum SExprType { TEMP, INT, LB }; + SExprType type; + public int num; + public String s; + + public SpgSimpExpr(SExprType t) { + super(SpgExpr.ExpType.Simple); + type = t; + } +} diff --git a/src/spiglet/spiglet2kanga/SpgStmt.java b/src/spiglet/spiglet2kanga/SpgStmt.java new file mode 100644 index 0000000..832c489 --- /dev/null +++ b/src/spiglet/spiglet2kanga/SpgStmt.java @@ -0,0 +1,17 @@ +package spiglet.spiglet2kanga; + +public class SpgStmt extends SpgSym{ + public enum StmtType { NOOP, ERROR, CJUMP, JUMP, STORE, LOAD, MOVE, PRINT }; + StmtType type; + public SpgTemp tmp1, tmp2; + public int imm; + public String jmptarget; + public SpgExpr exp; + + public String lb; + public SpgStmt succ1, succ2; + + public SpgStmt(StmtType t) { + type = t; + } +} diff --git a/src/spiglet/spiglet2kanga/SpgSym.java b/src/spiglet/spiglet2kanga/SpgSym.java new file mode 100644 index 0000000..43f2a99 --- /dev/null +++ b/src/spiglet/spiglet2kanga/SpgSym.java @@ -0,0 +1,5 @@ +package spiglet.spiglet2kanga; + +public class SpgSym { + +} diff --git a/src/spiglet/spiglet2kanga/SpgTemp.java b/src/spiglet/spiglet2kanga/SpgTemp.java new file mode 100644 index 0000000..3703a2e --- /dev/null +++ b/src/spiglet/spiglet2kanga/SpgTemp.java @@ -0,0 +1,12 @@ +package spiglet.spiglet2kanga; + +public class SpgTemp extends SpgSimpExpr { + public SpgTemp(int n) { + super(SpgSimpExpr.SExprType.TEMP); + num = n; + } + + public int tempNum() { + return num; + } +} |