diff options
Diffstat (limited to 'src/kanga/visitor')
-rw-r--r-- | src/kanga/visitor/DepthFirstVisitor.java | 385 | ||||
-rw-r--r-- | src/kanga/visitor/GJDepthFirst.java | 455 | ||||
-rw-r--r-- | src/kanga/visitor/GJNoArguDepthFirst.java | 455 | ||||
-rw-r--r-- | src/kanga/visitor/GJNoArguVisitor.java | 271 | ||||
-rw-r--r-- | src/kanga/visitor/GJVisitor.java | 270 | ||||
-rw-r--r-- | src/kanga/visitor/GJVoidDepthFirst.java | 395 | ||||
-rw-r--r-- | src/kanga/visitor/GJVoidVisitor.java | 271 | ||||
-rw-r--r-- | src/kanga/visitor/Visitor.java | 271 |
8 files changed, 2773 insertions, 0 deletions
diff --git a/src/kanga/visitor/DepthFirstVisitor.java b/src/kanga/visitor/DepthFirstVisitor.java new file mode 100644 index 0000000..39d3338 --- /dev/null +++ b/src/kanga/visitor/DepthFirstVisitor.java @@ -0,0 +1,385 @@ +// +// Generated by JTB 1.3.2 +//
+
+package kanga.visitor;
+import java.util.Enumeration; + +import kanga.syntaxtree.ALoadStmt; +import kanga.syntaxtree.AStoreStmt; +import kanga.syntaxtree.BinOp; +import kanga.syntaxtree.CJumpStmt; +import kanga.syntaxtree.CallStmt; +import kanga.syntaxtree.ErrorStmt; +import kanga.syntaxtree.Exp; +import kanga.syntaxtree.Goal; +import kanga.syntaxtree.HAllocate; +import kanga.syntaxtree.HLoadStmt; +import kanga.syntaxtree.HStoreStmt; +import kanga.syntaxtree.IntegerLiteral; +import kanga.syntaxtree.JumpStmt; +import kanga.syntaxtree.Label; +import kanga.syntaxtree.MoveStmt; +import kanga.syntaxtree.NoOpStmt; +import kanga.syntaxtree.Node; +import kanga.syntaxtree.NodeList; +import kanga.syntaxtree.NodeListOptional; +import kanga.syntaxtree.NodeOptional; +import kanga.syntaxtree.NodeSequence; +import kanga.syntaxtree.NodeToken; +import kanga.syntaxtree.Operator; +import kanga.syntaxtree.PassArgStmt; +import kanga.syntaxtree.PrintStmt; +import kanga.syntaxtree.Procedure; +import kanga.syntaxtree.Reg; +import kanga.syntaxtree.SimpleExp; +import kanga.syntaxtree.SpilledArg; +import kanga.syntaxtree.Stmt; +import kanga.syntaxtree.StmtList; +
+/**
+ * Provides default methods which visit each node in the tree in depth-first
+ * order. Your visitors may extend this class.
+ */
+public class DepthFirstVisitor implements Visitor {
+ //
+ // Auto class visitors--probably don't need to be overridden.
+ //
+ public void visit(NodeList n) { + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) + e.nextElement().accept(this); + } +
+ public void visit(NodeListOptional n) { + if ( n.present() ) + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) + e.nextElement().accept(this); + } +
+ public void visit(NodeOptional n) { + if ( n.present() ) + n.node.accept(this); + } +
+ public void visit(NodeSequence n) { + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) + e.nextElement().accept(this); + } +
+ public void visit(NodeToken n) { } +
+ //
+ // User-generated visitor methods below
+ //
+
+ /**
+ * f0 -> "MAIN"
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ * f12 -> ( Procedure() )*
+ * f13 -> <EOF>
+ */
+ public void visit(Goal n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ n.f3.accept(this);
+ n.f4.accept(this);
+ n.f5.accept(this);
+ n.f6.accept(this);
+ n.f7.accept(this);
+ n.f8.accept(this);
+ n.f9.accept(this);
+ n.f10.accept(this);
+ n.f11.accept(this);
+ n.f12.accept(this);
+ n.f13.accept(this);
+ } +
+ /**
+ * f0 -> ( ( Label() )? Stmt() )*
+ */
+ public void visit(StmtList n) {
+ n.f0.accept(this);
+ } +
+ /**
+ * f0 -> Label()
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ */
+ public void visit(Procedure n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ n.f3.accept(this);
+ n.f4.accept(this);
+ n.f5.accept(this);
+ n.f6.accept(this);
+ n.f7.accept(this);
+ n.f8.accept(this);
+ n.f9.accept(this);
+ n.f10.accept(this);
+ n.f11.accept(this);
+ } +
+ /**
+ * f0 -> NoOpStmt()
+ * | ErrorStmt()
+ * | CJumpStmt()
+ * | JumpStmt()
+ * | HStoreStmt()
+ * | HLoadStmt()
+ * | MoveStmt()
+ * | PrintStmt()
+ * | ALoadStmt()
+ * | AStoreStmt()
+ * | PassArgStmt()
+ * | CallStmt()
+ */
+ public void visit(Stmt n) {
+ n.f0.accept(this);
+ } +
+ /**
+ * f0 -> "NOOP"
+ */
+ public void visit(NoOpStmt n) {
+ n.f0.accept(this);
+ } +
+ /**
+ * f0 -> "ERROR"
+ */
+ public void visit(ErrorStmt n) {
+ n.f0.accept(this);
+ } +
+ /**
+ * f0 -> "CJUMP"
+ * f1 -> Reg()
+ * f2 -> Label()
+ */
+ public void visit(CJumpStmt n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ } +
+ /**
+ * f0 -> "JUMP"
+ * f1 -> Label()
+ */
+ public void visit(JumpStmt n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ } +
+ /**
+ * f0 -> "HSTORE"
+ * f1 -> Reg()
+ * f2 -> IntegerLiteral()
+ * f3 -> Reg()
+ */
+ public void visit(HStoreStmt n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ n.f3.accept(this);
+ } +
+ /**
+ * f0 -> "HLOAD"
+ * f1 -> Reg()
+ * f2 -> Reg()
+ * f3 -> IntegerLiteral()
+ */
+ public void visit(HLoadStmt n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ n.f3.accept(this);
+ } +
+ /**
+ * f0 -> "MOVE"
+ * f1 -> Reg()
+ * f2 -> Exp()
+ */
+ public void visit(MoveStmt n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ } +
+ /**
+ * f0 -> "PRINT"
+ * f1 -> SimpleExp()
+ */
+ public void visit(PrintStmt n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ } +
+ /**
+ * f0 -> "ALOAD"
+ * f1 -> Reg()
+ * f2 -> SpilledArg()
+ */
+ public void visit(ALoadStmt n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ } +
+ /**
+ * f0 -> "ASTORE"
+ * f1 -> SpilledArg()
+ * f2 -> Reg()
+ */
+ public void visit(AStoreStmt n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ } +
+ /**
+ * f0 -> "PASSARG"
+ * f1 -> IntegerLiteral()
+ * f2 -> Reg()
+ */
+ public void visit(PassArgStmt n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ } +
+ /**
+ * f0 -> "CALL"
+ * f1 -> SimpleExp()
+ */
+ public void visit(CallStmt n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ } +
+ /**
+ * f0 -> HAllocate()
+ * | BinOp()
+ * | SimpleExp()
+ */
+ public void visit(Exp n) {
+ n.f0.accept(this);
+ } +
+ /**
+ * f0 -> "HALLOCATE"
+ * f1 -> SimpleExp()
+ */
+ public void visit(HAllocate n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ } +
+ /**
+ * f0 -> Operator()
+ * f1 -> Reg()
+ * f2 -> SimpleExp()
+ */
+ public void visit(BinOp n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ } +
+ /**
+ * f0 -> "LT"
+ * | "PLUS"
+ * | "MINUS"
+ * | "TIMES"
+ */
+ public void visit(Operator n) {
+ n.f0.accept(this);
+ } +
+ /**
+ * f0 -> "SPILLEDARG"
+ * f1 -> IntegerLiteral()
+ */
+ public void visit(SpilledArg n) {
+ n.f0.accept(this);
+ n.f1.accept(this);
+ } +
+ /**
+ * f0 -> Reg()
+ * | IntegerLiteral()
+ * | Label()
+ */
+ public void visit(SimpleExp n) {
+ n.f0.accept(this);
+ } +
+ /**
+ * f0 -> "a0"
+ * | "a1"
+ * | "a2"
+ * | "a3"
+ * | "t0"
+ * | "t1"
+ * | "t2"
+ * | "t3"
+ * | "t4"
+ * | "t5"
+ * | "t6"
+ * | "t7"
+ * | "s0"
+ * | "s1"
+ * | "s2"
+ * | "s3"
+ * | "s4"
+ * | "s5"
+ * | "s6"
+ * | "s7"
+ * | "t8"
+ * | "t9"
+ * | "v0"
+ * | "v1"
+ */
+ public void visit(Reg n) {
+ n.f0.accept(this);
+ } +
+ /**
+ * f0 -> <INTEGER_LITERAL>
+ */
+ public void visit(IntegerLiteral n) {
+ n.f0.accept(this);
+ } +
+ /**
+ * f0 -> <IDENTIFIER>
+ */
+ public void visit(Label n) {
+ n.f0.accept(this);
+ } +
+}
diff --git a/src/kanga/visitor/GJDepthFirst.java b/src/kanga/visitor/GJDepthFirst.java new file mode 100644 index 0000000..53ee768 --- /dev/null +++ b/src/kanga/visitor/GJDepthFirst.java @@ -0,0 +1,455 @@ +// +// Generated by JTB 1.3.2 +//
+
+package kanga.visitor;
+import java.util.Enumeration; + +import kanga.syntaxtree.ALoadStmt; +import kanga.syntaxtree.AStoreStmt; +import kanga.syntaxtree.BinOp; +import kanga.syntaxtree.CJumpStmt; +import kanga.syntaxtree.CallStmt; +import kanga.syntaxtree.ErrorStmt; +import kanga.syntaxtree.Exp; +import kanga.syntaxtree.Goal; +import kanga.syntaxtree.HAllocate; +import kanga.syntaxtree.HLoadStmt; +import kanga.syntaxtree.HStoreStmt; +import kanga.syntaxtree.IntegerLiteral; +import kanga.syntaxtree.JumpStmt; +import kanga.syntaxtree.Label; +import kanga.syntaxtree.MoveStmt; +import kanga.syntaxtree.NoOpStmt; +import kanga.syntaxtree.Node; +import kanga.syntaxtree.NodeList; +import kanga.syntaxtree.NodeListOptional; +import kanga.syntaxtree.NodeOptional; +import kanga.syntaxtree.NodeSequence; +import kanga.syntaxtree.NodeToken; +import kanga.syntaxtree.Operator; +import kanga.syntaxtree.PassArgStmt; +import kanga.syntaxtree.PrintStmt; +import kanga.syntaxtree.Procedure; +import kanga.syntaxtree.Reg; +import kanga.syntaxtree.SimpleExp; +import kanga.syntaxtree.SpilledArg; +import kanga.syntaxtree.Stmt; +import kanga.syntaxtree.StmtList; +
+/**
+ * Provides default methods which visit each node in the tree in depth-first
+ * order. Your visitors may extend this class.
+ */
+public class GJDepthFirst<R,A> implements GJVisitor<R,A> {
+ //
+ // Auto class visitors--probably don't need to be overridden.
+ //
+ public R visit(NodeList n, A argu) { + R _ret=null; + int _count=0; + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { + e.nextElement().accept(this,argu); + _count++; + } + return _ret; + } +
+ public R visit(NodeListOptional n, A argu) { + if ( n.present() ) { + R _ret=null; + int _count=0; + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { + e.nextElement().accept(this,argu); + _count++; + } + return _ret; + } + else + return null; + } +
+ public R visit(NodeOptional n, A argu) { + if ( n.present() ) + return n.node.accept(this,argu); + else + return null; + } +
+ public R visit(NodeSequence n, A argu) { + R _ret=null; + int _count=0; + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { + e.nextElement().accept(this,argu); + _count++; + } + return _ret; + } +
+ public R visit(NodeToken n, A argu) { return null; } +
+ //
+ // User-generated visitor methods below
+ //
+
+ /**
+ * f0 -> "MAIN"
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ * f12 -> ( Procedure() )*
+ * f13 -> <EOF>
+ */
+ public R visit(Goal n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ n.f3.accept(this, argu);
+ n.f4.accept(this, argu);
+ n.f5.accept(this, argu);
+ n.f6.accept(this, argu);
+ n.f7.accept(this, argu);
+ n.f8.accept(this, argu);
+ n.f9.accept(this, argu);
+ n.f10.accept(this, argu);
+ n.f11.accept(this, argu);
+ n.f12.accept(this, argu);
+ n.f13.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> ( ( Label() )? Stmt() )*
+ */
+ public R visit(StmtList n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> Label()
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ */
+ public R visit(Procedure n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ n.f3.accept(this, argu);
+ n.f4.accept(this, argu);
+ n.f5.accept(this, argu);
+ n.f6.accept(this, argu);
+ n.f7.accept(this, argu);
+ n.f8.accept(this, argu);
+ n.f9.accept(this, argu);
+ n.f10.accept(this, argu);
+ n.f11.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> NoOpStmt()
+ * | ErrorStmt()
+ * | CJumpStmt()
+ * | JumpStmt()
+ * | HStoreStmt()
+ * | HLoadStmt()
+ * | MoveStmt()
+ * | PrintStmt()
+ * | ALoadStmt()
+ * | AStoreStmt()
+ * | PassArgStmt()
+ * | CallStmt()
+ */
+ public R visit(Stmt n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "NOOP"
+ */
+ public R visit(NoOpStmt n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "ERROR"
+ */
+ public R visit(ErrorStmt n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "CJUMP"
+ * f1 -> Reg()
+ * f2 -> Label()
+ */
+ public R visit(CJumpStmt n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "JUMP"
+ * f1 -> Label()
+ */
+ public R visit(JumpStmt n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "HSTORE"
+ * f1 -> Reg()
+ * f2 -> IntegerLiteral()
+ * f3 -> Reg()
+ */
+ public R visit(HStoreStmt n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ n.f3.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "HLOAD"
+ * f1 -> Reg()
+ * f2 -> Reg()
+ * f3 -> IntegerLiteral()
+ */
+ public R visit(HLoadStmt n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ n.f3.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "MOVE"
+ * f1 -> Reg()
+ * f2 -> Exp()
+ */
+ public R visit(MoveStmt n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "PRINT"
+ * f1 -> SimpleExp()
+ */
+ public R visit(PrintStmt n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "ALOAD"
+ * f1 -> Reg()
+ * f2 -> SpilledArg()
+ */
+ public R visit(ALoadStmt n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "ASTORE"
+ * f1 -> SpilledArg()
+ * f2 -> Reg()
+ */
+ public R visit(AStoreStmt n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "PASSARG"
+ * f1 -> IntegerLiteral()
+ * f2 -> Reg()
+ */
+ public R visit(PassArgStmt n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "CALL"
+ * f1 -> SimpleExp()
+ */
+ public R visit(CallStmt n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> HAllocate()
+ * | BinOp()
+ * | SimpleExp()
+ */
+ public R visit(Exp n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "HALLOCATE"
+ * f1 -> SimpleExp()
+ */
+ public R visit(HAllocate n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> Operator()
+ * f1 -> Reg()
+ * f2 -> SimpleExp()
+ */
+ public R visit(BinOp n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "LT"
+ * | "PLUS"
+ * | "MINUS"
+ * | "TIMES"
+ */
+ public R visit(Operator n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "SPILLEDARG"
+ * f1 -> IntegerLiteral()
+ */
+ public R visit(SpilledArg n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> Reg()
+ * | IntegerLiteral()
+ * | Label()
+ */
+ public R visit(SimpleExp n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> "a0"
+ * | "a1"
+ * | "a2"
+ * | "a3"
+ * | "t0"
+ * | "t1"
+ * | "t2"
+ * | "t3"
+ * | "t4"
+ * | "t5"
+ * | "t6"
+ * | "t7"
+ * | "s0"
+ * | "s1"
+ * | "s2"
+ * | "s3"
+ * | "s4"
+ * | "s5"
+ * | "s6"
+ * | "s7"
+ * | "t8"
+ * | "t9"
+ * | "v0"
+ * | "v1"
+ */
+ public R visit(Reg n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> <INTEGER_LITERAL>
+ */
+ public R visit(IntegerLiteral n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ return _ret;
+ } +
+ /**
+ * f0 -> <IDENTIFIER>
+ */
+ public R visit(Label n, A argu) {
+ R _ret=null;
+ n.f0.accept(this, argu);
+ return _ret;
+ } +
+}
diff --git a/src/kanga/visitor/GJNoArguDepthFirst.java b/src/kanga/visitor/GJNoArguDepthFirst.java new file mode 100644 index 0000000..a4848c2 --- /dev/null +++ b/src/kanga/visitor/GJNoArguDepthFirst.java @@ -0,0 +1,455 @@ +// +// Generated by JTB 1.3.2 +//
+
+package kanga.visitor;
+import java.util.Enumeration; + +import kanga.syntaxtree.ALoadStmt; +import kanga.syntaxtree.AStoreStmt; +import kanga.syntaxtree.BinOp; +import kanga.syntaxtree.CJumpStmt; +import kanga.syntaxtree.CallStmt; +import kanga.syntaxtree.ErrorStmt; +import kanga.syntaxtree.Exp; +import kanga.syntaxtree.Goal; +import kanga.syntaxtree.HAllocate; +import kanga.syntaxtree.HLoadStmt; +import kanga.syntaxtree.HStoreStmt; +import kanga.syntaxtree.IntegerLiteral; +import kanga.syntaxtree.JumpStmt; +import kanga.syntaxtree.Label; +import kanga.syntaxtree.MoveStmt; +import kanga.syntaxtree.NoOpStmt; +import kanga.syntaxtree.Node; +import kanga.syntaxtree.NodeList; +import kanga.syntaxtree.NodeListOptional; +import kanga.syntaxtree.NodeOptional; +import kanga.syntaxtree.NodeSequence; +import kanga.syntaxtree.NodeToken; +import kanga.syntaxtree.Operator; +import kanga.syntaxtree.PassArgStmt; +import kanga.syntaxtree.PrintStmt; +import kanga.syntaxtree.Procedure; +import kanga.syntaxtree.Reg; +import kanga.syntaxtree.SimpleExp; +import kanga.syntaxtree.SpilledArg; +import kanga.syntaxtree.Stmt; +import kanga.syntaxtree.StmtList; +
+/**
+ * Provides default methods which visit each node in the tree in depth-first
+ * order. Your visitors may extend this class.
+ */
+public class GJNoArguDepthFirst<R> implements GJNoArguVisitor<R> {
+ //
+ // Auto class visitors--probably don't need to be overridden.
+ //
+ public R visit(NodeList n) { + R _ret=null; + int _count=0; + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { + e.nextElement().accept(this); + _count++; + } + return _ret; + } +
+ public R visit(NodeListOptional n) { + if ( n.present() ) { + R _ret=null; + int _count=0; + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { + e.nextElement().accept(this); + _count++; + } + return _ret; + } + else + return null; + } +
+ public R visit(NodeOptional n) { + if ( n.present() ) + return n.node.accept(this); + else + return null; + } +
+ public R visit(NodeSequence n) { + R _ret=null; + int _count=0; + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { + e.nextElement().accept(this); + _count++; + } + return _ret; + } +
+ public R visit(NodeToken n) { return null; } +
+ //
+ // User-generated visitor methods below
+ //
+
+ /**
+ * f0 -> "MAIN"
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ * f12 -> ( Procedure() )*
+ * f13 -> <EOF>
+ */
+ public R visit(Goal n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ n.f3.accept(this);
+ n.f4.accept(this);
+ n.f5.accept(this);
+ n.f6.accept(this);
+ n.f7.accept(this);
+ n.f8.accept(this);
+ n.f9.accept(this);
+ n.f10.accept(this);
+ n.f11.accept(this);
+ n.f12.accept(this);
+ n.f13.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> ( ( Label() )? Stmt() )*
+ */
+ public R visit(StmtList n) {
+ R _ret=null;
+ n.f0.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> Label()
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ */
+ public R visit(Procedure n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ n.f3.accept(this);
+ n.f4.accept(this);
+ n.f5.accept(this);
+ n.f6.accept(this);
+ n.f7.accept(this);
+ n.f8.accept(this);
+ n.f9.accept(this);
+ n.f10.accept(this);
+ n.f11.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> NoOpStmt()
+ * | ErrorStmt()
+ * | CJumpStmt()
+ * | JumpStmt()
+ * | HStoreStmt()
+ * | HLoadStmt()
+ * | MoveStmt()
+ * | PrintStmt()
+ * | ALoadStmt()
+ * | AStoreStmt()
+ * | PassArgStmt()
+ * | CallStmt()
+ */
+ public R visit(Stmt n) {
+ R _ret=null;
+ n.f0.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "NOOP"
+ */
+ public R visit(NoOpStmt n) {
+ R _ret=null;
+ n.f0.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "ERROR"
+ */
+ public R visit(ErrorStmt n) {
+ R _ret=null;
+ n.f0.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "CJUMP"
+ * f1 -> Reg()
+ * f2 -> Label()
+ */
+ public R visit(CJumpStmt n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "JUMP"
+ * f1 -> Label()
+ */
+ public R visit(JumpStmt n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "HSTORE"
+ * f1 -> Reg()
+ * f2 -> IntegerLiteral()
+ * f3 -> Reg()
+ */
+ public R visit(HStoreStmt n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ n.f3.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "HLOAD"
+ * f1 -> Reg()
+ * f2 -> Reg()
+ * f3 -> IntegerLiteral()
+ */
+ public R visit(HLoadStmt n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ n.f3.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "MOVE"
+ * f1 -> Reg()
+ * f2 -> Exp()
+ */
+ public R visit(MoveStmt n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "PRINT"
+ * f1 -> SimpleExp()
+ */
+ public R visit(PrintStmt n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "ALOAD"
+ * f1 -> Reg()
+ * f2 -> SpilledArg()
+ */
+ public R visit(ALoadStmt n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "ASTORE"
+ * f1 -> SpilledArg()
+ * f2 -> Reg()
+ */
+ public R visit(AStoreStmt n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "PASSARG"
+ * f1 -> IntegerLiteral()
+ * f2 -> Reg()
+ */
+ public R visit(PassArgStmt n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "CALL"
+ * f1 -> SimpleExp()
+ */
+ public R visit(CallStmt n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> HAllocate()
+ * | BinOp()
+ * | SimpleExp()
+ */
+ public R visit(Exp n) {
+ R _ret=null;
+ n.f0.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "HALLOCATE"
+ * f1 -> SimpleExp()
+ */
+ public R visit(HAllocate n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> Operator()
+ * f1 -> Reg()
+ * f2 -> SimpleExp()
+ */
+ public R visit(BinOp n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ n.f2.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "LT"
+ * | "PLUS"
+ * | "MINUS"
+ * | "TIMES"
+ */
+ public R visit(Operator n) {
+ R _ret=null;
+ n.f0.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "SPILLEDARG"
+ * f1 -> IntegerLiteral()
+ */
+ public R visit(SpilledArg n) {
+ R _ret=null;
+ n.f0.accept(this);
+ n.f1.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> Reg()
+ * | IntegerLiteral()
+ * | Label()
+ */
+ public R visit(SimpleExp n) {
+ R _ret=null;
+ n.f0.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> "a0"
+ * | "a1"
+ * | "a2"
+ * | "a3"
+ * | "t0"
+ * | "t1"
+ * | "t2"
+ * | "t3"
+ * | "t4"
+ * | "t5"
+ * | "t6"
+ * | "t7"
+ * | "s0"
+ * | "s1"
+ * | "s2"
+ * | "s3"
+ * | "s4"
+ * | "s5"
+ * | "s6"
+ * | "s7"
+ * | "t8"
+ * | "t9"
+ * | "v0"
+ * | "v1"
+ */
+ public R visit(Reg n) {
+ R _ret=null;
+ n.f0.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> <INTEGER_LITERAL>
+ */
+ public R visit(IntegerLiteral n) {
+ R _ret=null;
+ n.f0.accept(this);
+ return _ret;
+ } +
+ /**
+ * f0 -> <IDENTIFIER>
+ */
+ public R visit(Label n) {
+ R _ret=null;
+ n.f0.accept(this);
+ return _ret;
+ } +
+}
diff --git a/src/kanga/visitor/GJNoArguVisitor.java b/src/kanga/visitor/GJNoArguVisitor.java new file mode 100644 index 0000000..109aafe --- /dev/null +++ b/src/kanga/visitor/GJNoArguVisitor.java @@ -0,0 +1,271 @@ +// +// Generated by JTB 1.3.2 +//
+
+package kanga.visitor;
+import kanga.syntaxtree.ALoadStmt; +import kanga.syntaxtree.AStoreStmt; +import kanga.syntaxtree.BinOp; +import kanga.syntaxtree.CJumpStmt; +import kanga.syntaxtree.CallStmt; +import kanga.syntaxtree.ErrorStmt; +import kanga.syntaxtree.Exp; +import kanga.syntaxtree.Goal; +import kanga.syntaxtree.HAllocate; +import kanga.syntaxtree.HLoadStmt; +import kanga.syntaxtree.HStoreStmt; +import kanga.syntaxtree.IntegerLiteral; +import kanga.syntaxtree.JumpStmt; +import kanga.syntaxtree.Label; +import kanga.syntaxtree.MoveStmt; +import kanga.syntaxtree.NoOpStmt; +import kanga.syntaxtree.NodeList; +import kanga.syntaxtree.NodeListOptional; +import kanga.syntaxtree.NodeOptional; +import kanga.syntaxtree.NodeSequence; +import kanga.syntaxtree.NodeToken; +import kanga.syntaxtree.Operator; +import kanga.syntaxtree.PassArgStmt; +import kanga.syntaxtree.PrintStmt; +import kanga.syntaxtree.Procedure; +import kanga.syntaxtree.Reg; +import kanga.syntaxtree.SimpleExp; +import kanga.syntaxtree.SpilledArg; +import kanga.syntaxtree.Stmt; +import kanga.syntaxtree.StmtList; +
+/**
+ * All GJ visitors with no argument must implement this interface.
+ */ +
+public interface GJNoArguVisitor<R> { +
+ //
+ // GJ Auto class visitors with no argument
+ // +
+ public R visit(NodeList n); + public R visit(NodeListOptional n); + public R visit(NodeOptional n); + public R visit(NodeSequence n); + public R visit(NodeToken n); +
+ //
+ // User-generated visitor methods below
+ //
+
+ /**
+ * f0 -> "MAIN"
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ * f12 -> ( Procedure() )*
+ * f13 -> <EOF>
+ */
+ public R visit(Goal n); +
+ /**
+ * f0 -> ( ( Label() )? Stmt() )*
+ */
+ public R visit(StmtList n); +
+ /**
+ * f0 -> Label()
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ */
+ public R visit(Procedure n); +
+ /**
+ * f0 -> NoOpStmt()
+ * | ErrorStmt()
+ * | CJumpStmt()
+ * | JumpStmt()
+ * | HStoreStmt()
+ * | HLoadStmt()
+ * | MoveStmt()
+ * | PrintStmt()
+ * | ALoadStmt()
+ * | AStoreStmt()
+ * | PassArgStmt()
+ * | CallStmt()
+ */
+ public R visit(Stmt n); +
+ /**
+ * f0 -> "NOOP"
+ */
+ public R visit(NoOpStmt n); +
+ /**
+ * f0 -> "ERROR"
+ */
+ public R visit(ErrorStmt n); +
+ /**
+ * f0 -> "CJUMP"
+ * f1 -> Reg()
+ * f2 -> Label()
+ */
+ public R visit(CJumpStmt n); +
+ /**
+ * f0 -> "JUMP"
+ * f1 -> Label()
+ */
+ public R visit(JumpStmt n); +
+ /**
+ * f0 -> "HSTORE"
+ * f1 -> Reg()
+ * f2 -> IntegerLiteral()
+ * f3 -> Reg()
+ */
+ public R visit(HStoreStmt n); +
+ /**
+ * f0 -> "HLOAD"
+ * f1 -> Reg()
+ * f2 -> Reg()
+ * f3 -> IntegerLiteral()
+ */
+ public R visit(HLoadStmt n); +
+ /**
+ * f0 -> "MOVE"
+ * f1 -> Reg()
+ * f2 -> Exp()
+ */
+ public R visit(MoveStmt n); +
+ /**
+ * f0 -> "PRINT"
+ * f1 -> SimpleExp()
+ */
+ public R visit(PrintStmt n); +
+ /**
+ * f0 -> "ALOAD"
+ * f1 -> Reg()
+ * f2 -> SpilledArg()
+ */
+ public R visit(ALoadStmt n); +
+ /**
+ * f0 -> "ASTORE"
+ * f1 -> SpilledArg()
+ * f2 -> Reg()
+ */
+ public R visit(AStoreStmt n); +
+ /**
+ * f0 -> "PASSARG"
+ * f1 -> IntegerLiteral()
+ * f2 -> Reg()
+ */
+ public R visit(PassArgStmt n); +
+ /**
+ * f0 -> "CALL"
+ * f1 -> SimpleExp()
+ */
+ public R visit(CallStmt n); +
+ /**
+ * f0 -> HAllocate()
+ * | BinOp()
+ * | SimpleExp()
+ */
+ public R visit(Exp n); +
+ /**
+ * f0 -> "HALLOCATE"
+ * f1 -> SimpleExp()
+ */
+ public R visit(HAllocate n); +
+ /**
+ * f0 -> Operator()
+ * f1 -> Reg()
+ * f2 -> SimpleExp()
+ */
+ public R visit(BinOp n); +
+ /**
+ * f0 -> "LT"
+ * | "PLUS"
+ * | "MINUS"
+ * | "TIMES"
+ */
+ public R visit(Operator n); +
+ /**
+ * f0 -> "SPILLEDARG"
+ * f1 -> IntegerLiteral()
+ */
+ public R visit(SpilledArg n); +
+ /**
+ * f0 -> Reg()
+ * | IntegerLiteral()
+ * | Label()
+ */
+ public R visit(SimpleExp n); +
+ /**
+ * f0 -> "a0"
+ * | "a1"
+ * | "a2"
+ * | "a3"
+ * | "t0"
+ * | "t1"
+ * | "t2"
+ * | "t3"
+ * | "t4"
+ * | "t5"
+ * | "t6"
+ * | "t7"
+ * | "s0"
+ * | "s1"
+ * | "s2"
+ * | "s3"
+ * | "s4"
+ * | "s5"
+ * | "s6"
+ * | "s7"
+ * | "t8"
+ * | "t9"
+ * | "v0"
+ * | "v1"
+ */
+ public R visit(Reg n); +
+ /**
+ * f0 -> <INTEGER_LITERAL>
+ */
+ public R visit(IntegerLiteral n); +
+ /**
+ * f0 -> <IDENTIFIER>
+ */
+ public R visit(Label n); +
+} +
diff --git a/src/kanga/visitor/GJVisitor.java b/src/kanga/visitor/GJVisitor.java new file mode 100644 index 0000000..cdb30b3 --- /dev/null +++ b/src/kanga/visitor/GJVisitor.java @@ -0,0 +1,270 @@ +// +// Generated by JTB 1.3.2 +//
+
+package kanga.visitor;
+import kanga.syntaxtree.ALoadStmt; +import kanga.syntaxtree.AStoreStmt; +import kanga.syntaxtree.BinOp; +import kanga.syntaxtree.CJumpStmt; +import kanga.syntaxtree.CallStmt; +import kanga.syntaxtree.ErrorStmt; +import kanga.syntaxtree.Exp; +import kanga.syntaxtree.Goal; +import kanga.syntaxtree.HAllocate; +import kanga.syntaxtree.HLoadStmt; +import kanga.syntaxtree.HStoreStmt; +import kanga.syntaxtree.IntegerLiteral; +import kanga.syntaxtree.JumpStmt; +import kanga.syntaxtree.Label; +import kanga.syntaxtree.MoveStmt; +import kanga.syntaxtree.NoOpStmt; +import kanga.syntaxtree.NodeList; +import kanga.syntaxtree.NodeListOptional; +import kanga.syntaxtree.NodeOptional; +import kanga.syntaxtree.NodeSequence; +import kanga.syntaxtree.NodeToken; +import kanga.syntaxtree.Operator; +import kanga.syntaxtree.PassArgStmt; +import kanga.syntaxtree.PrintStmt; +import kanga.syntaxtree.Procedure; +import kanga.syntaxtree.Reg; +import kanga.syntaxtree.SimpleExp; +import kanga.syntaxtree.SpilledArg; +import kanga.syntaxtree.Stmt; +import kanga.syntaxtree.StmtList; +
+/**
+ * All GJ visitors must implement this interface.
+ */ +
+public interface GJVisitor<R,A> { +
+ //
+ // GJ Auto class visitors
+ // +
+ public R visit(NodeList n, A argu); + public R visit(NodeListOptional n, A argu); + public R visit(NodeOptional n, A argu); + public R visit(NodeSequence n, A argu); + public R visit(NodeToken n, A argu); +
+ //
+ // User-generated visitor methods below
+ //
+
+ /**
+ * f0 -> "MAIN"
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ * f12 -> ( Procedure() )*
+ * f13 -> <EOF>
+ */
+ public R visit(Goal n, A argu); +
+ /**
+ * f0 -> ( ( Label() )? Stmt() )*
+ */
+ public R visit(StmtList n, A argu); +
+ /**
+ * f0 -> Label()
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ */
+ public R visit(Procedure n, A argu); +
+ /**
+ * f0 -> NoOpStmt()
+ * | ErrorStmt()
+ * | CJumpStmt()
+ * | JumpStmt()
+ * | HStoreStmt()
+ * | HLoadStmt()
+ * | MoveStmt()
+ * | PrintStmt()
+ * | ALoadStmt()
+ * | AStoreStmt()
+ * | PassArgStmt()
+ * | CallStmt()
+ */
+ public R visit(Stmt n, A argu); +
+ /**
+ * f0 -> "NOOP"
+ */
+ public R visit(NoOpStmt n, A argu); +
+ /**
+ * f0 -> "ERROR"
+ */
+ public R visit(ErrorStmt n, A argu); +
+ /**
+ * f0 -> "CJUMP"
+ * f1 -> Reg()
+ * f2 -> Label()
+ */
+ public R visit(CJumpStmt n, A argu); +
+ /**
+ * f0 -> "JUMP"
+ * f1 -> Label()
+ */
+ public R visit(JumpStmt n, A argu); +
+ /**
+ * f0 -> "HSTORE"
+ * f1 -> Reg()
+ * f2 -> IntegerLiteral()
+ * f3 -> Reg()
+ */
+ public R visit(HStoreStmt n, A argu); +
+ /**
+ * f0 -> "HLOAD"
+ * f1 -> Reg()
+ * f2 -> Reg()
+ * f3 -> IntegerLiteral()
+ */
+ public R visit(HLoadStmt n, A argu); +
+ /**
+ * f0 -> "MOVE"
+ * f1 -> Reg()
+ * f2 -> Exp()
+ */
+ public R visit(MoveStmt n, A argu); +
+ /**
+ * f0 -> "PRINT"
+ * f1 -> SimpleExp()
+ */
+ public R visit(PrintStmt n, A argu); +
+ /**
+ * f0 -> "ALOAD"
+ * f1 -> Reg()
+ * f2 -> SpilledArg()
+ */
+ public R visit(ALoadStmt n, A argu); +
+ /**
+ * f0 -> "ASTORE"
+ * f1 -> SpilledArg()
+ * f2 -> Reg()
+ */
+ public R visit(AStoreStmt n, A argu); +
+ /**
+ * f0 -> "PASSARG"
+ * f1 -> IntegerLiteral()
+ * f2 -> Reg()
+ */
+ public R visit(PassArgStmt n, A argu); +
+ /**
+ * f0 -> "CALL"
+ * f1 -> SimpleExp()
+ */
+ public R visit(CallStmt n, A argu); +
+ /**
+ * f0 -> HAllocate()
+ * | BinOp()
+ * | SimpleExp()
+ */
+ public R visit(Exp n, A argu); +
+ /**
+ * f0 -> "HALLOCATE"
+ * f1 -> SimpleExp()
+ */
+ public R visit(HAllocate n, A argu); +
+ /**
+ * f0 -> Operator()
+ * f1 -> Reg()
+ * f2 -> SimpleExp()
+ */
+ public R visit(BinOp n, A argu); +
+ /**
+ * f0 -> "LT"
+ * | "PLUS"
+ * | "MINUS"
+ * | "TIMES"
+ */
+ public R visit(Operator n, A argu); +
+ /**
+ * f0 -> "SPILLEDARG"
+ * f1 -> IntegerLiteral()
+ */
+ public R visit(SpilledArg n, A argu); +
+ /**
+ * f0 -> Reg()
+ * | IntegerLiteral()
+ * | Label()
+ */
+ public R visit(SimpleExp n, A argu); +
+ /**
+ * f0 -> "a0"
+ * | "a1"
+ * | "a2"
+ * | "a3"
+ * | "t0"
+ * | "t1"
+ * | "t2"
+ * | "t3"
+ * | "t4"
+ * | "t5"
+ * | "t6"
+ * | "t7"
+ * | "s0"
+ * | "s1"
+ * | "s2"
+ * | "s3"
+ * | "s4"
+ * | "s5"
+ * | "s6"
+ * | "s7"
+ * | "t8"
+ * | "t9"
+ * | "v0"
+ * | "v1"
+ */
+ public R visit(Reg n, A argu); +
+ /**
+ * f0 -> <INTEGER_LITERAL>
+ */
+ public R visit(IntegerLiteral n, A argu); +
+ /**
+ * f0 -> <IDENTIFIER>
+ */
+ public R visit(Label n, A argu); +
+}
diff --git a/src/kanga/visitor/GJVoidDepthFirst.java b/src/kanga/visitor/GJVoidDepthFirst.java new file mode 100644 index 0000000..8850418 --- /dev/null +++ b/src/kanga/visitor/GJVoidDepthFirst.java @@ -0,0 +1,395 @@ +// +// Generated by JTB 1.3.2 +//
+
+package kanga.visitor;
+import java.util.Enumeration; + +import kanga.syntaxtree.ALoadStmt; +import kanga.syntaxtree.AStoreStmt; +import kanga.syntaxtree.BinOp; +import kanga.syntaxtree.CJumpStmt; +import kanga.syntaxtree.CallStmt; +import kanga.syntaxtree.ErrorStmt; +import kanga.syntaxtree.Exp; +import kanga.syntaxtree.Goal; +import kanga.syntaxtree.HAllocate; +import kanga.syntaxtree.HLoadStmt; +import kanga.syntaxtree.HStoreStmt; +import kanga.syntaxtree.IntegerLiteral; +import kanga.syntaxtree.JumpStmt; +import kanga.syntaxtree.Label; +import kanga.syntaxtree.MoveStmt; +import kanga.syntaxtree.NoOpStmt; +import kanga.syntaxtree.Node; +import kanga.syntaxtree.NodeList; +import kanga.syntaxtree.NodeListOptional; +import kanga.syntaxtree.NodeOptional; +import kanga.syntaxtree.NodeSequence; +import kanga.syntaxtree.NodeToken; +import kanga.syntaxtree.Operator; +import kanga.syntaxtree.PassArgStmt; +import kanga.syntaxtree.PrintStmt; +import kanga.syntaxtree.Procedure; +import kanga.syntaxtree.Reg; +import kanga.syntaxtree.SimpleExp; +import kanga.syntaxtree.SpilledArg; +import kanga.syntaxtree.Stmt; +import kanga.syntaxtree.StmtList; +
+/**
+ * Provides default methods which visit each node in the tree in depth-first
+ * order. Your visitors may extend this class.
+ */
+public class GJVoidDepthFirst<A> implements GJVoidVisitor<A> {
+ //
+ // Auto class visitors--probably don't need to be overridden.
+ //
+ public void visit(NodeList n, A argu) { + int _count=0; + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { + e.nextElement().accept(this,argu); + _count++; + } + } +
+ public void visit(NodeListOptional n, A argu) { + if ( n.present() ) { + int _count=0; + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { + e.nextElement().accept(this,argu); + _count++; + } + } + } +
+ public void visit(NodeOptional n, A argu) { + if ( n.present() ) + n.node.accept(this,argu); + } +
+ public void visit(NodeSequence n, A argu) { + int _count=0; + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { + e.nextElement().accept(this,argu); + _count++; + } + } +
+ public void visit(NodeToken n, A argu) {} +
+ //
+ // User-generated visitor methods below
+ //
+
+ /**
+ * f0 -> "MAIN"
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ * f12 -> ( Procedure() )*
+ * f13 -> <EOF>
+ */
+ public void visit(Goal n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ n.f3.accept(this, argu);
+ n.f4.accept(this, argu);
+ n.f5.accept(this, argu);
+ n.f6.accept(this, argu);
+ n.f7.accept(this, argu);
+ n.f8.accept(this, argu);
+ n.f9.accept(this, argu);
+ n.f10.accept(this, argu);
+ n.f11.accept(this, argu);
+ n.f12.accept(this, argu);
+ n.f13.accept(this, argu);
+ } +
+ /**
+ * f0 -> ( ( Label() )? Stmt() )*
+ */
+ public void visit(StmtList n, A argu) {
+ n.f0.accept(this, argu);
+ } +
+ /**
+ * f0 -> Label()
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ */
+ public void visit(Procedure n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ n.f3.accept(this, argu);
+ n.f4.accept(this, argu);
+ n.f5.accept(this, argu);
+ n.f6.accept(this, argu);
+ n.f7.accept(this, argu);
+ n.f8.accept(this, argu);
+ n.f9.accept(this, argu);
+ n.f10.accept(this, argu);
+ n.f11.accept(this, argu);
+ } +
+ /**
+ * f0 -> NoOpStmt()
+ * | ErrorStmt()
+ * | CJumpStmt()
+ * | JumpStmt()
+ * | HStoreStmt()
+ * | HLoadStmt()
+ * | MoveStmt()
+ * | PrintStmt()
+ * | ALoadStmt()
+ * | AStoreStmt()
+ * | PassArgStmt()
+ * | CallStmt()
+ */
+ public void visit(Stmt n, A argu) {
+ n.f0.accept(this, argu);
+ } +
+ /**
+ * f0 -> "NOOP"
+ */
+ public void visit(NoOpStmt n, A argu) {
+ n.f0.accept(this, argu);
+ } +
+ /**
+ * f0 -> "ERROR"
+ */
+ public void visit(ErrorStmt n, A argu) {
+ n.f0.accept(this, argu);
+ } +
+ /**
+ * f0 -> "CJUMP"
+ * f1 -> Reg()
+ * f2 -> Label()
+ */
+ public void visit(CJumpStmt n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ } +
+ /**
+ * f0 -> "JUMP"
+ * f1 -> Label()
+ */
+ public void visit(JumpStmt n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ } +
+ /**
+ * f0 -> "HSTORE"
+ * f1 -> Reg()
+ * f2 -> IntegerLiteral()
+ * f3 -> Reg()
+ */
+ public void visit(HStoreStmt n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ n.f3.accept(this, argu);
+ } +
+ /**
+ * f0 -> "HLOAD"
+ * f1 -> Reg()
+ * f2 -> Reg()
+ * f3 -> IntegerLiteral()
+ */
+ public void visit(HLoadStmt n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ n.f3.accept(this, argu);
+ } +
+ /**
+ * f0 -> "MOVE"
+ * f1 -> Reg()
+ * f2 -> Exp()
+ */
+ public void visit(MoveStmt n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ } +
+ /**
+ * f0 -> "PRINT"
+ * f1 -> SimpleExp()
+ */
+ public void visit(PrintStmt n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ } +
+ /**
+ * f0 -> "ALOAD"
+ * f1 -> Reg()
+ * f2 -> SpilledArg()
+ */
+ public void visit(ALoadStmt n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ } +
+ /**
+ * f0 -> "ASTORE"
+ * f1 -> SpilledArg()
+ * f2 -> Reg()
+ */
+ public void visit(AStoreStmt n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ } +
+ /**
+ * f0 -> "PASSARG"
+ * f1 -> IntegerLiteral()
+ * f2 -> Reg()
+ */
+ public void visit(PassArgStmt n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ } +
+ /**
+ * f0 -> "CALL"
+ * f1 -> SimpleExp()
+ */
+ public void visit(CallStmt n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ } +
+ /**
+ * f0 -> HAllocate()
+ * | BinOp()
+ * | SimpleExp()
+ */
+ public void visit(Exp n, A argu) {
+ n.f0.accept(this, argu);
+ } +
+ /**
+ * f0 -> "HALLOCATE"
+ * f1 -> SimpleExp()
+ */
+ public void visit(HAllocate n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ } +
+ /**
+ * f0 -> Operator()
+ * f1 -> Reg()
+ * f2 -> SimpleExp()
+ */
+ public void visit(BinOp n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ n.f2.accept(this, argu);
+ } +
+ /**
+ * f0 -> "LT"
+ * | "PLUS"
+ * | "MINUS"
+ * | "TIMES"
+ */
+ public void visit(Operator n, A argu) {
+ n.f0.accept(this, argu);
+ } +
+ /**
+ * f0 -> "SPILLEDARG"
+ * f1 -> IntegerLiteral()
+ */
+ public void visit(SpilledArg n, A argu) {
+ n.f0.accept(this, argu);
+ n.f1.accept(this, argu);
+ } +
+ /**
+ * f0 -> Reg()
+ * | IntegerLiteral()
+ * | Label()
+ */
+ public void visit(SimpleExp n, A argu) {
+ n.f0.accept(this, argu);
+ } +
+ /**
+ * f0 -> "a0"
+ * | "a1"
+ * | "a2"
+ * | "a3"
+ * | "t0"
+ * | "t1"
+ * | "t2"
+ * | "t3"
+ * | "t4"
+ * | "t5"
+ * | "t6"
+ * | "t7"
+ * | "s0"
+ * | "s1"
+ * | "s2"
+ * | "s3"
+ * | "s4"
+ * | "s5"
+ * | "s6"
+ * | "s7"
+ * | "t8"
+ * | "t9"
+ * | "v0"
+ * | "v1"
+ */
+ public void visit(Reg n, A argu) {
+ n.f0.accept(this, argu);
+ } +
+ /**
+ * f0 -> <INTEGER_LITERAL>
+ */
+ public void visit(IntegerLiteral n, A argu) {
+ n.f0.accept(this, argu);
+ } +
+ /**
+ * f0 -> <IDENTIFIER>
+ */
+ public void visit(Label n, A argu) {
+ n.f0.accept(this, argu);
+ } +
+}
diff --git a/src/kanga/visitor/GJVoidVisitor.java b/src/kanga/visitor/GJVoidVisitor.java new file mode 100644 index 0000000..ed862f1 --- /dev/null +++ b/src/kanga/visitor/GJVoidVisitor.java @@ -0,0 +1,271 @@ +// +// Generated by JTB 1.3.2 +//
+
+package kanga.visitor;
+import kanga.syntaxtree.ALoadStmt; +import kanga.syntaxtree.AStoreStmt; +import kanga.syntaxtree.BinOp; +import kanga.syntaxtree.CJumpStmt; +import kanga.syntaxtree.CallStmt; +import kanga.syntaxtree.ErrorStmt; +import kanga.syntaxtree.Exp; +import kanga.syntaxtree.Goal; +import kanga.syntaxtree.HAllocate; +import kanga.syntaxtree.HLoadStmt; +import kanga.syntaxtree.HStoreStmt; +import kanga.syntaxtree.IntegerLiteral; +import kanga.syntaxtree.JumpStmt; +import kanga.syntaxtree.Label; +import kanga.syntaxtree.MoveStmt; +import kanga.syntaxtree.NoOpStmt; +import kanga.syntaxtree.NodeList; +import kanga.syntaxtree.NodeListOptional; +import kanga.syntaxtree.NodeOptional; +import kanga.syntaxtree.NodeSequence; +import kanga.syntaxtree.NodeToken; +import kanga.syntaxtree.Operator; +import kanga.syntaxtree.PassArgStmt; +import kanga.syntaxtree.PrintStmt; +import kanga.syntaxtree.Procedure; +import kanga.syntaxtree.Reg; +import kanga.syntaxtree.SimpleExp; +import kanga.syntaxtree.SpilledArg; +import kanga.syntaxtree.Stmt; +import kanga.syntaxtree.StmtList; +
+/**
+ * All GJ void visitors must implement this interface.
+ */ +
+public interface GJVoidVisitor<A> { +
+ //
+ // GJ void Auto class visitors
+ // +
+ public void visit(NodeList n, A argu); + public void visit(NodeListOptional n, A argu); + public void visit(NodeOptional n, A argu); + public void visit(NodeSequence n, A argu); + public void visit(NodeToken n, A argu); +
+ //
+ // User-generated visitor methods below
+ //
+
+ /**
+ * f0 -> "MAIN"
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ * f12 -> ( Procedure() )*
+ * f13 -> <EOF>
+ */
+ public void visit(Goal n, A argu); +
+ /**
+ * f0 -> ( ( Label() )? Stmt() )*
+ */
+ public void visit(StmtList n, A argu); +
+ /**
+ * f0 -> Label()
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ */
+ public void visit(Procedure n, A argu); +
+ /**
+ * f0 -> NoOpStmt()
+ * | ErrorStmt()
+ * | CJumpStmt()
+ * | JumpStmt()
+ * | HStoreStmt()
+ * | HLoadStmt()
+ * | MoveStmt()
+ * | PrintStmt()
+ * | ALoadStmt()
+ * | AStoreStmt()
+ * | PassArgStmt()
+ * | CallStmt()
+ */
+ public void visit(Stmt n, A argu); +
+ /**
+ * f0 -> "NOOP"
+ */
+ public void visit(NoOpStmt n, A argu); +
+ /**
+ * f0 -> "ERROR"
+ */
+ public void visit(ErrorStmt n, A argu); +
+ /**
+ * f0 -> "CJUMP"
+ * f1 -> Reg()
+ * f2 -> Label()
+ */
+ public void visit(CJumpStmt n, A argu); +
+ /**
+ * f0 -> "JUMP"
+ * f1 -> Label()
+ */
+ public void visit(JumpStmt n, A argu); +
+ /**
+ * f0 -> "HSTORE"
+ * f1 -> Reg()
+ * f2 -> IntegerLiteral()
+ * f3 -> Reg()
+ */
+ public void visit(HStoreStmt n, A argu); +
+ /**
+ * f0 -> "HLOAD"
+ * f1 -> Reg()
+ * f2 -> Reg()
+ * f3 -> IntegerLiteral()
+ */
+ public void visit(HLoadStmt n, A argu); +
+ /**
+ * f0 -> "MOVE"
+ * f1 -> Reg()
+ * f2 -> Exp()
+ */
+ public void visit(MoveStmt n, A argu); +
+ /**
+ * f0 -> "PRINT"
+ * f1 -> SimpleExp()
+ */
+ public void visit(PrintStmt n, A argu); +
+ /**
+ * f0 -> "ALOAD"
+ * f1 -> Reg()
+ * f2 -> SpilledArg()
+ */
+ public void visit(ALoadStmt n, A argu); +
+ /**
+ * f0 -> "ASTORE"
+ * f1 -> SpilledArg()
+ * f2 -> Reg()
+ */
+ public void visit(AStoreStmt n, A argu); +
+ /**
+ * f0 -> "PASSARG"
+ * f1 -> IntegerLiteral()
+ * f2 -> Reg()
+ */
+ public void visit(PassArgStmt n, A argu); +
+ /**
+ * f0 -> "CALL"
+ * f1 -> SimpleExp()
+ */
+ public void visit(CallStmt n, A argu); +
+ /**
+ * f0 -> HAllocate()
+ * | BinOp()
+ * | SimpleExp()
+ */
+ public void visit(Exp n, A argu); +
+ /**
+ * f0 -> "HALLOCATE"
+ * f1 -> SimpleExp()
+ */
+ public void visit(HAllocate n, A argu); +
+ /**
+ * f0 -> Operator()
+ * f1 -> Reg()
+ * f2 -> SimpleExp()
+ */
+ public void visit(BinOp n, A argu); +
+ /**
+ * f0 -> "LT"
+ * | "PLUS"
+ * | "MINUS"
+ * | "TIMES"
+ */
+ public void visit(Operator n, A argu); +
+ /**
+ * f0 -> "SPILLEDARG"
+ * f1 -> IntegerLiteral()
+ */
+ public void visit(SpilledArg n, A argu); +
+ /**
+ * f0 -> Reg()
+ * | IntegerLiteral()
+ * | Label()
+ */
+ public void visit(SimpleExp n, A argu); +
+ /**
+ * f0 -> "a0"
+ * | "a1"
+ * | "a2"
+ * | "a3"
+ * | "t0"
+ * | "t1"
+ * | "t2"
+ * | "t3"
+ * | "t4"
+ * | "t5"
+ * | "t6"
+ * | "t7"
+ * | "s0"
+ * | "s1"
+ * | "s2"
+ * | "s3"
+ * | "s4"
+ * | "s5"
+ * | "s6"
+ * | "s7"
+ * | "t8"
+ * | "t9"
+ * | "v0"
+ * | "v1"
+ */
+ public void visit(Reg n, A argu); +
+ /**
+ * f0 -> <INTEGER_LITERAL>
+ */
+ public void visit(IntegerLiteral n, A argu); +
+ /**
+ * f0 -> <IDENTIFIER>
+ */
+ public void visit(Label n, A argu); +
+} +
diff --git a/src/kanga/visitor/Visitor.java b/src/kanga/visitor/Visitor.java new file mode 100644 index 0000000..33685bd --- /dev/null +++ b/src/kanga/visitor/Visitor.java @@ -0,0 +1,271 @@ +// +// Generated by JTB 1.3.2 +//
+
+package kanga.visitor;
+import kanga.syntaxtree.ALoadStmt; +import kanga.syntaxtree.AStoreStmt; +import kanga.syntaxtree.BinOp; +import kanga.syntaxtree.CJumpStmt; +import kanga.syntaxtree.CallStmt; +import kanga.syntaxtree.ErrorStmt; +import kanga.syntaxtree.Exp; +import kanga.syntaxtree.Goal; +import kanga.syntaxtree.HAllocate; +import kanga.syntaxtree.HLoadStmt; +import kanga.syntaxtree.HStoreStmt; +import kanga.syntaxtree.IntegerLiteral; +import kanga.syntaxtree.JumpStmt; +import kanga.syntaxtree.Label; +import kanga.syntaxtree.MoveStmt; +import kanga.syntaxtree.NoOpStmt; +import kanga.syntaxtree.NodeList; +import kanga.syntaxtree.NodeListOptional; +import kanga.syntaxtree.NodeOptional; +import kanga.syntaxtree.NodeSequence; +import kanga.syntaxtree.NodeToken; +import kanga.syntaxtree.Operator; +import kanga.syntaxtree.PassArgStmt; +import kanga.syntaxtree.PrintStmt; +import kanga.syntaxtree.Procedure; +import kanga.syntaxtree.Reg; +import kanga.syntaxtree.SimpleExp; +import kanga.syntaxtree.SpilledArg; +import kanga.syntaxtree.Stmt; +import kanga.syntaxtree.StmtList; +
+/**
+ * All void visitors must implement this interface.
+ */ +
+public interface Visitor { +
+ //
+ // void Auto class visitors
+ // +
+ public void visit(NodeList n); + public void visit(NodeListOptional n); + public void visit(NodeOptional n); + public void visit(NodeSequence n); + public void visit(NodeToken n); +
+ //
+ // User-generated visitor methods below
+ //
+
+ /**
+ * f0 -> "MAIN"
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ * f12 -> ( Procedure() )*
+ * f13 -> <EOF>
+ */
+ public void visit(Goal n); +
+ /**
+ * f0 -> ( ( Label() )? Stmt() )*
+ */
+ public void visit(StmtList n); +
+ /**
+ * f0 -> Label()
+ * f1 -> "["
+ * f2 -> IntegerLiteral()
+ * f3 -> "]"
+ * f4 -> "["
+ * f5 -> IntegerLiteral()
+ * f6 -> "]"
+ * f7 -> "["
+ * f8 -> IntegerLiteral()
+ * f9 -> "]"
+ * f10 -> StmtList()
+ * f11 -> "END"
+ */
+ public void visit(Procedure n); +
+ /**
+ * f0 -> NoOpStmt()
+ * | ErrorStmt()
+ * | CJumpStmt()
+ * | JumpStmt()
+ * | HStoreStmt()
+ * | HLoadStmt()
+ * | MoveStmt()
+ * | PrintStmt()
+ * | ALoadStmt()
+ * | AStoreStmt()
+ * | PassArgStmt()
+ * | CallStmt()
+ */
+ public void visit(Stmt n); +
+ /**
+ * f0 -> "NOOP"
+ */
+ public void visit(NoOpStmt n); +
+ /**
+ * f0 -> "ERROR"
+ */
+ public void visit(ErrorStmt n); +
+ /**
+ * f0 -> "CJUMP"
+ * f1 -> Reg()
+ * f2 -> Label()
+ */
+ public void visit(CJumpStmt n); +
+ /**
+ * f0 -> "JUMP"
+ * f1 -> Label()
+ */
+ public void visit(JumpStmt n); +
+ /**
+ * f0 -> "HSTORE"
+ * f1 -> Reg()
+ * f2 -> IntegerLiteral()
+ * f3 -> Reg()
+ */
+ public void visit(HStoreStmt n); +
+ /**
+ * f0 -> "HLOAD"
+ * f1 -> Reg()
+ * f2 -> Reg()
+ * f3 -> IntegerLiteral()
+ */
+ public void visit(HLoadStmt n); +
+ /**
+ * f0 -> "MOVE"
+ * f1 -> Reg()
+ * f2 -> Exp()
+ */
+ public void visit(MoveStmt n); +
+ /**
+ * f0 -> "PRINT"
+ * f1 -> SimpleExp()
+ */
+ public void visit(PrintStmt n); +
+ /**
+ * f0 -> "ALOAD"
+ * f1 -> Reg()
+ * f2 -> SpilledArg()
+ */
+ public void visit(ALoadStmt n); +
+ /**
+ * f0 -> "ASTORE"
+ * f1 -> SpilledArg()
+ * f2 -> Reg()
+ */
+ public void visit(AStoreStmt n); +
+ /**
+ * f0 -> "PASSARG"
+ * f1 -> IntegerLiteral()
+ * f2 -> Reg()
+ */
+ public void visit(PassArgStmt n); +
+ /**
+ * f0 -> "CALL"
+ * f1 -> SimpleExp()
+ */
+ public void visit(CallStmt n); +
+ /**
+ * f0 -> HAllocate()
+ * | BinOp()
+ * | SimpleExp()
+ */
+ public void visit(Exp n); +
+ /**
+ * f0 -> "HALLOCATE"
+ * f1 -> SimpleExp()
+ */
+ public void visit(HAllocate n); +
+ /**
+ * f0 -> Operator()
+ * f1 -> Reg()
+ * f2 -> SimpleExp()
+ */
+ public void visit(BinOp n); +
+ /**
+ * f0 -> "LT"
+ * | "PLUS"
+ * | "MINUS"
+ * | "TIMES"
+ */
+ public void visit(Operator n); +
+ /**
+ * f0 -> "SPILLEDARG"
+ * f1 -> IntegerLiteral()
+ */
+ public void visit(SpilledArg n); +
+ /**
+ * f0 -> Reg()
+ * | IntegerLiteral()
+ * | Label()
+ */
+ public void visit(SimpleExp n); +
+ /**
+ * f0 -> "a0"
+ * | "a1"
+ * | "a2"
+ * | "a3"
+ * | "t0"
+ * | "t1"
+ * | "t2"
+ * | "t3"
+ * | "t4"
+ * | "t5"
+ * | "t6"
+ * | "t7"
+ * | "s0"
+ * | "s1"
+ * | "s2"
+ * | "s3"
+ * | "s4"
+ * | "s5"
+ * | "s6"
+ * | "s7"
+ * | "t8"
+ * | "t9"
+ * | "v0"
+ * | "v1"
+ */
+ public void visit(Reg n); +
+ /**
+ * f0 -> <INTEGER_LITERAL>
+ */
+ public void visit(IntegerLiteral n); +
+ /**
+ * f0 -> <IDENTIFIER>
+ */
+ public void visit(Label n); +
+} +
|