diff options
Diffstat (limited to 'boil/BoilVisitor.java')
-rw-r--r-- | boil/BoilVisitor.java | 158 |
1 files changed, 77 insertions, 81 deletions
diff --git a/boil/BoilVisitor.java b/boil/BoilVisitor.java index 0d1d721..db0392d 100644 --- a/boil/BoilVisitor.java +++ b/boil/BoilVisitor.java @@ -6,14 +6,13 @@ import st.*; import misc.*; import java.util.*; -public class BoilVisitor extends GJDepthFirst<String,String> { +public class BoilVisitor extends GJDepthFirst<String,ArrayList<String>> { private String vapor; private TypeFactory tf; // the shared type generator private int id; private SymbolTable symt; - private MethodInstance recentMethod = null; // the most recent method called private ClassInstance recentClass = null; public BoilVisitor(SymbolTable symt) { @@ -68,7 +67,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { // // Auto class visitors--probably don't need to be overridden. // - public String visit(NodeList n, String argu) { + public String visit(NodeList n, ArrayList<String> argu) { String _ret=""; int _count=0; for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { @@ -78,7 +77,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { return _ret; } - public String visit(NodeListOptional n, String argu) { + public String visit(NodeListOptional n, ArrayList<String> argu) { if ( n.present() ) { String _ret=""; int _count=0; @@ -92,14 +91,14 @@ public class BoilVisitor extends GJDepthFirst<String,String> { return ""; } - public String visit(NodeOptional n, String argu) { + public String visit(NodeOptional n, ArrayList<String> argu) { if ( n.present() ) return n.node.accept(this,argu); else return ""; } - public String visit(NodeSequence n, String argu) { + public String visit(NodeSequence n, ArrayList<String> argu) { String _ret=null; int _count=0; for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { @@ -109,7 +108,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { return _ret; } - public String visit(NodeToken n, String argu) { + public String visit(NodeToken n, ArrayList<String> argu) { return null; } @@ -122,7 +121,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f1 -> ( TypeDeclaration() )* * f2 -> <EOF> */ - public String visit(Goal n, String argu) { + public String visit(Goal n, ArrayList<String> argu) { String _ret=null; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -159,7 +158,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f16 -> "}" * f17 -> "}" */ - public String visit(MainClass n, String argu) { + public String visit(MainClass n, ArrayList<String> argu) { String _ret=null; this.tf.reset(); String id = n.f1.f0.tokenImage; @@ -188,7 +187,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f0 -> ClassDeclaration() * | ClassExtendsDeclaration() */ - public String visit(TypeDeclaration n, String argu) { + public String visit(TypeDeclaration n, ArrayList<String> argu) { String _ret=null; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -209,7 +208,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f4 -> ( MethodDeclaration() )* * f5 -> "}" */ - public String visit(ClassDeclaration n, String argu) { + public String visit(ClassDeclaration n, ArrayList<String> argu) { String _ret=null; String id = n.f1.f0.tokenImage; MinimalLogger.info(String.format("-> %s (%s)", @@ -242,7 +241,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f6 -> ( MethodDeclaration() )* * f7 -> "}" */ - public String visit(ClassExtendsDeclaration n, String argu) { + public String visit(ClassExtendsDeclaration n, ArrayList<String> argu) { String _ret=null; String id = n.f1.f0.tokenImage; MinimalLogger.info(String.format("-> %s (%s)", @@ -271,7 +270,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f1 -> Identifier() * f2 -> ";" */ - public String visit(VarDeclaration n, String argu) { + public String visit(VarDeclaration n, ArrayList<String> argu) { String _ret=null; String id = n.f1.f0.tokenImage; MinimalLogger.info(String.format("-> %s (%s)", @@ -301,7 +300,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f11 -> ";" * f12 -> "}" */ - public String visit(MethodDeclaration n, String argu) { + public String visit(MethodDeclaration n, ArrayList<String> argu) { String _ret=null; this.tf.reset(); String id = n.f2.f0.tokenImage; @@ -337,7 +336,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f0 -> FormalParameter() * f1 -> ( FormalParameterRest() )* */ - public String visit(FormalParameterList n, String argu) { + public String visit(FormalParameterList n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -355,7 +354,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f0 -> Type() * f1 -> Identifier() */ - public String visit(FormalParameter n, String argu) { + public String visit(FormalParameter n, ArrayList<String> argu) { String _ret=""; String id = n.f1.f0.tokenImage; MinimalLogger.info(String.format("-> %s (%s)", @@ -375,7 +374,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f0 -> "," * f1 -> FormalParameter() */ - public String visit(FormalParameterRest n, String argu) { + public String visit(FormalParameterRest n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -394,7 +393,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * | IntegerType() * | Identifier() */ - public String visit(Type n, String argu) { + public String visit(Type n, ArrayList<String> argu) { String _ret=null; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -412,7 +411,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f1 -> "[" * f2 -> "]" */ - public String visit(ArrayType n, String argu) { + public String visit(ArrayType n, ArrayList<String> argu) { String _ret=null; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -427,7 +426,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { /** * f0 -> "boolean" */ - public String visit(BooleanType n, String argu) { + public String visit(BooleanType n, ArrayList<String> argu) { String _ret=null; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -442,7 +441,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { /** * f0 -> "int" */ - public String visit(IntegerType n, String argu) { + public String visit(IntegerType n, ArrayList<String> argu) { String _ret=null; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -462,7 +461,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * | WhileStatement() * | PrintStatement() */ - public String visit(Statement n, String argu) { + public String visit(Statement n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -480,7 +479,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f1 -> ( Statement() )* * f2 -> "}" */ - public String visit(Block n, String argu) { + public String visit(Block n, ArrayList<String> argu) { String _ret=null; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -499,7 +498,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f2 -> Expression() * f3 -> ";" */ - public String visit(AssignmentStatement n, String argu) { + public String visit(AssignmentStatement n, ArrayList<String> argu) { String _ret=null; String id = n.f0.f0.tokenImage; MinimalLogger.info(String.format("-> %s", @@ -536,7 +535,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f5 -> Expression() * f6 -> ";" */ - public String visit(ArrayAssignmentStatement n, String argu) { + public String visit(ArrayAssignmentStatement n, ArrayList<String> argu) { String _ret=null; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -582,7 +581,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f5 -> "else" * f6 -> Statement() */ - public String visit(IfStatement n, String argu) { + public String visit(IfStatement n, ArrayList<String> argu) { String _ret=null; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -622,7 +621,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f3 -> ")" * f4 -> Statement() */ - public String visit(WhileStatement n, String argu) { + public String visit(WhileStatement n, ArrayList<String> argu) { String _ret=null; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -661,7 +660,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f3 -> ")" * f4 -> ";" */ - public String visit(PrintStatement n, String argu) { + public String visit(PrintStatement n, ArrayList<String> argu) { String _ret=null; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -695,12 +694,12 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * | PrimaryExpression() */ // Expressions return a TYPE alias which is equal to the expression! - public String visit(Expression n, String argu) { + public String visit(Expression n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); /////////////////////////////////////////////////////////////// - _ret += n.f0.accept(this, argu); + _ret += this.memoryRead(n.f0.accept(this, argu)); /////////////////////////////////////////////////////////////// MinimalLogger.info(String.format("<- %s with %s", n.getClass().getSimpleName(), @@ -714,14 +713,14 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f2 -> PrimaryExpression() */ // Expressions return a TYPE alias which is equal to the expression! - public String visit(AndExpression n, String argu) { + public String visit(AndExpression n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); _ret += this.tf.alias(this.getUniqueID()); /////////////////////////////////////////////////////////////// - String oper1 = this.memoryRead(n.f0.accept(this, argu)); - String oper2 = this.memoryRead(n.f2.accept(this, argu)); + String oper1 = n.f0.accept(this, argu); + String oper2 = n.f2.accept(this, argu); String one = this.tf.alias(this.getUniqueID()); this.addVapor(String.format(" %s = Eq(1 %s)\n", one, @@ -747,14 +746,14 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f2 -> PrimaryExpression() */ // Expressions return a TYPE alias which is equal to the expression! - public String visit(CompareExpression n, String argu) { + public String visit(CompareExpression n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); _ret += this.tf.alias(this.getUniqueID()); /////////////////////////////////////////////////////////////// - String oper1 = this.memoryRead(n.f0.accept(this, argu)); - String oper2 = this.memoryRead(n.f2.accept(this, argu)); + String oper1 = n.f0.accept(this, argu); + String oper2 = n.f2.accept(this, argu); this.addVapor(String.format(" %s = LtS(%s %s)\n", _ret, oper1, @@ -772,14 +771,14 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f2 -> PrimaryExpression() */ // Expressions return a TYPE alias which is equal to the expression! - public String visit(PlusExpression n, String argu) { + public String visit(PlusExpression n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); _ret += this.tf.alias(this.getUniqueID()); /////////////////////////////////////////////////////////////// - String oper1 = this.memoryRead(n.f0.accept(this, argu)); - String oper2 = this.memoryRead(n.f2.accept(this, argu)); + String oper1 = n.f0.accept(this, argu); + String oper2 = n.f2.accept(this, argu); this.addVapor(String.format(" %s = Add(%s %s)\n", _ret, oper1, @@ -797,14 +796,14 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f2 -> PrimaryExpression() */ // Expressions return a TYPE alias which is equal to the expression! - public String visit(MinusExpression n, String argu) { + public String visit(MinusExpression n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); _ret += this.tf.alias(this.getUniqueID()); /////////////////////////////////////////////////////////////// - String oper1 = this.memoryRead(n.f0.accept(this, argu)); - String oper2 = this.memoryRead(n.f2.accept(this, argu)); + String oper1 = n.f0.accept(this, argu); + String oper2 = n.f2.accept(this, argu); this.addVapor(String.format(" %s = Sub(%s %s)\n", _ret, oper1, @@ -822,14 +821,14 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f2 -> PrimaryExpression() */ // Expressions return a TYPE alias which is equal to the expression! - public String visit(TimesExpression n, String argu) { + public String visit(TimesExpression n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); _ret += this.tf.alias(this.getUniqueID()); /////////////////////////////////////////////////////////////// - String oper1 = this.memoryRead(n.f0.accept(this, argu)); - String oper2 = this.memoryRead(n.f2.accept(this, argu)); + String oper1 = n.f0.accept(this, argu); + String oper2 = n.f2.accept(this, argu); this.addVapor(String.format(" %s = MulS(%s %s)\n", _ret, oper1, @@ -848,7 +847,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f3 -> "]" */ // Expressions return a TYPE alias which is equal to the expression! - public String visit(ArrayLookup n, String argu) { + public String visit(ArrayLookup n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -888,7 +887,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f2 -> "length" */ // Expressions return a TYPE alias which is equal to the expression! - public String visit(ArrayLength n, String argu) { + public String visit(ArrayLength n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -918,12 +917,13 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f5 -> ")" */ // Expressions return a TYPE alias which is equal to the expression! - public String visit(MessageSend n, String argu) { + public String visit(MessageSend n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); /////////////////////////////////////////////////////////////// _ret += this.tf.alias(this.getUniqueID()); + ArrayList<String> args = new ArrayList<String>(); String mtd = n.f2.f0.tokenImage; String rhs; TypeInstance t; @@ -951,7 +951,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { int mtdIndex = cur.getMethods() .indexOf(this.symt.getMethod(mtd, cur)) * 4; - this.addVapor(n.f4.accept(this, argu)); + n.f4.accept(this, args); this.addVapor(String.format(" %s = [%s+%d]\n", rhs, rhs, @@ -959,11 +959,11 @@ public class BoilVisitor extends GJDepthFirst<String,String> { this.addVapor(String.format(" %s = call %s(this", _ret, rhs)); - this.addVapor(String.format(" %s)\n", - this.tf.retrieveRecentList(this.symt.getMethod(mtd, cur) - .getArguments() - .size()))); - this.recentMethod = this.symt.getMethod(mtd, cur); + for (String arg : args) + this.addVapor(String.format(" %s", + arg)); + this.addVapor(")\n"); + this.recentClass = this.symt.getMethod(mtd, cur).getReturn(); return _ret; case 6: MinimalLogger.info("Message send found ANONYMOUS"); @@ -980,7 +980,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { case 8: MinimalLogger.info("Message send found BRACKET"); rhs = n.f0.accept(this, argu); - ClassInstance cls = this.recentMethod.getReturn(); + ClassInstance cls = this.recentClass; t = new TypeInstance(this.getUniqueID(), null, (MethodInstance) this.symt.getActive(TypeEnum.method), (ClassInstance) this.symt.getActive(TypeEnum.classname)); @@ -1009,7 +1009,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { MinimalLogger.severe("mtd: " + mtd); MinimalLogger.severe("t.getClassInstance() " + t.getClassInstance()); MinimalLogger.severe("t.getClassInstance().getMethods() " + t.getClassInstance().getMethods().toString()); - this.recentMethod = this.symt.getMethod(mtd, t.getClassInstance()); + this.recentClass = this.symt.getMethod(mtd, t.getClassInstance()).getReturn(); int mtdIndex = t.getClassInstance().getMethods() .indexOf(this.symt.getMethod(mtd, t.getClassInstance())) * 4; @@ -1018,17 +1018,17 @@ public class BoilVisitor extends GJDepthFirst<String,String> { tp1, mtdIndex)); - this.addVapor(n.f4.accept(this, argu)); + n.f4.accept(this, args); this.addVapor(String.format(" %s = call %s(%s", _ret, tp2, this.tf.alias(t.getName()))); - this.addVapor(String.format(" %s)\n", - this.tf.retrieveRecentList(this.symt.getMethod(mtd, t.getClassInstance()) - .getArguments() - .size()))); + for (String arg : args) + this.addVapor(String.format(" %s", + arg)); + this.addVapor(")\n"); /////////////////////////////////////////////////////////////// MinimalLogger.info(String.format("<- %s with %s", n.getClass().getSimpleName(), @@ -1040,16 +1040,14 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f0 -> Expression() * f1 -> ( ExpressionRest() )* */ - public String visit(ExpressionList n, String argu) { + public String visit(ExpressionList n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); /////////////////////////////////////////////////////////////// String rhs = n.f0.accept(this, argu); - _ret += String.format(" %s = %s\n", - this.tf.alias(this.getUniqueID()), - rhs); - _ret += n.f1.accept(this, argu); + argu.add(rhs); + n.f1.accept(this, argu); /////////////////////////////////////////////////////////////// MinimalLogger.info(String.format("<- %s with %s", n.getClass().getSimpleName(), @@ -1061,15 +1059,13 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f0 -> "," * f1 -> Expression() */ - public String visit(ExpressionRest n, String argu) { + public String visit(ExpressionRest n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); /////////////////////////////////////////////////////////////// String rhs = n.f1.accept(this, argu); - _ret += String.format(" %s = %s\n", - this.tf.alias(this.getUniqueID()), - rhs); + argu.add(rhs); /////////////////////////////////////////////////////////////// MinimalLogger.info(String.format("<- %s with %s", n.getClass().getSimpleName(), @@ -1088,12 +1084,12 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * | NotExpression() * | BracketExpression() */ - public String visit(PrimaryExpression n, String argu) { + public String visit(PrimaryExpression n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); /////////////////////////////////////////////////////////////// - _ret += n.f0.accept(this, argu); + _ret += this.memoryRead(n.f0.accept(this, argu)); /////////////////////////////////////////////////////////////// MinimalLogger.info(String.format("<- %s with %s", n.getClass().getSimpleName(), @@ -1104,7 +1100,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { /** * f0 -> <INTEGER_LITERAL> */ - public String visit(IntegerLiteral n, String argu) { + public String visit(IntegerLiteral n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -1120,7 +1116,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { /** * f0 -> "true" */ - public String visit(TrueLiteral n, String argu) { + public String visit(TrueLiteral n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -1136,7 +1132,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { /** * f0 -> "false" */ - public String visit(FalseLiteral n, String argu) { + public String visit(FalseLiteral n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -1152,7 +1148,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { /** * f0 -> <IDENTIFIER> */ - public String visit(Identifier n, String argu) { + public String visit(Identifier n, ArrayList<String> argu) { String _ret=""; String id = n.f0.tokenImage; MinimalLogger.info(String.format("-> %s (%s)", @@ -1181,7 +1177,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { /** * f0 -> "this" */ - public String visit(ThisExpression n, String argu) { + public String visit(ThisExpression n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -1201,7 +1197,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f3 -> Expression() * f4 -> "]" */ - public String visit(ArrayAllocationExpression n, String argu) { + public String visit(ArrayAllocationExpression n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -1226,7 +1222,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f2 -> "(" * f3 -> ")" */ - public String visit(AllocationExpression n, String argu) { + public String visit(AllocationExpression n, ArrayList<String> argu) { String _ret=""; String id = n.f1.f0.tokenImage; MinimalLogger.info(String.format("-> %s", @@ -1253,7 +1249,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f0 -> "!" * f1 -> Expression() */ - public String visit(NotExpression n, String argu) { + public String visit(NotExpression n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); @@ -1274,7 +1270,7 @@ public class BoilVisitor extends GJDepthFirst<String,String> { * f1 -> Expression() * f2 -> ")" */ - public String visit(BracketExpression n, String argu) { + public String visit(BracketExpression n, ArrayList<String> argu) { String _ret=""; MinimalLogger.info(String.format("-> %s", n.getClass().getSimpleName())); |