diff options
-rw-r--r-- | J2V.java | 4 | ||||
-rw-r--r-- | boil/library/BoilSimp.java | 758 | ||||
-rw-r--r-- | boil/library/TypeFactory.java (renamed from vaporize/library/TypeFactory.java) | 2 | ||||
-rw-r--r-- | boil/tests/BinaryTree.java (renamed from vaporize/tests/BinaryTree.java) | 0 | ||||
-rw-r--r-- | boil/tests/BinaryTree.opt.vapor (renamed from vaporize/tests/BinaryTree.opt.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/BinaryTree.vapor (renamed from vaporize/tests/BinaryTree.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/BubbleSort.java (renamed from vaporize/tests/BubbleSort.java) | 0 | ||||
-rw-r--r-- | boil/tests/BubbleSort.opt.vapor (renamed from vaporize/tests/BubbleSort.opt.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/BubbleSort.vapor (renamed from vaporize/tests/BubbleSort.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/Factorial.java (renamed from vaporize/tests/Factorial.java) | 0 | ||||
-rw-r--r-- | boil/tests/Factorial.opt.vapor (renamed from vaporize/tests/Factorial.opt.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/Factorial.vapor (renamed from vaporize/tests/Factorial.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/LinearSearch.java (renamed from vaporize/tests/LinearSearch.java) | 0 | ||||
-rw-r--r-- | boil/tests/LinearSearch.opt.vapor (renamed from vaporize/tests/LinearSearch.opt.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/LinearSearch.vapor (renamed from vaporize/tests/LinearSearch.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/LinkedList.java (renamed from vaporize/tests/LinkedList.java) | 0 | ||||
-rw-r--r-- | boil/tests/LinkedList.opt.vapor (renamed from vaporize/tests/LinkedList.opt.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/LinkedList.vapor (renamed from vaporize/tests/LinkedList.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/MoreThan4.java (renamed from vaporize/tests/MoreThan4.java) | 0 | ||||
-rw-r--r-- | boil/tests/MoreThan4.opt.vapor (renamed from vaporize/tests/MoreThan4.opt.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/MoreThan4.vapor (renamed from vaporize/tests/MoreThan4.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/QuickSort.java (renamed from vaporize/tests/QuickSort.java) | 0 | ||||
-rw-r--r-- | boil/tests/QuickSort.opt.vapor (renamed from vaporize/tests/QuickSort.opt.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/QuickSort.vapor (renamed from vaporize/tests/QuickSort.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/ShortCircuit.opt.vapor (renamed from vaporize/tests/ShortCircuit.opt.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/ShortCircuit.vapor (renamed from vaporize/tests/ShortCircuit.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/TreeVisitor.java (renamed from vaporize/tests/TreeVisitor.java) | 0 | ||||
-rw-r--r-- | boil/tests/TreeVisitor.opt.vapor (renamed from vaporize/tests/TreeVisitor.opt.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/TreeVisitor.vapor (renamed from vaporize/tests/TreeVisitor.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/ex1.java (renamed from vaporize/tests_easy/ex1.java) | 0 | ||||
-rw-r--r-- | boil/tests/ex1.vapor (renamed from vaporize/tests_easy/ex1.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/ex2.java (renamed from vaporize/tests_easy/ex2.java) | 0 | ||||
-rw-r--r-- | boil/tests/ex2.vapor (renamed from vaporize/tests_easy/ex2.vapor) | 0 | ||||
-rw-r--r-- | boil/tests/ex29.java (renamed from vaporize/tests_easy/ex29.java) | 0 | ||||
-rw-r--r-- | boil/tests/ex30.java (renamed from vaporize/tests_easy/ex30.java) | 0 | ||||
-rw-r--r-- | boil/tests/ex30.vapor | 3 | ||||
-rw-r--r-- | boil/tests/ex31.java (renamed from vaporize/tests_easy/ex31.java) | 0 | ||||
-rw-r--r-- | boil/tests/ex32.java | 16 | ||||
-rw-r--r-- | boil/tests/ex33.java | 13 | ||||
-rw-r--r-- | typecheck/library/TypeCheckSimp.java | 2 | ||||
-rw-r--r-- | typecheck/tests/IsPositive.java | 18 | ||||
-rw-r--r-- | vaporize/library/VaporizeSimp.java | 668 |
42 files changed, 1103 insertions, 381 deletions
@@ -5,7 +5,7 @@ import syntaxtree.*; import java.util.*; import st.*; import misc.*; -import vaporize.library.*; +import boil.library.*; public class J2V { public static void main(String[] args) { @@ -24,7 +24,7 @@ public class J2V { root.accept(new SymTableBottomUp<Void>(), symt); root.accept(new SymTableTopDown<Void>(), symt); - VaporizeSimp vp = new VaporizeSimp(); + BoilSimp vp = new BoilSimp(); String program = root.accept(vp, symt); PrintFilter.print("===================================================", true); diff --git a/boil/library/BoilSimp.java b/boil/library/BoilSimp.java new file mode 100644 index 0000000..b5ea518 --- /dev/null +++ b/boil/library/BoilSimp.java @@ -0,0 +1,758 @@ +package boil.library; + +import syntaxtree.*; +import visitor.*; +import st.*; +import misc.*; +import java.util.*; + +public class BoilSimp extends GJDepthFirst<String,SymbolTable> { + + TypeFactory tf = new TypeFactory(); + + // + // Auto class visitors--probably don't need to be overridden. + // + public String visit(NodeList n, SymbolTable symt) { + String mod = ""; + int _count=0; + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { + mod += e.nextElement().accept(this,symt); + _count++; + } + return mod; + } + + public String visit(NodeListOptional n, SymbolTable symt) { + String mod = ""; + if ( n.present() ) { + int _count=0; + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { + mod += e.nextElement().accept(this,symt); + _count++; + } + return mod; + } + else + return ""; + } + + public String visit(NodeOptional n, SymbolTable symt) { + if ( n.present() ) + return n.node.accept(this,symt); + else + return ""; + } + + public String visit(NodeSequence n, SymbolTable symt) { + String mod = ""; + int _count=0; + for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { + mod += e.nextElement().accept(this,symt); + _count++; + } + return mod; + } + + public String visit(NodeToken n, SymbolTable symt) { return ""; } + + // + // User-generated visitor methods below + // + + /** + * f0 -> MainClass() + * f1 -> ( TypeDeclaration() )* + * f2 -> <EOF> + */ + public String visit(Goal n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + return mod; + } + + /** + * f0 -> "class" + * f1 -> Identifier() + * f2 -> "{" + * f3 -> "public" + * f4 -> "static" + * f5 -> "void" + * f6 -> "main" + * f7 -> "(" + * f8 -> "String" + * f9 -> "[" + * f10 -> "]" + * f11 -> Identifier() + * f12 -> ")" + * f13 -> "{" + * f14 -> ( VarDeclaration() )* + * f15 -> ( Statement() )* + * f16 -> "}" + * f17 -> "}" + */ + public String visit(MainClass n, SymbolTable symt) { + String id = n.f1.f0.tokenImage; + + symt.setActive(TypeEnum.classname, id); + symt.setActive(TypeEnum.method, "main"); + this.tf.reset(); + String mod = ""; + mod += "func Main()\n"; + + mod += n.f0.accept(this, symt); + n.f1.accept(this, symt); // throw class name away + mod += n.f2.accept(this, symt); + mod += n.f3.accept(this, symt); + mod += n.f4.accept(this, symt); + mod += n.f5.accept(this, symt); + mod += n.f6.accept(this, symt); + mod += n.f7.accept(this, symt); + mod += n.f8.accept(this, symt); + mod += n.f9.accept(this, symt); + mod += n.f10.accept(this, symt); + n.f11.accept(this, symt); // throw boiler 'args' variable away + mod += n.f12.accept(this, symt); + mod += n.f13.accept(this, symt); + mod += n.f14.accept(this, symt); // FIXME + mod += n.f15.accept(this, symt); + mod += n.f16.accept(this, symt); + mod += n.f17.accept(this, symt); + + mod += " goto :exit\nerror:\n" + + " Error(\"Mem exhausted\")\n goto :exit\n" + + "exit:\n ret\n\n"; + + symt.removeActive(TypeEnum.method); + return mod; + } + + /** + * f0 -> ClassDeclaration() + * | ClassExtendsDeclaration() + */ + public String visit(TypeDeclaration n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + return mod; + } + + /** + * f0 -> "class" + * f1 -> Identifier() + * f2 -> "{" + * f3 -> ( VarDeclaration() )* + * f4 -> ( MethodDeclaration() )* + * f5 -> "}" + */ + public String visit(ClassDeclaration n, SymbolTable symt) { + String id = n.f1.f0.tokenImage; + symt.setActive(TypeEnum.classname, id); + String mod = ""; + + mod += n.f0.accept(this, symt); + n.f1.accept(this, symt); + mod += String.format("const functable_%s\n", id); + for (MethodInstance mtd : symt.getClass(id).getMethods()) { + mod += String.format(" :%s_%s\n", id, mtd); + } + mod += "\n"; + mod += n.f2.accept(this, symt); + mod += n.f3.accept(this, symt); + mod += n.f4.accept(this, symt); + mod += n.f5.accept(this, symt); + + return mod; + } + + /** + * f0 -> "class" + * f1 -> Identifier() + * f2 -> "extends" + * f3 -> Identifier() + * f4 -> "{" + * f5 -> ( VarDeclaration() )* + * f6 -> ( MethodDeclaration() )* + * f7 -> "}" + */ + public String visit(ClassExtendsDeclaration n, SymbolTable symt) { + String id = n.f1.f0.tokenImage; + symt.setActive(TypeEnum.classname, id); + String mod = ""; + + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + mod += n.f3.accept(this, symt); + mod += n.f4.accept(this, symt); + mod += n.f5.accept(this, symt); + mod += n.f6.accept(this, symt); + mod += n.f7.accept(this, symt); + return mod; + } + + /** + * f0 -> Type() + * f1 -> Identifier() + * f2 -> ";" + */ + public String visit(VarDeclaration n, SymbolTable symt) { + String mod = ""; + + n.f0.accept(this, symt); + String id = n.f1.accept(this, symt); + mod += String.format(" %s = HeapAllocZ(32)\n", + this.tf.addNewAlias(symt.getType(id))); // FIXME add proper allocation size + mod += String.format(" if0 %s goto :error\n", + this.tf.retrieveAlias(symt.getType(id))); + mod += n.f2.accept(this, symt); + return mod; + } + + /** + * f0 -> "public" + * f1 -> Type() + * f2 -> Identifier() + * f3 -> "(" + * f4 -> ( FormalParameterList() )? + * f5 -> ")" + * f6 -> "{" + * f7 -> ( VarDeclaration() )* + * f8 -> ( Statement() )* + * f9 -> "return" + * f10 -> Expression() + * f11 -> ";" + * f12 -> "}" + */ + public String visit(MethodDeclaration n, SymbolTable symt) { + String id = n.f2.f0.tokenImage; + symt.setActive(TypeEnum.method, id); + this.tf.reset(); + String mod = ""; + + mod += n.f0.accept(this, symt); + n.f1.accept(this, symt); + n.f2.accept(this, symt); + mod += "func " + symt.getActive(TypeEnum.classname) + "_" + id + "(this"; + mod += n.f3.accept(this, symt); + String args = n.f4.accept(this, symt); + mod += String.format("%s)\n", args); + mod += n.f5.accept(this, symt); + mod += n.f6.accept(this, symt); + mod += n.f7.accept(this, symt); + mod += n.f8.accept(this, symt); + mod += n.f9.accept(this, symt); + n.f10.accept(this, symt); // FIXME + mod += n.f11.accept(this, symt); + mod += n.f12.accept(this, symt); + + mod += " ret\n\n"; + + + symt.removeActive(TypeEnum.method); + return mod; + } + + /** + * f0 -> FormalParameter() + * f1 -> ( FormalParameterRest() )* + */ + public String visit(FormalParameterList n, SymbolTable symt) { + String mod = ""; + String arg = n.f0.accept(this, symt); + if (arg != null) + mod += " " + arg; + mod += n.f1.accept(this, symt); + return mod; + } + + /** + * f0 -> Type() + * f1 -> Identifier() + */ + public String visit(FormalParameter n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + return mod; + } + + /** + * f0 -> "," + * f1 -> FormalParameter() + */ + public String visit(FormalParameterRest n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + String arg = n.f1.accept(this, symt); + if (arg != null) + mod += " " + arg; + return mod; + } + + /** + * f0 -> ArrayType() + * | BooleanType() + * | IntegerType() + * | Identifier() + */ + public String visit(Type n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + return mod; + } + + /** + * f0 -> "int" + * f1 -> "[" + * f2 -> "]" + */ + public String visit(ArrayType n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + return mod; + } + + /** + * f0 -> "boolean" + */ + public String visit(BooleanType n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + return mod; + } + + /** + * f0 -> "int" + */ + public String visit(IntegerType n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt);; + return mod; + } + + /** + * f0 -> Block() + * | AssignmentStatement() + * | ArrayAssignmentStatement() + * | IfStatement() + * | WhileStatement() + * | PrintStatement() + */ + public String visit(Statement n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + return mod; + } + + /** + * f0 -> "{" + * f1 -> ( Statement() )* + * f2 -> "}" + */ + public String visit(Block n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + return mod; + } + + /** + * f0 -> Identifier() + * f1 -> "=" + * f2 -> Expression() + * f3 -> ";" + */ + public String visit(AssignmentStatement n, SymbolTable symt) { + String mod = ""; + + String id = n.f0.accept(this, symt); + mod += String.format(" [%s] = ", this.tf.retrieveAlias(symt.getType(id))); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + mod += n.f3.accept(this, symt); + return mod; + } + + /** + * f0 -> Identifier() + * f1 -> "[" + * f2 -> Expression() + * f3 -> "]" + * f4 -> "=" + * f5 -> Expression() + * f6 -> ";" + */ + public String visit(ArrayAssignmentStatement n, SymbolTable symt) { + String mod = ""; + n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + mod += n.f3.accept(this, symt); + mod += n.f4.accept(this, symt); + mod += n.f5.accept(this, symt); + mod += n.f6.accept(this, symt); + return mod; + } + + /** + * f0 -> "if" + * f1 -> "(" + * f2 -> Expression() + * f3 -> ")" + * f4 -> Statement() + * f5 -> "else" + * f6 -> Statement() + */ + public String visit(IfStatement n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + mod += n.f3.accept(this, symt); + mod += n.f4.accept(this, symt); + mod += n.f5.accept(this, symt); + mod += n.f6.accept(this, symt); + return mod; + } + + /** + * f0 -> "while" + * f1 -> "(" + * f2 -> Expression() + * f3 -> ")" + * f4 -> Statement() + */ + public String visit(WhileStatement n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + mod += n.f3.accept(this, symt); + mod += n.f4.accept(this, symt); + return mod; + } + + /** + * f0 -> "System.out.println" + * f1 -> "(" + * f2 -> Expression() + * f3 -> ")" + * f4 -> ";" + */ + public String visit(PrintStatement n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + mod += n.f3.accept(this, symt); + mod += n.f4.accept(this, symt); + return mod; + } + + /** + * f0 -> AndExpression() + * | CompareExpression() + * | PlusExpression() + * | MinusExpression() + * | TimesExpression() + * | ArrayLookup() + * | ArrayLength() + * | MessageSend() + * | PrimaryExpression() + */ + public String visit(Expression n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + return mod; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "&&" + * f2 -> PrimaryExpression() + */ + public String visit(AndExpression n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + return mod; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "<" + * f2 -> PrimaryExpression() + */ + public String visit(CompareExpression n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + return mod; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "+" + * f2 -> PrimaryExpression() + */ + public String visit(PlusExpression n, SymbolTable symt) { + String mod = ""; + String oper1 = n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + String oper2 = n.f2.accept(this, symt); + TypeInstance tp1 = new TypeInstance("tp1", TypeEnum.ERROR); + + mod += String.format(" %s = AddS(%s %s)\n", + this.tf.addNewAlias(tp1), + oper1, + oper2); + + return mod; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "-" + * f2 -> PrimaryExpression() + */ + public String visit(MinusExpression n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + return mod; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "*" + * f2 -> PrimaryExpression() + */ + public String visit(TimesExpression n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + return mod; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "[" + * f2 -> PrimaryExpression() + * f3 -> "]" + */ + public String visit(ArrayLookup n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + mod += n.f3.accept(this, symt); + return mod; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "." + * f2 -> "length" + */ + public String visit(ArrayLength n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + return mod; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "." + * f2 -> Identifier() + * f3 -> "(" + * f4 -> ( ExpressionList() )? + * f5 -> ")" + */ + public String visit(MessageSend n, SymbolTable symt) { + String mod = ""; + String id = n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + String id2 = n.f2.accept(this, symt); + TypeInstance tp1 = new TypeInstance("tp1", TypeEnum.ERROR); // TypeFactory likes to know who it's renting to + TypeInstance tp2 = new TypeInstance("tp2", TypeEnum.ERROR); + + TypeInstance cur = symt.getType(id); + int mtdIndex = cur.getClassInstance() + .getMethods().indexOf(symt.getMethod(id2)) * 4; + + mod += String.format(" %s = [%s+%d]\n", + this.tf.addNewAlias(tp1), + this.tf.retrieveAlias(cur), + 0); + + mod += String.format(" %s = [%s+%d]\n", + this.tf.addNewAlias(tp2), + this.tf.retrieveAlias(tp1), + mtdIndex); + + mod += n.f3.accept(this, symt); + mod = n.f4.accept(this, symt); + mod += n.f5.accept(this, symt); + + mod += String.format(" call %s(%s)\n", + this.tf.retrieveAlias(tp2), + this.tf.retrieveAlias(cur)); + + return mod; + } + + /** + * f0 -> Expression() + * f1 -> ( ExpressionRest() )* + */ + public String visit(ExpressionList n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + return mod; + } + + /** + * f0 -> "," + * f1 -> Expression() + */ + public String visit(ExpressionRest n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + return mod; + } + + /** + * f0 -> IntegerLiteral() + * | TrueLiteral() + * | FalseLiteral() + * | Identifier() + * | ThisExpression() + * | ArrayAllocationExpression() + * | AllocationExpression() + * | NotExpression() + * | BracketExpression() + */ + public String visit(PrimaryExpression n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + return mod; + } + + /** + * f0 -> <INTEGER_LITERAL> + */ + public String visit(IntegerLiteral n, SymbolTable symt) { + String mod = ""; + mod += n.f0.tokenImage; + return mod; + } + + /** + * f0 -> "true" + */ + public String visit(TrueLiteral n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + return mod; + } + + /** + * f0 -> "false" + */ + public String visit(FalseLiteral n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + return mod; + } + + /** + * f0 -> <IDENTIFIER> + */ + public String visit(Identifier n, SymbolTable symt) { + String mod = ""; + mod += n.f0.tokenImage; + return mod; + } + + /** + * f0 -> "this" + */ + public String visit(ThisExpression n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + return mod; + } + + /** + * f0 -> "new" + * f1 -> "int" + * f2 -> "[" + * f3 -> Expression() + * f4 -> "]" + */ + public String visit(ArrayAllocationExpression n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + mod += n.f3.accept(this, symt); + mod += n.f4.accept(this, symt); + return mod; + } + + /** + * f0 -> "new" + * f1 -> Identifier() + * f2 -> "(" + * f3 -> ")" + */ + public String visit(AllocationExpression n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + String cls = n.f1.accept(this, symt); + mod += String.format(":functable_%s\n", cls); + + mod += n.f2.accept(this, symt); + mod += n.f3.accept(this, symt); + return mod; + } + + /** + * f0 -> "!" + * f1 -> Expression() + */ + public String visit(NotExpression n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + return mod; + } + + /** + * f0 -> "(" + * f1 -> Expression() + * f2 -> ")" + */ + public String visit(BracketExpression n, SymbolTable symt) { + String mod = ""; + mod += n.f0.accept(this, symt); + mod += n.f1.accept(this, symt); + mod += n.f2.accept(this, symt); + return mod; + } + +} diff --git a/vaporize/library/TypeFactory.java b/boil/library/TypeFactory.java index b73862f..8dd910e 100644 --- a/vaporize/library/TypeFactory.java +++ b/boil/library/TypeFactory.java @@ -1,4 +1,4 @@ -package vaporize.library; +package boil.library; import java.util.HashMap; import st.TypeInstance; diff --git a/vaporize/tests/BinaryTree.java b/boil/tests/BinaryTree.java index 18d1464..18d1464 100644 --- a/vaporize/tests/BinaryTree.java +++ b/boil/tests/BinaryTree.java diff --git a/vaporize/tests/BinaryTree.opt.vapor b/boil/tests/BinaryTree.opt.vapor index ef6ac4e..ef6ac4e 100644 --- a/vaporize/tests/BinaryTree.opt.vapor +++ b/boil/tests/BinaryTree.opt.vapor diff --git a/vaporize/tests/BinaryTree.vapor b/boil/tests/BinaryTree.vapor index 275cfe3..275cfe3 100644 --- a/vaporize/tests/BinaryTree.vapor +++ b/boil/tests/BinaryTree.vapor diff --git a/vaporize/tests/BubbleSort.java b/boil/tests/BubbleSort.java index e5645a9..e5645a9 100644 --- a/vaporize/tests/BubbleSort.java +++ b/boil/tests/BubbleSort.java diff --git a/vaporize/tests/BubbleSort.opt.vapor b/boil/tests/BubbleSort.opt.vapor index a118894..a118894 100644 --- a/vaporize/tests/BubbleSort.opt.vapor +++ b/boil/tests/BubbleSort.opt.vapor diff --git a/vaporize/tests/BubbleSort.vapor b/boil/tests/BubbleSort.vapor index cedba69..cedba69 100644 --- a/vaporize/tests/BubbleSort.vapor +++ b/boil/tests/BubbleSort.vapor diff --git a/vaporize/tests/Factorial.java b/boil/tests/Factorial.java index d938bb6..d938bb6 100644 --- a/vaporize/tests/Factorial.java +++ b/boil/tests/Factorial.java diff --git a/vaporize/tests/Factorial.opt.vapor b/boil/tests/Factorial.opt.vapor index aca17fe..aca17fe 100644 --- a/vaporize/tests/Factorial.opt.vapor +++ b/boil/tests/Factorial.opt.vapor diff --git a/vaporize/tests/Factorial.vapor b/boil/tests/Factorial.vapor index 28e1126..28e1126 100644 --- a/vaporize/tests/Factorial.vapor +++ b/boil/tests/Factorial.vapor diff --git a/vaporize/tests/LinearSearch.java b/boil/tests/LinearSearch.java index daddd94..daddd94 100644 --- a/vaporize/tests/LinearSearch.java +++ b/boil/tests/LinearSearch.java diff --git a/vaporize/tests/LinearSearch.opt.vapor b/boil/tests/LinearSearch.opt.vapor index 302de05..302de05 100644 --- a/vaporize/tests/LinearSearch.opt.vapor +++ b/boil/tests/LinearSearch.opt.vapor diff --git a/vaporize/tests/LinearSearch.vapor b/boil/tests/LinearSearch.vapor index db4884a..db4884a 100644 --- a/vaporize/tests/LinearSearch.vapor +++ b/boil/tests/LinearSearch.vapor diff --git a/vaporize/tests/LinkedList.java b/boil/tests/LinkedList.java index 69adc33..69adc33 100644 --- a/vaporize/tests/LinkedList.java +++ b/boil/tests/LinkedList.java diff --git a/vaporize/tests/LinkedList.opt.vapor b/boil/tests/LinkedList.opt.vapor index aaca62c..aaca62c 100644 --- a/vaporize/tests/LinkedList.opt.vapor +++ b/boil/tests/LinkedList.opt.vapor diff --git a/vaporize/tests/LinkedList.vapor b/boil/tests/LinkedList.vapor index bebdf94..bebdf94 100644 --- a/vaporize/tests/LinkedList.vapor +++ b/boil/tests/LinkedList.vapor diff --git a/vaporize/tests/MoreThan4.java b/boil/tests/MoreThan4.java index 4960f01..4960f01 100644 --- a/vaporize/tests/MoreThan4.java +++ b/boil/tests/MoreThan4.java diff --git a/vaporize/tests/MoreThan4.opt.vapor b/boil/tests/MoreThan4.opt.vapor index a59d1b5..a59d1b5 100644 --- a/vaporize/tests/MoreThan4.opt.vapor +++ b/boil/tests/MoreThan4.opt.vapor diff --git a/vaporize/tests/MoreThan4.vapor b/boil/tests/MoreThan4.vapor index 6067f8e..6067f8e 100644 --- a/vaporize/tests/MoreThan4.vapor +++ b/boil/tests/MoreThan4.vapor diff --git a/vaporize/tests/QuickSort.java b/boil/tests/QuickSort.java index 5893390..5893390 100644 --- a/vaporize/tests/QuickSort.java +++ b/boil/tests/QuickSort.java diff --git a/vaporize/tests/QuickSort.opt.vapor b/boil/tests/QuickSort.opt.vapor index 6e14e5a..6e14e5a 100644 --- a/vaporize/tests/QuickSort.opt.vapor +++ b/boil/tests/QuickSort.opt.vapor diff --git a/vaporize/tests/QuickSort.vapor b/boil/tests/QuickSort.vapor index 3fe3798..3fe3798 100644 --- a/vaporize/tests/QuickSort.vapor +++ b/boil/tests/QuickSort.vapor diff --git a/vaporize/tests/ShortCircuit.opt.vapor b/boil/tests/ShortCircuit.opt.vapor index 8275acd..8275acd 100644 --- a/vaporize/tests/ShortCircuit.opt.vapor +++ b/boil/tests/ShortCircuit.opt.vapor diff --git a/vaporize/tests/ShortCircuit.vapor b/boil/tests/ShortCircuit.vapor index 31cc088..31cc088 100644 --- a/vaporize/tests/ShortCircuit.vapor +++ b/boil/tests/ShortCircuit.vapor diff --git a/vaporize/tests/TreeVisitor.java b/boil/tests/TreeVisitor.java index 8debfe6..8debfe6 100644 --- a/vaporize/tests/TreeVisitor.java +++ b/boil/tests/TreeVisitor.java diff --git a/vaporize/tests/TreeVisitor.opt.vapor b/boil/tests/TreeVisitor.opt.vapor index dfa80a6..dfa80a6 100644 --- a/vaporize/tests/TreeVisitor.opt.vapor +++ b/boil/tests/TreeVisitor.opt.vapor diff --git a/vaporize/tests/TreeVisitor.vapor b/boil/tests/TreeVisitor.vapor index d8aa63b..d8aa63b 100644 --- a/vaporize/tests/TreeVisitor.vapor +++ b/boil/tests/TreeVisitor.vapor diff --git a/vaporize/tests_easy/ex1.java b/boil/tests/ex1.java index 22f0aa0..22f0aa0 100644 --- a/vaporize/tests_easy/ex1.java +++ b/boil/tests/ex1.java diff --git a/vaporize/tests_easy/ex1.vapor b/boil/tests/ex1.vapor index bcfb38c..bcfb38c 100644 --- a/vaporize/tests_easy/ex1.vapor +++ b/boil/tests/ex1.vapor diff --git a/vaporize/tests_easy/ex2.java b/boil/tests/ex2.java index 986ca7d..986ca7d 100644 --- a/vaporize/tests_easy/ex2.java +++ b/boil/tests/ex2.java diff --git a/vaporize/tests_easy/ex2.vapor b/boil/tests/ex2.vapor index 25811b3..25811b3 100644 --- a/vaporize/tests_easy/ex2.vapor +++ b/boil/tests/ex2.vapor diff --git a/vaporize/tests_easy/ex29.java b/boil/tests/ex29.java index 30ea154..30ea154 100644 --- a/vaporize/tests_easy/ex29.java +++ b/boil/tests/ex29.java diff --git a/vaporize/tests_easy/ex30.java b/boil/tests/ex30.java index 4a5064d..4a5064d 100644 --- a/vaporize/tests_easy/ex30.java +++ b/boil/tests/ex30.java diff --git a/boil/tests/ex30.vapor b/boil/tests/ex30.vapor new file mode 100644 index 0000000..200baee --- /dev/null +++ b/boil/tests/ex30.vapor @@ -0,0 +1,3 @@ +func Main() + + ret
\ No newline at end of file diff --git a/vaporize/tests_easy/ex31.java b/boil/tests/ex31.java index d5a6980..d5a6980 100644 --- a/vaporize/tests_easy/ex31.java +++ b/boil/tests/ex31.java diff --git a/boil/tests/ex32.java b/boil/tests/ex32.java new file mode 100644 index 0000000..5e421c4 --- /dev/null +++ b/boil/tests/ex32.java @@ -0,0 +1,16 @@ +class ex31 { + public static void main(String[] a) { + A a ; + a = new A() ; + System.out.println(a.bar()) ; + } +} + +class A { + public int foo() { + return 22 ; + } + public int bar() { + return 42 ; + } +} diff --git a/boil/tests/ex33.java b/boil/tests/ex33.java new file mode 100644 index 0000000..53e369f --- /dev/null +++ b/boil/tests/ex33.java @@ -0,0 +1,13 @@ +class ex31 { + public static void main(String[] a) { + A a ; + a = new A() ; + System.out.println(a.foo(12 + 13)) ; + } +} + +class A { + public int foo(int a) { + return 22 ; + } +} diff --git a/typecheck/library/TypeCheckSimp.java b/typecheck/library/TypeCheckSimp.java index 1a77477..2eb5bf1 100644 --- a/typecheck/library/TypeCheckSimp.java +++ b/typecheck/library/TypeCheckSimp.java @@ -175,7 +175,7 @@ public class TypeCheckSimp extends GJDepthFirst<TypeInstance,SymbolTable> { n.f8.accept(this, symt); n.f9.accept(this, symt); n.f10.accept(this, symt); - // TypeInstance args = n.f11.accept(this, symt); // FIXME Type in the main class declaration uses an illegal minijava type? + // TypeInstance args = n.f11.accept(this, symt); n.f12.accept(this, symt); n.f13.accept(this, symt); TypeInstance var_dec = n.f14.accept(this, symt); diff --git a/typecheck/tests/IsPositive.java b/typecheck/tests/IsPositive.java index 087cd3f..09bcf1d 100644 --- a/typecheck/tests/IsPositive.java +++ b/typecheck/tests/IsPositive.java @@ -1,12 +1,24 @@ class IsPositive{ public static void main(String[] a){ - System.out.println(new Positive().isPos(10)); + System.out.println(new Positive().isPositive(10)); } } class Positive { - public bool isPos(int num){ - bool positive ; + public boolean isPositive(int num){ + boolean positive ; + + if (0 < num) + positive = true ; + else + positive = false ; + return positive ; + } +} + +class Positive2 extends Positive { + public boolean isPositive(int num){ + boolean positive ; if (0 < num) positive = true ; diff --git a/vaporize/library/VaporizeSimp.java b/vaporize/library/VaporizeSimp.java index a7faf88..6c69ea2 100644 --- a/vaporize/library/VaporizeSimp.java +++ b/vaporize/library/VaporizeSimp.java @@ -1,60 +1,58 @@ package vaporize.library; import syntaxtree.*; -import visitor.*; +package visitor; import st.*; import misc.*; import java.util.*; -public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { - - TypeFactory tf = new TypeFactory(); +public class VaporizeSimp<R,A> implements GJVisitor<R,A> { // // Auto class visitors--probably don't need to be overridden. // - public String visit(NodeList n, SymbolTable symt) { - String mod = ""; + public R visit(NodeList n, A argu) { + R _ret=null; int _count=0; for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { - mod += e.nextElement().accept(this,symt); + e.nextElement().accept(this,argu); _count++; } - return mod; + return _ret; } - public String visit(NodeListOptional n, SymbolTable symt) { - String mod = ""; + public R visit(NodeListOptional n, A argu) { if ( n.present() ) { + R _ret=null; int _count=0; for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { - mod += e.nextElement().accept(this,symt); + e.nextElement().accept(this,argu); _count++; } - return mod; + return _ret; } else - return ""; + return null; } - public String visit(NodeOptional n, SymbolTable symt) { + public R visit(NodeOptional n, A argu) { if ( n.present() ) - return n.node.accept(this,symt); + return n.node.accept(this,argu); else - return ""; + return null; } - public String visit(NodeSequence n, SymbolTable symt) { - String mod = ""; + public R visit(NodeSequence n, A argu) { + R _ret=null; int _count=0; for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) { - mod += e.nextElement().accept(this,symt); + e.nextElement().accept(this,argu); _count++; } - return mod; + return _ret; } - public String visit(NodeToken n, SymbolTable symt) { return ""; } + public R visit(NodeToken n, A argu) { return null; } // // User-generated visitor methods below @@ -65,12 +63,12 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f1 -> ( TypeDeclaration() )* * f2 -> <EOF> */ - public String visit(Goal n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - return mod; + 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); + return _ret; } /** @@ -93,50 +91,37 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f16 -> "}" * f17 -> "}" */ - public String visit(MainClass n, SymbolTable symt) { - String id = n.f1.f0.tokenImage; - - symt.setActive(TypeEnum.classname, id); - symt.setActive(TypeEnum.method, "main"); - this.tf.reset(); - String mod = ""; - mod += "func Main()\n"; - - mod += n.f0.accept(this, symt); - n.f1.accept(this, symt); // throw class name away - mod += n.f2.accept(this, symt); - mod += n.f3.accept(this, symt); - mod += n.f4.accept(this, symt); - mod += n.f5.accept(this, symt); - mod += n.f6.accept(this, symt); - mod += n.f7.accept(this, symt); - mod += n.f8.accept(this, symt); - mod += n.f9.accept(this, symt); - mod += n.f10.accept(this, symt); - n.f11.accept(this, symt); // throw boiler 'args' variable away - mod += n.f12.accept(this, symt); - mod += n.f13.accept(this, symt); - mod += n.f14.accept(this, symt); // FIXME - mod += n.f15.accept(this, symt); - mod += n.f16.accept(this, symt); - mod += n.f17.accept(this, symt); - - mod += " goto :exit\nerror:\n" + - " Error(\"Mem exhausted\")\n goto :exit\n" + - "exit:\n ret\n\n"; - - symt.removeActive(TypeEnum.method); - return mod; + public R visit(MainClass 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); + n.f14.accept(this, argu); + n.f15.accept(this, argu); + n.f16.accept(this, argu); + n.f17.accept(this, argu); + return _ret; } /** * f0 -> ClassDeclaration() * | ClassExtendsDeclaration() */ - public String visit(TypeDeclaration n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - return mod; + public R visit(TypeDeclaration n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + return _ret; } /** @@ -147,24 +132,15 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f4 -> ( MethodDeclaration() )* * f5 -> "}" */ - public String visit(ClassDeclaration n, SymbolTable symt) { - String id = n.f1.f0.tokenImage; - symt.setActive(TypeEnum.classname, id); - String mod = ""; - - mod += n.f0.accept(this, symt); - n.f1.accept(this, symt); - mod += String.format("const functable_%s\n", id); - for (MethodInstance mtd : symt.getClass(id).getMethods()) { - mod += String.format(" :%s_%s\n", id, mtd); - } - mod += "\n"; - mod += n.f2.accept(this, symt); - mod += n.f3.accept(this, symt); - mod += n.f4.accept(this, symt); - mod += n.f5.accept(this, symt); - - return mod; + public R visit(ClassDeclaration 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); + return _ret; } /** @@ -177,20 +153,17 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f6 -> ( MethodDeclaration() )* * f7 -> "}" */ - public String visit(ClassExtendsDeclaration n, SymbolTable symt) { - String id = n.f1.f0.tokenImage; - symt.setActive(TypeEnum.classname, id); - String mod = ""; - - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - mod += n.f3.accept(this, symt); - mod += n.f4.accept(this, symt); - mod += n.f5.accept(this, symt); - mod += n.f6.accept(this, symt); - mod += n.f7.accept(this, symt); - return mod; + public R visit(ClassExtendsDeclaration 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); + return _ret; } /** @@ -198,17 +171,12 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f1 -> Identifier() * f2 -> ";" */ - public String visit(VarDeclaration n, SymbolTable symt) { - String mod = ""; - - n.f0.accept(this, symt); - String id = n.f1.accept(this, symt); - mod += String.format(" %s = HeapAllocZ(32)\n", - this.tf.addNewAlias(symt.getType(id))); // FIXME add proper allocation size - mod += String.format(" if0 %s goto :error\n", - this.tf.retrieveAlias(symt.getType(id))); - mod += n.f2.accept(this, symt); - return mod; + public R visit(VarDeclaration n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + n.f2.accept(this, argu); + return _ret; } /** @@ -226,70 +194,55 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f11 -> ";" * f12 -> "}" */ - public String visit(MethodDeclaration n, SymbolTable symt) { - String id = n.f2.f0.tokenImage; - symt.setActive(TypeEnum.method, id); - this.tf.reset(); - String mod = ""; - - mod += n.f0.accept(this, symt); - n.f1.accept(this, symt); - n.f2.accept(this, symt); - mod += "func " + symt.getActive(TypeEnum.classname) + "_" + id + "(this"; - mod += n.f3.accept(this, symt); - String args = n.f4.accept(this, symt); - mod += String.format("%s)\n", args); - mod += n.f5.accept(this, symt); - mod += n.f6.accept(this, symt); - mod += n.f7.accept(this, symt); - mod += n.f8.accept(this, symt); - mod += n.f9.accept(this, symt); - n.f10.accept(this, symt); // FIXME - mod += n.f11.accept(this, symt); - mod += n.f12.accept(this, symt); - - mod += " ret\n\n"; - - - symt.removeActive(TypeEnum.method); - return mod; + public R visit(MethodDeclaration 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); + return _ret; } /** * f0 -> FormalParameter() * f1 -> ( FormalParameterRest() )* */ - public String visit(FormalParameterList n, SymbolTable symt) { - String mod = ""; - String arg = n.f0.accept(this, symt); - if (arg != null) - mod += " " + arg; - mod += n.f1.accept(this, symt); - return mod; + public R visit(FormalParameterList n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + return _ret; } /** * f0 -> Type() * f1 -> Identifier() */ - public String visit(FormalParameter n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - return mod; + public R visit(FormalParameter n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + return _ret; } /** * f0 -> "," * f1 -> FormalParameter() */ - public String visit(FormalParameterRest n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - String arg = n.f1.accept(this, symt); - if (arg != null) - mod += " " + arg; - return mod; + public R visit(FormalParameterRest n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + return _ret; } /** @@ -298,10 +251,10 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * | IntegerType() * | Identifier() */ - public String visit(Type n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - return mod; + public R visit(Type n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + return _ret; } /** @@ -309,30 +262,30 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f1 -> "[" * f2 -> "]" */ - public String visit(ArrayType n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - return mod; + public R visit(ArrayType n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + n.f2.accept(this, argu); + return _ret; } /** * f0 -> "boolean" */ - public String visit(BooleanType n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - return mod; + public R visit(BooleanType n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + return _ret; } /** * f0 -> "int" */ - public String visit(IntegerType n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt);; - return mod; + public R visit(IntegerType n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + return _ret; } /** @@ -343,10 +296,10 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * | WhileStatement() * | PrintStatement() */ - public String visit(Statement n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - return mod; + public R visit(Statement n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + return _ret; } /** @@ -354,12 +307,12 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f1 -> ( Statement() )* * f2 -> "}" */ - public String visit(Block n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - return mod; + public R visit(Block n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + n.f2.accept(this, argu); + return _ret; } /** @@ -368,15 +321,13 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f2 -> Expression() * f3 -> ";" */ - public String visit(AssignmentStatement n, SymbolTable symt) { - String mod = ""; - - String id = n.f0.accept(this, symt); - mod += String.format(" [%s] = ", this.tf.retrieveAlias(symt.getType(id))); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - mod += n.f3.accept(this, symt); - return mod; + public R visit(AssignmentStatement 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; } /** @@ -388,16 +339,16 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f5 -> Expression() * f6 -> ";" */ - public String visit(ArrayAssignmentStatement n, SymbolTable symt) { - String mod = ""; - n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - mod += n.f3.accept(this, symt); - mod += n.f4.accept(this, symt); - mod += n.f5.accept(this, symt); - mod += n.f6.accept(this, symt); - return mod; + public R visit(ArrayAssignmentStatement 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); + return _ret; } /** @@ -409,16 +360,16 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f5 -> "else" * f6 -> Statement() */ - public String visit(IfStatement n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - mod += n.f3.accept(this, symt); - mod += n.f4.accept(this, symt); - mod += n.f5.accept(this, symt); - mod += n.f6.accept(this, symt); - return mod; + public R visit(IfStatement 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); + return _ret; } /** @@ -428,14 +379,14 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f3 -> ")" * f4 -> Statement() */ - public String visit(WhileStatement n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - mod += n.f3.accept(this, symt); - mod += n.f4.accept(this, symt); - return mod; + public R visit(WhileStatement 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); + return _ret; } /** @@ -445,14 +396,14 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f3 -> ")" * f4 -> ";" */ - public String visit(PrintStatement n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - mod += n.f3.accept(this, symt); - mod += n.f4.accept(this, symt); - return mod; + public R visit(PrintStatement 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); + return _ret; } /** @@ -466,10 +417,10 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * | MessageSend() * | PrimaryExpression() */ - public String visit(Expression n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - return mod; + public R visit(Expression n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + return _ret; } /** @@ -477,12 +428,12 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f1 -> "&&" * f2 -> PrimaryExpression() */ - public String visit(AndExpression n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - return mod; + public R visit(AndExpression n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + n.f2.accept(this, argu); + return _ret; } /** @@ -490,12 +441,12 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f1 -> "<" * f2 -> PrimaryExpression() */ - public String visit(CompareExpression n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - return mod; + public R visit(CompareExpression n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + n.f2.accept(this, argu); + return _ret; } /** @@ -503,19 +454,12 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f1 -> "+" * f2 -> PrimaryExpression() */ - public String visit(PlusExpression n, SymbolTable symt) { - String mod = ""; - String oper1 = n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - String oper2 = n.f2.accept(this, symt); - TypeInstance tp1 = new TypeInstance("tp1", TypeEnum.ERROR); - - mod += String.format(" %s = AddS(%s %s)\n", - this.tf.addNewAlias(tp1), - oper1, - oper2); - - return mod; + public R visit(PlusExpression n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + n.f2.accept(this, argu); + return _ret; } /** @@ -523,12 +467,12 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f1 -> "-" * f2 -> PrimaryExpression() */ - public String visit(MinusExpression n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - return mod; + public R visit(MinusExpression n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + n.f2.accept(this, argu); + return _ret; } /** @@ -536,12 +480,12 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f1 -> "*" * f2 -> PrimaryExpression() */ - public String visit(TimesExpression n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - return mod; + public R visit(TimesExpression n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + n.f2.accept(this, argu); + return _ret; } /** @@ -550,13 +494,13 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f2 -> PrimaryExpression() * f3 -> "]" */ - public String visit(ArrayLookup n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - mod += n.f3.accept(this, symt); - return mod; + public R visit(ArrayLookup 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; } /** @@ -564,12 +508,12 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f1 -> "." * f2 -> "length" */ - public String visit(ArrayLength n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - return mod; + public R visit(ArrayLength n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + n.f2.accept(this, argu); + return _ret; } /** @@ -580,59 +524,37 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f4 -> ( ExpressionList() )? * f5 -> ")" */ - public String visit(MessageSend n, SymbolTable symt) { - String mod = ""; - String id = n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - String id2 = n.f2.accept(this, symt); - TypeInstance tp1 = new TypeInstance("tp1", TypeEnum.ERROR); // TypeFactory likes to know who it's renting to - TypeInstance tp2 = new TypeInstance("tp2", TypeEnum.ERROR); - - TypeInstance cur = symt.getType(id); - int mtdIndex = cur.getClassInstance() - .getMethods().indexOf(symt.getMethod(id2)) * 4; - - mod += String.format(" %s = [%s+%d]\n", - this.tf.addNewAlias(tp1), - this.tf.retrieveAlias(cur), - 0); - - mod += String.format(" %s = [%s+%d]\n", - this.tf.addNewAlias(tp2), - this.tf.retrieveAlias(tp1), - mtdIndex); - - mod += n.f3.accept(this, symt); - mod = n.f4.accept(this, symt); - mod += n.f5.accept(this, symt); - - mod += String.format(" call %s(%s)\n", - this.tf.retrieveAlias(tp2), - this.tf.retrieveAlias(cur)); - - return mod; + public R visit(MessageSend 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); + return _ret; } /** * f0 -> Expression() * f1 -> ( ExpressionRest() )* */ - public String visit(ExpressionList n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - return mod; + public R visit(ExpressionList n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + return _ret; } /** * f0 -> "," * f1 -> Expression() */ - public String visit(ExpressionRest n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - return mod; + public R visit(ExpressionRest n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + return _ret; } /** @@ -646,55 +568,55 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * | NotExpression() * | BracketExpression() */ - public String visit(PrimaryExpression n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - return mod; + public R visit(PrimaryExpression n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + return _ret; } /** * f0 -> <INTEGER_LITERAL> */ - public String visit(IntegerLiteral n, SymbolTable symt) { - String mod = ""; - mod += n.f0.tokenImage; - return mod; + public R visit(IntegerLiteral n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + return _ret; } /** * f0 -> "true" */ - public String visit(TrueLiteral n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - return mod; + public R visit(TrueLiteral n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + return _ret; } /** * f0 -> "false" */ - public String visit(FalseLiteral n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - return mod; + public R visit(FalseLiteral n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + return _ret; } /** * f0 -> <IDENTIFIER> */ - public String visit(Identifier n, SymbolTable symt) { - String mod = ""; - mod += n.f0.tokenImage; - return mod; + public R visit(Identifier n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + return _ret; } /** * f0 -> "this" */ - public String visit(ThisExpression n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - return mod; + public R visit(ThisExpression n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + return _ret; } /** @@ -704,14 +626,14 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f3 -> Expression() * f4 -> "]" */ - public String visit(ArrayAllocationExpression n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - mod += n.f3.accept(this, symt); - mod += n.f4.accept(this, symt); - return mod; + public R visit(ArrayAllocationExpression 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); + return _ret; } /** @@ -720,26 +642,24 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f2 -> "(" * f3 -> ")" */ - public String visit(AllocationExpression n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - String cls = n.f1.accept(this, symt); - mod += String.format(":functable_%s\n", cls); - - mod += n.f2.accept(this, symt); - mod += n.f3.accept(this, symt); - return mod; + public R visit(AllocationExpression 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 -> "!" * f1 -> Expression() */ - public String visit(NotExpression n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - return mod; + public R visit(NotExpression n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + return _ret; } /** @@ -747,12 +667,12 @@ public class VaporizeSimp extends GJDepthFirst<String,SymbolTable> { * f1 -> Expression() * f2 -> ")" */ - public String visit(BracketExpression n, SymbolTable symt) { - String mod = ""; - mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); - return mod; + public R visit(BracketExpression n, A argu) { + R _ret=null; + n.f0.accept(this, argu); + n.f1.accept(this, argu); + n.f2.accept(this, argu); + return _ret; } } |