From ff12bb1dd11c509fc7ac7529085df2d2407b0ece Mon Sep 17 00:00:00 2001 From: bd-912 Date: Fri, 26 Apr 2024 23:33:15 -0600 Subject: Add my test library --- .gitignore | 1 - heat/TypeCheckSimp.java | 1097 --------------------------- output/BinaryTree.java | 334 ++++++++ output/BinaryTree.vapor | 764 +++++++++++++++++++ output/BinaryTree.vaporm | 0 output/BubbleSort.java | 93 +++ output/BubbleSort.vapor | 223 ++++++ output/BubbleSort.vaporm | 0 output/Factorial.java | 16 + output/Factorial.vapor | 47 ++ output/Factorial.vaporm | 138 ++++ output/LinearSearch.java | 99 +++ output/LinearSearch.vapor | 188 +++++ output/LinearSearch.vaporm | 0 output/LinkedList.java | 278 +++++++ output/LinkedList.vapor | 556 ++++++++++++++ output/LinkedList.vaporm | 0 output/MoreThan4.java | 29 + output/MoreThan4.vapor | 70 ++ output/MoreThan4.vaporm | 0 output/QuickSort.java | 112 +++ output/QuickSort.vapor | 305 ++++++++ output/QuickSort.vaporm | 0 output/TreeVisitor.java | 374 +++++++++ output/TreeVisitor.vapor | 896 ++++++++++++++++++++++ output/TreeVisitor.vaporm | 0 output/ex29.java | 5 + output/ex29.vapor | 10 + output/ex29.vaporm | 42 + output/ex30.java | 11 + output/ex30.vapor | 17 + output/ex30.vaporm | 65 ++ output/ex31.java | 16 + output/ex31.vapor | 25 + output/ex31.vaporm | 90 +++ output/ex32.java | 14 + output/ex32.vapor | 29 + output/ex32.vaporm | 103 +++ output/ex33.java | 23 + output/ex33.vapor | 52 ++ output/ex33.vaporm | 167 ++++ output/ex34.java | 20 + output/ex34.vapor | 30 + output/ex34.vaporm | 100 +++ output/ex35.java | 11 + output/ex35.vapor | 26 + output/ex35.vaporm | 96 +++ output/ex36.java | 15 + output/ex36.vapor | 28 + output/ex36.vaporm | 98 +++ output/ex37.java | 20 + output/ex37.vapor | 40 + output/ex37.vaporm | 108 +++ output/ex38.java | 20 + output/ex38.vapor | 40 + output/ex38.vaporm | 108 +++ output/ex39.java | 12 + output/ex39.vapor | 27 + output/ex39.vaporm | 59 ++ output/ex40.java | 19 + output/ex40.vapor | 32 + output/ex40.vaporm | 102 +++ output/ex41.java | 25 + output/ex41.vapor | 54 ++ output/ex41.vaporm | 122 +++ output/ex42.vapor | 36 + output/ex42.vaporm | 0 output/ex43.java | 22 + output/ex43.vapor | 40 + output/ex43.vaporm | 108 +++ output/ex44.java | 16 + output/ex44.vapor | 31 + output/ex44.vaporm | 99 +++ output/ex45.java | 19 + output/ex45.vapor | 31 + output/ex45.vaporm | 0 output/ex46.java | 32 + output/ex46.vapor | 61 ++ output/ex46.vaporm | 190 +++++ output/ex47.java | 24 + output/ex47.vapor | 52 ++ output/ex47.vaporm | 0 output/ex48.java | 23 + output/ex48.vapor | 39 + output/ex48.vaporm | 146 ++++ output/ex49.java | 26 + output/ex49.vapor | 36 + output/ex49.vaporm | 120 +++ output/ex50.java | 35 + output/ex50.vapor | 52 ++ output/ex50.vaporm | 193 +++++ output/negative/ArrayEqualsBool-error.java | 381 ++++++++++ output/negative/ArrayEqualsClass-error.java | 380 ++++++++++ output/negative/AssignWrongType-error1.java | 378 +++++++++ output/negative/BadAdd-error1.java | 376 +++++++++ output/negative/BadAnd-error1.java | 376 +++++++++ output/negative/BadArrayAlloc-error1.java | 380 ++++++++++ output/negative/BadCompare-error1.java | 376 +++++++++ output/negative/BadIf-error1.java | 376 +++++++++ output/negative/BadLookup-error1.java | 382 ++++++++++ output/negative/BadLookup-error2.java | 382 ++++++++++ output/negative/BadMinus-error1.java | 378 +++++++++ output/negative/BadMul-error1.java | 380 ++++++++++ output/negative/BadPrint-error.java | 26 + output/negative/BadWhile-error1.java | 376 +++++++++ output/negative/BinaryTree-error.java | 334 ++++++++ output/negative/BubbleSort-error.java | 93 +++ output/negative/Factorial-error.java | 16 + output/negative/ImpossibleLength-error.java | 379 +++++++++ output/negative/IndexNonArray-error1.java | 377 +++++++++ output/negative/LinearSearch-error.java | 99 +++ output/negative/LinkedList-error.java | 278 +++++++ output/negative/MissingAssign-error1.java | 377 +++++++++ output/negative/MissingCall-error1.java | 29 + output/negative/MissingCall-error2.java | 112 +++ output/negative/MissingCall-error3.java | 377 +++++++++ output/negative/NotASubType-error1.java | 384 ++++++++++ output/negative/QuickSort-error.java | 112 +++ output/negative/TreeVisitor-error.java | 376 +++++++++ output/negative/WrongReturn-error1.java | 378 +++++++++ 120 files changed, 16502 insertions(+), 1098 deletions(-) delete mode 100644 heat/TypeCheckSimp.java create mode 100644 output/BinaryTree.java create mode 100644 output/BinaryTree.vapor create mode 100644 output/BinaryTree.vaporm create mode 100644 output/BubbleSort.java create mode 100644 output/BubbleSort.vapor create mode 100644 output/BubbleSort.vaporm create mode 100644 output/Factorial.java create mode 100644 output/Factorial.vapor create mode 100644 output/Factorial.vaporm create mode 100644 output/LinearSearch.java create mode 100644 output/LinearSearch.vapor create mode 100644 output/LinearSearch.vaporm create mode 100644 output/LinkedList.java create mode 100644 output/LinkedList.vapor create mode 100644 output/LinkedList.vaporm create mode 100644 output/MoreThan4.java create mode 100644 output/MoreThan4.vapor create mode 100644 output/MoreThan4.vaporm create mode 100644 output/QuickSort.java create mode 100644 output/QuickSort.vapor create mode 100644 output/QuickSort.vaporm create mode 100644 output/TreeVisitor.java create mode 100644 output/TreeVisitor.vapor create mode 100644 output/TreeVisitor.vaporm create mode 100644 output/ex29.java create mode 100644 output/ex29.vapor create mode 100644 output/ex29.vaporm create mode 100644 output/ex30.java create mode 100644 output/ex30.vapor create mode 100644 output/ex30.vaporm create mode 100644 output/ex31.java create mode 100644 output/ex31.vapor create mode 100644 output/ex31.vaporm create mode 100644 output/ex32.java create mode 100644 output/ex32.vapor create mode 100644 output/ex32.vaporm create mode 100644 output/ex33.java create mode 100644 output/ex33.vapor create mode 100644 output/ex33.vaporm create mode 100644 output/ex34.java create mode 100644 output/ex34.vapor create mode 100644 output/ex34.vaporm create mode 100644 output/ex35.java create mode 100644 output/ex35.vapor create mode 100644 output/ex35.vaporm create mode 100644 output/ex36.java create mode 100644 output/ex36.vapor create mode 100644 output/ex36.vaporm create mode 100644 output/ex37.java create mode 100644 output/ex37.vapor create mode 100644 output/ex37.vaporm create mode 100644 output/ex38.java create mode 100644 output/ex38.vapor create mode 100644 output/ex38.vaporm create mode 100644 output/ex39.java create mode 100644 output/ex39.vapor create mode 100644 output/ex39.vaporm create mode 100644 output/ex40.java create mode 100644 output/ex40.vapor create mode 100644 output/ex40.vaporm create mode 100644 output/ex41.java create mode 100644 output/ex41.vapor create mode 100644 output/ex41.vaporm create mode 100644 output/ex42.vapor create mode 100644 output/ex42.vaporm create mode 100644 output/ex43.java create mode 100644 output/ex43.vapor create mode 100644 output/ex43.vaporm create mode 100644 output/ex44.java create mode 100644 output/ex44.vapor create mode 100644 output/ex44.vaporm create mode 100644 output/ex45.java create mode 100644 output/ex45.vapor create mode 100644 output/ex45.vaporm create mode 100644 output/ex46.java create mode 100644 output/ex46.vapor create mode 100644 output/ex46.vaporm create mode 100644 output/ex47.java create mode 100644 output/ex47.vapor create mode 100644 output/ex47.vaporm create mode 100644 output/ex48.java create mode 100644 output/ex48.vapor create mode 100644 output/ex48.vaporm create mode 100644 output/ex49.java create mode 100644 output/ex49.vapor create mode 100644 output/ex49.vaporm create mode 100644 output/ex50.java create mode 100644 output/ex50.vapor create mode 100644 output/ex50.vaporm create mode 100644 output/negative/ArrayEqualsBool-error.java create mode 100644 output/negative/ArrayEqualsClass-error.java create mode 100644 output/negative/AssignWrongType-error1.java create mode 100644 output/negative/BadAdd-error1.java create mode 100644 output/negative/BadAnd-error1.java create mode 100644 output/negative/BadArrayAlloc-error1.java create mode 100644 output/negative/BadCompare-error1.java create mode 100644 output/negative/BadIf-error1.java create mode 100644 output/negative/BadLookup-error1.java create mode 100644 output/negative/BadLookup-error2.java create mode 100644 output/negative/BadMinus-error1.java create mode 100644 output/negative/BadMul-error1.java create mode 100644 output/negative/BadPrint-error.java create mode 100644 output/negative/BadWhile-error1.java create mode 100644 output/negative/BinaryTree-error.java create mode 100644 output/negative/BubbleSort-error.java create mode 100644 output/negative/Factorial-error.java create mode 100644 output/negative/ImpossibleLength-error.java create mode 100644 output/negative/IndexNonArray-error1.java create mode 100644 output/negative/LinearSearch-error.java create mode 100644 output/negative/LinkedList-error.java create mode 100644 output/negative/MissingAssign-error1.java create mode 100644 output/negative/MissingCall-error1.java create mode 100644 output/negative/MissingCall-error2.java create mode 100644 output/negative/MissingCall-error3.java create mode 100644 output/negative/NotASubType-error1.java create mode 100644 output/negative/QuickSort-error.java create mode 100644 output/negative/TreeVisitor-error.java create mode 100644 output/negative/WrongReturn-error1.java diff --git a/.gitignore b/.gitignore index 6282035..c9ee4cc 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,3 @@ /*.dot /test.vaporm /cs132/ -/output/ diff --git a/heat/TypeCheckSimp.java b/heat/TypeCheckSimp.java deleted file mode 100644 index 99fa187..0000000 --- a/heat/TypeCheckSimp.java +++ /dev/null @@ -1,1097 +0,0 @@ -package typecheck; - -import syntaxtree.*; -import visitor.*; -import st.*; -import misc.*; -import java.util.*; - -/** - * Provides default methods which visit each node in the tree in depth-first - * order. Your visitors may extend this class. - */ -public class TypeCheckSimp extends GJDepthFirst { - - private int offset; - - private void printNode(Node n, SymbolTable symt, boolean enter, TypeEnum consensus) { - String str = ""; - for (int i=0; i < this.offset; ++i) - str += "."; - if (enter) - str += "Visiting "; - else - str += "Leaving "; - str += "n.getClass().getSimpleName()"; - if (!enter) { - if (consensus == TypeEnum.ERROR) - str += " did not type check."; - else - str += String.format(" found type %s", consensus); - } - MinimalLogger.info(str); - } - - public TypeInstance visit(NodeList n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = new TypeInstance(null, TypeEnum.CHECK); - int _count=0; - for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { - TypeInstance node = e.nextElement().accept(this,symt); - e.nextElement().accept(this,symt); - if (node.getType() == TypeEnum.ERROR) - ret = node; - _count++; - } - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - public TypeInstance visit(NodeListOptional n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret; - if ( n.present() ) { - ret = new TypeInstance(null, TypeEnum.CHECK); - int _count=0; - for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { - TypeInstance node = e.nextElement().accept(this,symt); - if (node.getType() == TypeEnum.ERROR) - ret = node; - _count++; - } - } - else - ret = new TypeInstance(null, TypeEnum.CHECK); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME - public TypeInstance visit(NodeOptional n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret; - - if ( n.present() ) - ret = n.node.accept(this,symt); - else - ret = new TypeInstance(null, TypeEnum.CHECK); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - public TypeInstance visit(NodeSequence n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = new TypeInstance(null, TypeEnum.CHECK); - int _count=0; - for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { - TypeInstance node = e.nextElement().accept(this,symt); - if (node.getType() == TypeEnum.ERROR) - ret = node; - _count++; - } - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - public TypeInstance visit(NodeToken n, SymbolTable symt) { - // A fixed string token. '⌣' - String str = ""; - for (int i=0; i < this.offset; ++i) - str += "."; - MinimalLogger.info(String.format("%sLeaving %s => %s", - str, - n.getClass().getSimpleName(), - n.toString())); - return null; - } - - // - // User-generated visitor methods below - // - - /** - * f0 -> MainClass() - * f1 -> ( TypeDeclaration() )* - * f2 -> - */ - public TypeInstance visit(Goal n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - n.f1.accept(this, symt); - n.f2.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * 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 TypeInstance visit(MainClass n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance name = n.f1.accept(this, symt); - n.f2.accept(this, symt); - n.f3.accept(this, symt); - n.f4.accept(this, symt); - n.f5.accept(this, symt); - n.f6.accept(this, symt); - n.f7.accept(this, symt); - n.f8.accept(this, symt); - n.f9.accept(this, symt); - n.f10.accept(this, symt); - // 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); - TypeInstance stmt = n.f15.accept(this, symt); - n.f16.accept(this, symt); - n.f17.accept(this, symt); - - this.printNode(n, symt, false, stmt.getType()); - --this.offset; - return stmt; - } - - /** - * f0 -> ClassDeclaration() - * | ClassExtendsDeclaration() - */ - public TypeInstance visit(TypeDeclaration n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "class" - * f1 -> Identifier() - * f2 -> "{" - * f3 -> ( VarDeclaration() )* - * f4 -> ( MethodDeclaration() )* - * f5 -> "}" - */ - public TypeInstance visit(ClassDeclaration n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance id = n.f1.accept(this, symt); - n.f2.accept(this, symt); - TypeInstance vars = n.f3.accept(this, symt); - TypeInstance mtds = n.f4.accept(this, symt); - n.f5.accept(this, symt); - TypeInstance ret = (vars.hasChecked() && - mtds.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "class" - * f1 -> Identifier() - * f2 -> "extends" - * f3 -> Identifier() - * f4 -> "{" - * f5 -> ( VarDeclaration() )* - * f6 -> ( MethodDeclaration() )* - * f7 -> "}" - */ - public TypeInstance visit(ClassExtendsDeclaration n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance id = n.f1.accept(this, symt); - n.f2.accept(this, symt); - TypeInstance ext = n.f3.accept(this, symt); - n.f4.accept(this, symt); - TypeInstance vars = n.f5.accept(this, symt); - TypeInstance mehs = n.f6.accept(this, symt); - n.f7.accept(this, symt); - TypeInstance ret = (id.getType() == TypeEnum.classname && - vars.hasChecked() && - mehs.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME (this may be ST-only) - /** - * f0 -> Type() - * f1 -> Identifier() - * f2 -> ";" - */ - public TypeInstance visit(VarDeclaration n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - n.f1.accept(this, symt); - n.f2.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME - /** - * [7.5]: Parameters identifiers are distinct, local vars are distinct, - * (vars in scope?), all statements type check - * - * f0 -> "public" - * f1 -> Type() - * f2 -> Identifier() - * f3 -> "(" - * f4 -> ( FormalParameterList() )? - * f5 -> ")" - * f6 -> "{" - * f7 -> ( VarDeclaration() )* - * f8 -> ( Statement() )* - * f9 -> "return" - * f10 -> Expression() - * f11 -> ";" - * f12 -> "}" - */ - public TypeInstance visit(MethodDeclaration n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - MethodInstance self = symt.getMethod(n.f2.f0.tokenImage); - n.f0.accept(this, symt); - TypeInstance ret_type = n.f1.accept(this, symt); - n.f2.accept(this, symt); - n.f3.accept(this, symt); - n.f4.accept(this, symt); - n.f5.accept(this, symt); - n.f6.accept(this, symt); - n.f7.accept(this, symt); - TypeInstance stmt = n.f8.accept(this, symt); - n.f9.accept(this, symt); - TypeInstance rtrn = n.f10.accept(this, symt); - n.f11.accept(this, symt); - n.f12.accept(this, symt); - TypeInstance ret = (self.getReturn() == rtrn.getType() && // FIXME I am checking that the rtrn matches the method's declared return type. Is this in the document? - stmt.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> FormalParameter() - * f1 -> ( FormalParameterRest() )* - */ - public TypeInstance visit(FormalParameterList n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance _ret=null; - TypeInstance para1 = n.f0.accept(this, symt); - TypeInstance parar = n.f1.accept(this, symt); - TypeInstance ret = (para1.hasChecked() && - parar.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> Type() - * f1 -> Identifier() - */ - public TypeInstance visit(FormalParameter n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - n.f1.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "," - * f1 -> FormalParameter() - */ - public TypeInstance visit(FormalParameterRest n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = n.f1.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> ArrayType() - * | BooleanType() - * | IntegerType() - * | Identifier() - */ - public TypeInstance visit(Type n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "int" - * f1 -> "[" - * f2 -> "]" - */ - public TypeInstance visit(ArrayType n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = new TypeInstance(null, TypeEnum.intarray); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "boolean" - */ - public TypeInstance visit(BooleanType n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = new TypeInstance(null, TypeEnum.bool); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "int" - */ - public TypeInstance visit(IntegerType n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = new TypeInstance(null, TypeEnum.integer); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> Block() - * | AssignmentStatement() - * | ArrayAssignmentStatement() - * | IfStatement() - * | WhileStatement() - * | PrintStatement() - */ - public TypeInstance visit(Statement n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "{" - * f1 -> ( Statement() )* - * f2 -> "}" - */ - public TypeInstance visit(Block n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = n.f1.accept(this, symt); - n.f2.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME FIXME FIXME - // Given we only have a few types, what is a subtype of what? - /** - * [23]: Expression is a subtype of identifier, and e typechecks* - * - * f0 -> Identifier() - * f1 -> "=" - * f2 -> Expression() - * f3 -> ";" - */ - public TypeInstance visit(AssignmentStatement n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance lhs = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance rhs = n.f2.accept(this, symt); - n.f3.accept(this, symt); - TypeInstance ret = (lhs.sameType(rhs)) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME (this may be done) - /** - * [24]: Identifier is an integer array, expressions are both integers - * - * f0 -> Identifier() - * f1 -> "[" - * f2 -> Expression() - * f3 -> "]" - * f4 -> "=" - * f5 -> Expression() - * f6 -> ";" - */ - public TypeInstance visit(ArrayAssignmentStatement n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance id = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance index = n.f2.accept(this, symt); - n.f3.accept(this, symt); - n.f4.accept(this, symt); - TypeInstance value = n.f5.accept(this, symt); - n.f6.accept(this, symt); - TypeInstance ret = (id.getType() == TypeEnum.intarray && - index.getType() == TypeEnum.integer && - value.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [25]: Expression is a bool, both statements type-check - * - * f0 -> "if" - * f1 -> "(" - * f2 -> Expression() - * f3 -> ")" - * f4 -> Statement() - * f5 -> "else" - * f6 -> Statement() - */ - public TypeInstance visit(IfStatement n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance expr = n.f2.accept(this, symt); - n.f3.accept(this, symt); - TypeInstance stmt1 = n.f4.accept(this, symt); - n.f5.accept(this, symt); - TypeInstance stmt2 = n.f6.accept(this, symt); - TypeInstance ret = (expr.getType() == TypeEnum.bool && - stmt1.getType() == stmt2.getType() && - stmt1.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - - } - - /** - * DONE [26]: Expression is a bool, statement type-checks - * - * f0 -> "while" - * f1 -> "(" - * f2 -> Expression() - * f3 -> ")" - * f4 -> Statement() - */ - public TypeInstance visit(WhileStatement n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance expr = n.f2.accept(this, symt); - n.f3.accept(this, symt); - TypeInstance stmt = n.f4.accept(this, symt); - TypeInstance ret = (expr.getType() == TypeEnum.bool && - stmt.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [27]: Expression is an integer - * - * f0 -> "System.out.println" - * f1 -> "(" - * f2 -> Expression() - * f3 -> ")" - * f4 -> ";" - */ - public TypeInstance visit(PrintStatement n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance ret = n.f2.accept(this, symt); - n.f3.accept(this, symt); - n.f4.accept(this, symt); - ret = (ret.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> AndExpression() - * | CompareExpression() - * | PlusExpression() - * | MinusExpression() - * | TimesExpression() - * | ArrayLookup() - * | ArrayLength() - * | MessageSend() - * | PrimaryExpression() - */ - public TypeInstance visit(Expression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [28]: If expressions are both booleans, return is a boolean - * - * f0 -> PrimaryExpression() - * f1 -> "&&" - * f2 -> PrimaryExpression() - */ - public TypeInstance visit(AndExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance oper1 = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance oper2 = n.f2.accept(this, symt); - TypeInstance ret = (oper1.getType() == TypeEnum.bool && - oper2.getType() == TypeEnum.bool) ? - new TypeInstance(null, TypeEnum.bool) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [29]: If expressions are both integers, return is a boolean - * - * f0 -> PrimaryExpression() - * f1 -> "<" - * f2 -> PrimaryExpression() - */ - public TypeInstance visit(CompareExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance oper1 = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance oper2 = n.f2.accept(this, symt); - TypeInstance ret = (oper1.getType() == TypeEnum.integer && - oper2.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.bool) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [30]: If expressions are both integers, return is an integer - * - * f0 -> PrimaryExpression() - * f1 -> "+" - * f2 -> PrimaryExpression() - */ - public TypeInstance visit(PlusExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance oper1 = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance oper2 = n.f2.accept(this, symt); - TypeInstance ret = (oper1.getType() == TypeEnum.integer && - oper2.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.integer) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [31]: If expressions are both integers, return is an integer - * - * f0 -> PrimaryExpression() - * f1 -> "-" - * f2 -> PrimaryExpression() - */ - public TypeInstance visit(MinusExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance oper1 = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance oper2 = n.f2.accept(this, symt); - TypeInstance ret = (oper1.getType() == TypeEnum.integer && - oper2.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.integer) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [32]: If expressions are both integers, return is an integer - * - * f0 -> PrimaryExpression() - * f1 -> "*" - * f2 -> PrimaryExpression() - */ - public TypeInstance visit(TimesExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance oper1 = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance oper2 = n.f2.accept(this, symt); - TypeInstance ret = (oper1.getType() == TypeEnum.integer && - oper2.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.integer) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [33]: If expr1 is an integer array and expr2 is an int, - * return is an int - * - * f0 -> PrimaryExpression() - * f1 -> "[" - * f2 -> PrimaryExpression() - * f3 -> "]" - */ - public TypeInstance visit(ArrayLookup n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance array = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance index = n.f2.accept(this, symt); - n.f3.accept(this, symt); - TypeInstance ret = (array.getType() == TypeEnum.intarray && - index.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.integer) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [34]: If expr1 is an integer array, return is an int - * - * f0 -> PrimaryExpression() - * f1 -> "." - * f2 -> "length" - */ - public TypeInstance visit(ArrayLength n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - n.f1.accept(this, symt); - n.f2.accept(this, symt); - ret = (ret.getType() == TypeEnum.intarray) ? new TypeInstance(null, TypeEnum.integer) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME FIXME FIXME - /** - * [35]: PrimaryExpr must be a classname, id must be a method name, expressionlist must be correct? - * - * f0 -> PrimaryExpression() - * f1 -> "." - * f2 -> Identifier() - * f3 -> "(" - * f4 -> ( ExpressionList() )? - * f5 -> ")" - */ - public TypeInstance visit(MessageSend n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - // this MUST be an instance of a class! - TypeInstance t = n.f0.accept(this, symt); - ClassInstance c = t.getClassInstance(); - n.f1.accept(this, symt); - n.f2.accept(this, symt); - MethodInstance m = symt.getMethod(n.f2.f0.tokenImage); - n.f3.accept(this, symt); - n.f4.accept(this, symt); - n.f5.accept(this, symt); - --this.offset; - return (true) ? - new TypeInstance(null, m.getReturn()) : - new TypeInstance(null, TypeEnum.ERROR); - } - - // FIXME - /** - * f0 -> Expression() - * f1 -> ( ExpressionRest() )* - */ - public TypeInstance visit(ExpressionList n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance expr1 = n.f0.accept(this, symt); - TypeInstance exprr = n.f1.accept(this, symt); - TypeInstance ret = (expr1.hasChecked() && - exprr.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "," - * f1 -> Expression() - */ - public TypeInstance visit(ExpressionRest n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = n.f1.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> IntegerLiteral() - * | TrueLiteral() - * | FalseLiteral() - * | Identifier() - * | ThisExpression() - * | ArrayAllocationExpression() - * | AllocationExpression() - * | NotExpression() - * | BracketExpression() - */ - public TypeInstance visit(PrimaryExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [36]: return is an int - * - * - * f0 -> - */ - public TypeInstance visit(IntegerLiteral n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - this.printNode(n, symt, false, TypeEnum.integer); - --this.offset; - return new TypeInstance(null, TypeEnum.integer); - } - - /** - * DONE [37]: return is a bool - * - * f0 -> "true" - */ - public TypeInstance visit(TrueLiteral n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - this.printNode(n, symt, false, TypeEnum.bool); - --this.offset; - return new TypeInstance(null, TypeEnum.bool); - } - - /** - * DONE [38]: return is a bool - * - * f0 -> "false" - */ - public TypeInstance visit(FalseLiteral n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - this.printNode(n, symt, false, TypeEnum.bool); - --this.offset; - return new TypeInstance(null, TypeEnum.bool); - } - - // FIXME - /** - * [39]: id is a symbol in the current domain, return is id's type - * - * f0 -> - */ - public TypeInstance visit(Identifier n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance type; - TypeInstance ret; - ClassInstance cls; - if ((cls = symt.getClass(n.f0.tokenImage)) != null) { - // covers "anonymous" instance - ret = new TypeInstance(cls.getName(), - TypeEnum.classname); - ret.addClassInstance(cls); - } else { - if ((type = symt.getType(n.f0.tokenImage)) != null) { - ret = new TypeInstance(type.getName(), - type.getType()); - ret.addClassInstance(type.getClassInstance()); - } else - ret = new TypeInstance(null, TypeEnum.ERROR); - } - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME FIXME FIXME - /** - * [40]: method exists? but where is the token? - * - * f0 -> "this" - */ - public TypeInstance visit(ThisExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = new TypeInstance(null, TypeEnum.CHECK); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [41]: if expression is an integer, return is an int array - * - * f0 -> "new" - * f1 -> "int" - * f2 -> "[" - * f3 -> Expression() - * f4 -> "]" - */ - public TypeInstance visit(ArrayAllocationExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - n.f1.accept(this, symt); - n.f2.accept(this, symt); - TypeInstance ret = n.f3.accept(this, symt); - n.f4.accept(this, symt); - ret = (ret.getType() == TypeEnum.integer) ? new TypeInstance(null, TypeEnum.intarray) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME - /** - * [42]: - * - * f0 -> "new" - * f1 -> Identifier() - * f2 -> "(" - * f3 -> ")" - */ - public TypeInstance visit(AllocationExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = n.f1.accept(this, symt); - n.f2.accept(this, symt); - n.f3.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * [43]: if expression is a boolean, return is a boolean - * - * f0 -> "!" - * f1 -> Expression() - */ - public TypeInstance visit(NotExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = n.f1.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return (ret.getType() == TypeEnum.bool) ? ret : new TypeInstance(null, TypeEnum.ERROR); - } - - /** - * [44]: if e is a type, return is that same type - * - * f0 -> "(" - * f1 -> Expression() - * f2 -> ")" - */ - public TypeInstance visit(BracketExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = n.f1.accept(this, symt); - n.f2.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - -} diff --git a/output/BinaryTree.java b/output/BinaryTree.java new file mode 100644 index 0000000..18d1464 --- /dev/null +++ b/output/BinaryTree.java @@ -0,0 +1,334 @@ +class BinaryTree{ + public static void main(String[] a){ + System.out.println(new BT().Start()); + } +} + + +// This class invokes the methods to create a tree, +// insert, delete and serach for elements on it +class BT { + + public int Start(){ + Tree root ; + boolean ntb ; + int nti ; + + root = new Tree(); + ntb = root.Init(16); + ntb = root.Print(); + System.out.println(100000000); + ntb = root.Insert(8) ; + ntb = root.Print(); + ntb = root.Insert(24) ; + ntb = root.Insert(4) ; + ntb = root.Insert(12) ; + ntb = root.Insert(20) ; + ntb = root.Insert(28) ; + ntb = root.Insert(14) ; + ntb = root.Print(); + System.out.println(root.Search(24)); + System.out.println(root.Search(12)); + System.out.println(root.Search(16)); + System.out.println(root.Search(50)); + System.out.println(root.Search(12)); + ntb = root.Delete(12); + ntb = root.Print(); + System.out.println(root.Search(12)); + + return 0 ; + } + +} + +class Tree{ + Tree left ; + Tree right; + int key ; + boolean has_left ; + boolean has_right ; + Tree my_null ; + + // Initialize a node with a key value and no children + public boolean Init(int v_key){ + key = v_key ; + has_left = false ; + has_right = false ; + return true ; + } + + // Update the right child with rn + public boolean SetRight(Tree rn){ + right = rn ; + return true ; + } + + // Update the left child with ln + public boolean SetLeft(Tree ln){ + left = ln ; + return true ; + } + + public Tree GetRight(){ + return right ; + } + + public Tree GetLeft(){ + return left; + } + + public int GetKey(){ + return key ; + } + + public boolean SetKey(int v_key){ + key = v_key ; + return true ; + } + + public boolean GetHas_Right(){ + return has_right ; + } + + public boolean GetHas_Left(){ + return has_left ; + } + + public boolean SetHas_Left(boolean val){ + has_left = val ; + return true ; + } + + public boolean SetHas_Right(boolean val){ + has_right = val ; + return true ; + } + + // This method compares two integers and + // returns true if they are equal and false + // otherwise + public boolean Compare(int num1 , int num2){ + boolean ntb ; + int nti ; + + ntb = false ; + nti = num2 + 1 ; + if (num1 < num2) ntb = false ; + else if (!(num1 < nti)) ntb = false ; + else ntb = true ; + return ntb ; + } + + + // Insert a new element in the tree + public boolean Insert(int v_key){ + Tree new_node ; + boolean ntb ; + boolean cont ; + int key_aux ; + Tree current_node ; + + new_node = new Tree(); + ntb = new_node.Init(v_key) ; + current_node = this ; + cont = true ; + while (cont){ + key_aux = current_node.GetKey(); + if (v_key < key_aux){ + if (current_node.GetHas_Left()) + current_node = current_node.GetLeft() ; + else { + cont = false ; + ntb = current_node.SetHas_Left(true); + ntb = current_node.SetLeft(new_node); + } + } + else{ + if (current_node.GetHas_Right()) + current_node = current_node.GetRight() ; + else { + cont = false ; + ntb = current_node.SetHas_Right(true); + ntb = current_node.SetRight(new_node); + } + } + } + return true ; + } + + + // Delete an element from the tree + public boolean Delete(int v_key){ + Tree current_node ; + Tree parent_node ; + boolean cont ; + boolean found ; + boolean is_root ; + int key_aux ; + boolean ntb ; + + current_node = this ; + parent_node = this ; + cont = true ; + found = false ; + is_root = true ; + while (cont){ + key_aux = current_node.GetKey(); + if (v_key < key_aux) + if (current_node.GetHas_Left()){ + parent_node = current_node ; + current_node = current_node.GetLeft() ; + } + else cont = false ; + else + if (key_aux < v_key) + if (current_node.GetHas_Right()){ + parent_node = current_node ; + current_node = current_node.GetRight() ; + } + else cont = false ; + else { + if (is_root) + if ((!current_node.GetHas_Right()) && + (!current_node.GetHas_Left()) ) + ntb = true ; + else + ntb = this.Remove(parent_node,current_node); + else ntb = this.Remove(parent_node,current_node); + found = true ; + cont = false ; + } + is_root = false ; + } + return found ; + } + + + // Check if the element to be removed will use the + // righ or left subtree if one exists + public boolean Remove(Tree p_node, Tree c_node){ + boolean ntb ; + int auxkey1 ; + int auxkey2 ; + + if (c_node.GetHas_Left()) + ntb = this.RemoveLeft(p_node,c_node) ; + else + if (c_node.GetHas_Right()) + ntb = this.RemoveRight(p_node,c_node) ; + else { + auxkey1 = c_node.GetKey(); + //auxtree01 = p_node.GetLeft() ; + //auxkey2 = auxtree01.GetKey() ; + auxkey2 = (p_node.GetLeft()).GetKey() ; + if (this.Compare(auxkey1,auxkey2)) { + ntb = p_node.SetLeft(my_null); + ntb = p_node.SetHas_Left(false); + } + else { + ntb = p_node.SetRight(my_null); + ntb = p_node.SetHas_Right(false); + } + } + return true ; + } + + + // Copy the child key to the parent until a leaf is + // found and remove the leaf. This is done with the + // right subtree + public boolean RemoveRight(Tree p_node, Tree c_node){ + boolean ntb ; + + while (c_node.GetHas_Right()){ + //auxtree01 = c_node.GetRight() ; + //auxint02 = auxtree01.GetKey(); + //ntb = c_node.SetKey(auxint02); + ntb = c_node.SetKey((c_node.GetRight()).GetKey()); + p_node = c_node ; + c_node = c_node.GetRight() ; + } + ntb = p_node.SetRight(my_null); + ntb = p_node.SetHas_Right(false); + return true ; + } + + + // Copy the child key to the parent until a leaf is + // found and remove the leaf. This is done with the + // left subtree + public boolean RemoveLeft(Tree p_node, Tree c_node){ + boolean ntb ; + + while (c_node.GetHas_Left()){ + //auxtree01 = c_node.GetLeft() ; + //auxint02 = auxtree01.GetKey(); + //ntb = c_node.SetKey(auxint02); + ntb = c_node.SetKey((c_node.GetLeft()).GetKey()); + p_node = c_node ; + c_node = c_node.GetLeft() ; + } + ntb = p_node.SetLeft(my_null); + ntb = p_node.SetHas_Left(false); + return true ; + } + + // Search for an elemnt in the tree + public int Search(int v_key){ + boolean cont ; + int ifound ; + Tree current_node; + int key_aux ; + + current_node = this ; + cont = true ; + ifound = 0 ; + while (cont){ + key_aux = current_node.GetKey(); + if (v_key < key_aux) + if (current_node.GetHas_Left()) + current_node = current_node.GetLeft() ; + else cont = false ; + else + if (key_aux < v_key) + if (current_node.GetHas_Right()) + current_node = current_node.GetRight() ; + else cont = false ; + else { + ifound = 1 ; + cont = false ; + } + } + return ifound ; + } + + // Invoke the method to really print the tree elements + public boolean Print(){ + Tree current_node; + boolean ntb ; + + current_node = this ; + ntb = this.RecPrint(current_node); + return true ; + } + + // Print the elements of the tree + public boolean RecPrint(Tree node){ + boolean ntb ; + + if (node.GetHas_Left()){ + //auxtree01 = node.GetLeft() ; + //ntb = this.RecPrint(auxtree01); + ntb = this.RecPrint(node.GetLeft()); + } else ntb = true ; + System.out.println(node.GetKey()); + if (node.GetHas_Right()){ + //auxtree01 = node.GetRight() ; + //ntb = this.RecPrint(auxtree01); + ntb = this.RecPrint(node.GetRight()); + } else ntb = true ; + return true ; + } + +} + diff --git a/output/BinaryTree.vapor b/output/BinaryTree.vapor new file mode 100644 index 0000000..60719bf --- /dev/null +++ b/output/BinaryTree.vapor @@ -0,0 +1,764 @@ +func Main() + t.3 = HeapAllocZ(4) + [t.3+0] = :functable_BT + t.4 = t.3 + t.5 = [t.4+0] + t.6 = [t.5+0] + t.2 = call t.6(t.4 ) + t.7 = t.2 + PrintIntS(t.7) + ret + +const functable_BT + :BT_Start + +func BT_Start(this ) + t.2 = HeapAllocZ(104) + [t.2+0] = :functable_Tree + t.1 = t.2 + t.1 = t.1 + t.5 = [t.1+0] + t.6 = [t.5+0] + t.7 = 16 + t.4 = call t.6(t.1 t.7) + t.3 = t.4 + t.1 = t.1 + t.9 = [t.1+0] + t.10 = [t.9+72] + t.8 = call t.10(t.1 ) + t.3 = t.8 + t.11 = 100000000 + PrintIntS(t.11) + t.1 = t.1 + t.13 = [t.1+0] + t.14 = [t.13+48] + t.15 = 8 + t.12 = call t.14(t.1 t.15) + t.3 = t.12 + t.1 = t.1 + t.17 = [t.1+0] + t.18 = [t.17+72] + t.16 = call t.18(t.1 ) + t.3 = t.16 + t.1 = t.1 + t.20 = [t.1+0] + t.21 = [t.20+48] + t.22 = 24 + t.19 = call t.21(t.1 t.22) + t.3 = t.19 + t.1 = t.1 + t.24 = [t.1+0] + t.25 = [t.24+48] + t.26 = 4 + t.23 = call t.25(t.1 t.26) + t.3 = t.23 + t.1 = t.1 + t.28 = [t.1+0] + t.29 = [t.28+48] + t.30 = 12 + t.27 = call t.29(t.1 t.30) + t.3 = t.27 + t.1 = t.1 + t.32 = [t.1+0] + t.33 = [t.32+48] + t.34 = 20 + t.31 = call t.33(t.1 t.34) + t.3 = t.31 + t.1 = t.1 + t.36 = [t.1+0] + t.37 = [t.36+48] + t.38 = 28 + t.35 = call t.37(t.1 t.38) + t.3 = t.35 + t.1 = t.1 + t.40 = [t.1+0] + t.41 = [t.40+48] + t.42 = 14 + t.39 = call t.41(t.1 t.42) + t.3 = t.39 + t.1 = t.1 + t.44 = [t.1+0] + t.45 = [t.44+72] + t.43 = call t.45(t.1 ) + t.3 = t.43 + t.1 = t.1 + t.47 = [t.1+0] + t.48 = [t.47+68] + t.49 = 24 + t.46 = call t.48(t.1 t.49) + t.50 = t.46 + PrintIntS(t.50) + t.1 = t.1 + t.52 = [t.1+0] + t.53 = [t.52+68] + t.54 = 12 + t.51 = call t.53(t.1 t.54) + t.55 = t.51 + PrintIntS(t.55) + t.1 = t.1 + t.57 = [t.1+0] + t.58 = [t.57+68] + t.59 = 16 + t.56 = call t.58(t.1 t.59) + t.60 = t.56 + PrintIntS(t.60) + t.1 = t.1 + t.62 = [t.1+0] + t.63 = [t.62+68] + t.64 = 50 + t.61 = call t.63(t.1 t.64) + t.65 = t.61 + PrintIntS(t.65) + t.1 = t.1 + t.67 = [t.1+0] + t.68 = [t.67+68] + t.69 = 12 + t.66 = call t.68(t.1 t.69) + t.70 = t.66 + PrintIntS(t.70) + t.1 = t.1 + t.72 = [t.1+0] + t.73 = [t.72+52] + t.74 = 12 + t.71 = call t.73(t.1 t.74) + t.3 = t.71 + t.1 = t.1 + t.76 = [t.1+0] + t.77 = [t.76+72] + t.75 = call t.77(t.1 ) + t.3 = t.75 + t.1 = t.1 + t.79 = [t.1+0] + t.80 = [t.79+68] + t.81 = 12 + t.78 = call t.80(t.1 t.81) + t.82 = t.78 + PrintIntS(t.82) + t.83 = 0 + ret t.83 + +const functable_Tree + :Tree_Init + :Tree_SetRight + :Tree_SetLeft + :Tree_GetRight + :Tree_GetLeft + :Tree_GetKey + :Tree_SetKey + :Tree_GetHas_Right + :Tree_GetHas_Left + :Tree_SetHas_Left + :Tree_SetHas_Right + :Tree_Compare + :Tree_Insert + :Tree_Delete + :Tree_Remove + :Tree_RemoveRight + :Tree_RemoveLeft + :Tree_Search + :Tree_Print + :Tree_RecPrint + +func Tree_Init(this t.0 ) + [this+88] = t.0 + [this+92] = 0 + [this+96] = 0 + t.1 = 1 + ret t.1 + +func Tree_SetRight(this t.0 ) + [this+84] = t.0 + t.1 = 1 + ret t.1 + +func Tree_SetLeft(this t.0 ) + [this+80] = t.0 + t.1 = 1 + ret t.1 + +func Tree_GetRight(this ) + t.0 = [this+84] + ret t.0 + +func Tree_GetLeft(this ) + t.0 = [this+80] + ret t.0 + +func Tree_GetKey(this ) + t.0 = [this+88] + ret t.0 + +func Tree_SetKey(this t.0 ) + [this+88] = t.0 + t.1 = 1 + ret t.1 + +func Tree_GetHas_Right(this ) + t.0 = [this+96] + ret t.0 + +func Tree_GetHas_Left(this ) + t.0 = [this+92] + ret t.0 + +func Tree_SetHas_Left(this t.0 ) + [this+92] = t.0 + t.1 = 1 + ret t.1 + +func Tree_SetHas_Right(this t.0 ) + [this+96] = t.0 + t.1 = 1 + ret t.1 + +func Tree_Compare(this t.0 t.1 ) + t.2 = 0 + t.5 = t.1 + t.6 = 1 + t.4 = Add(t.5 t.6) + t.3 = t.4 + t.8 = t.0 + t.9 = t.1 + t.7 = LtS(t.8 t.9) + t.10 = t.7 + if0 t.10 goto :if100_else +if100_body: + t.2 = 0 + goto :if100_end +if100_else: + t.13 = t.0 + t.14 = t.3 + t.12 = LtS(t.13 t.14) + t.11 = Eq(t.12 0) + t.15 = t.11 + if0 t.15 goto :if104_else +if104_body: + t.2 = 0 + goto :if104_end +if104_else: + t.2 = 1 +if104_end: +if100_end: + t.16 = t.2 + ret t.16 + +func Tree_Insert(this t.0 ) + t.3 = HeapAllocZ(104) + [t.3+0] = :functable_Tree + t.2 = t.3 + t.2 = t.2 + t.6 = [t.2+0] + t.7 = [t.6+0] + t.8 = t.0 + t.5 = call t.7(t.2 t.8) + t.4 = t.5 + t.9 = this + t.10 = 1 +while115_test: + t.11 = t.10 + if0 t.11 goto :while115_end +while115_body: + t.9 = t.9 + t.14 = [t.9+0] + t.15 = [t.14+20] + t.13 = call t.15(t.9 ) + t.12 = t.13 + t.17 = t.0 + t.18 = t.12 + t.16 = LtS(t.17 t.18) + t.19 = t.16 + if0 t.19 goto :if120_else +if120_body: + t.9 = t.9 + t.21 = [t.9+0] + t.22 = [t.21+32] + t.20 = call t.22(t.9 ) + t.23 = t.20 + if0 t.23 goto :if124_else +if124_body: + t.9 = t.9 + t.25 = [t.9+0] + t.26 = [t.25+16] + t.24 = call t.26(t.9 ) + t.9 = t.24 + goto :if124_end +if124_else: + t.10 = 0 + t.9 = t.9 + t.28 = [t.9+0] + t.29 = [t.28+36] + t.30 = 1 + t.27 = call t.29(t.9 t.30) + t.4 = t.27 + t.9 = t.9 + t.32 = [t.9+0] + t.33 = [t.32+8] + t.34 = t.2 + t.31 = call t.33(t.9 t.34) + t.4 = t.31 +if124_end: + goto :if120_end +if120_else: + t.9 = t.9 + t.36 = [t.9+0] + t.37 = [t.36+28] + t.35 = call t.37(t.9 ) + t.38 = t.35 + if0 t.38 goto :if139_else +if139_body: + t.9 = t.9 + t.40 = [t.9+0] + t.41 = [t.40+12] + t.39 = call t.41(t.9 ) + t.9 = t.39 + goto :if139_end +if139_else: + t.10 = 0 + t.9 = t.9 + t.43 = [t.9+0] + t.44 = [t.43+40] + t.45 = 1 + t.42 = call t.44(t.9 t.45) + t.4 = t.42 + t.9 = t.9 + t.47 = [t.9+0] + t.48 = [t.47+4] + t.49 = t.2 + t.46 = call t.48(t.9 t.49) + t.4 = t.46 +if139_end: +if120_end: + goto :while115_test +while115_end: + t.50 = 1 + ret t.50 + +func Tree_Delete(this t.0 ) + t.2 = this + t.3 = this + t.4 = 1 + t.5 = 0 + t.6 = 1 +while155_test: + t.7 = t.4 + if0 t.7 goto :while155_end +while155_body: + t.2 = t.2 + t.10 = [t.2+0] + t.11 = [t.10+20] + t.9 = call t.11(t.2 ) + t.8 = t.9 + t.13 = t.0 + t.14 = t.8 + t.12 = LtS(t.13 t.14) + t.15 = t.12 + if0 t.15 goto :if160_else +if160_body: + t.2 = t.2 + t.17 = [t.2+0] + t.18 = [t.17+32] + t.16 = call t.18(t.2 ) + t.19 = t.16 + if0 t.19 goto :if164_else +if164_body: + t.3 = t.2 + t.2 = t.2 + t.21 = [t.2+0] + t.22 = [t.21+16] + t.20 = call t.22(t.2 ) + t.2 = t.20 + goto :if164_end +if164_else: + t.4 = 0 +if164_end: + goto :if160_end +if160_else: + t.24 = t.8 + t.25 = t.0 + t.23 = LtS(t.24 t.25) + t.26 = t.23 + if0 t.26 goto :if171_else +if171_body: + t.2 = t.2 + t.28 = [t.2+0] + t.29 = [t.28+28] + t.27 = call t.29(t.2 ) + t.30 = t.27 + if0 t.30 goto :if175_else +if175_body: + t.3 = t.2 + t.2 = t.2 + t.32 = [t.2+0] + t.33 = [t.32+12] + t.31 = call t.33(t.2 ) + t.2 = t.31 + goto :if175_end +if175_else: + t.4 = 0 +if175_end: + goto :if171_end +if171_else: + t.34 = t.6 + if0 t.34 goto :if182_else +if182_body: + t.2 = t.2 + t.38 = [t.2+0] + t.39 = [t.38+28] + t.37 = call t.39(t.2 ) + t.36 = Eq(t.37 0) + t.40 = t.36 + t.2 = t.2 + t.43 = [t.2+0] + t.44 = [t.43+32] + t.42 = call t.44(t.2 ) + t.41 = Eq(t.42 0) + t.45 = t.41 + t.46 = Eq(1 t.40) + t.47 = Eq(1 t.45) + t.35 = Eq(t.46 t.47) + t.48 = t.35 + if0 t.48 goto :if183_else +if183_body: + t.49 = 1 + goto :if183_end +if183_else: + t.51 = [this] + t.52 = t.3 + t.53 = t.2 + t.51 = [t.51+56] + t.50 = call t.51(this t.52 t.53) + t.49 = t.50 +if183_end: + goto :if182_end +if182_else: + t.55 = [this] + t.56 = t.3 + t.57 = t.2 + t.55 = [t.55+56] + t.54 = call t.55(this t.56 t.57) + t.49 = t.54 +if182_end: + t.5 = 1 + t.4 = 0 +if171_end: +if160_end: + t.6 = 0 + goto :while155_test +while155_end: + t.58 = t.5 + ret t.58 + +func Tree_Remove(this t.0 t.1 ) + t.1 = t.1 + t.3 = [t.1+0] + t.4 = [t.3+32] + t.2 = call t.4(t.1 ) + t.5 = t.2 + if0 t.5 goto :if206_else +if206_body: + t.8 = [this] + t.9 = t.0 + t.10 = t.1 + t.8 = [t.8+64] + t.7 = call t.8(this t.9 t.10) + t.6 = t.7 + goto :if206_end +if206_else: + t.1 = t.1 + t.12 = [t.1+0] + t.13 = [t.12+28] + t.11 = call t.13(t.1 ) + t.14 = t.11 + if0 t.14 goto :if214_else +if214_body: + t.16 = [this] + t.17 = t.0 + t.18 = t.1 + t.16 = [t.16+60] + t.15 = call t.16(this t.17 t.18) + t.6 = t.15 + goto :if214_end +if214_else: + t.1 = t.1 + t.21 = [t.1+0] + t.22 = [t.21+20] + t.20 = call t.22(t.1 ) + t.19 = t.20 + t.0 = t.0 + t.26 = [t.0+0] + t.27 = [t.26+16] + t.25 = call t.27(t.0 ) + t.28 = t.25 + t.29 = [t.28+0] + t.30 = [t.29+20] + t.24 = call t.30(t.28 ) + t.23 = t.24 + t.32 = [this] + t.33 = t.19 + t.34 = t.23 + t.32 = [t.32+44] + t.31 = call t.32(this t.33 t.34) + t.35 = t.31 + if0 t.35 goto :if232_else +if232_body: + t.0 = t.0 + t.37 = [t.0+0] + t.38 = [t.37+8] + t.39 = [this+100] + t.36 = call t.38(t.0 t.39) + t.6 = t.36 + t.0 = t.0 + t.41 = [t.0+0] + t.42 = [t.41+36] + t.43 = 0 + t.40 = call t.42(t.0 t.43) + t.6 = t.40 + goto :if232_end +if232_else: + t.0 = t.0 + t.45 = [t.0+0] + t.46 = [t.45+4] + t.47 = [this+100] + t.44 = call t.46(t.0 t.47) + t.6 = t.44 + t.0 = t.0 + t.49 = [t.0+0] + t.50 = [t.49+40] + t.51 = 0 + t.48 = call t.50(t.0 t.51) + t.6 = t.48 +if232_end: +if214_end: +if206_end: + t.52 = 1 + ret t.52 + +func Tree_RemoveRight(this t.0 t.1 ) +while254_test: + t.1 = t.1 + t.3 = [t.1+0] + t.4 = [t.3+28] + t.2 = call t.4(t.1 ) + t.5 = t.2 + if0 t.5 goto :while254_end +while254_body: + t.1 = t.1 + t.8 = [t.1+0] + t.9 = [t.8+24] + t.1 = t.1 + t.12 = [t.1+0] + t.13 = [t.12+12] + t.11 = call t.13(t.1 ) + t.14 = t.11 + t.15 = [t.14+0] + t.16 = [t.15+20] + t.10 = call t.16(t.14 ) + t.17 = t.10 + t.7 = call t.9(t.1 t.17) + t.6 = t.7 + t.0 = t.1 + t.1 = t.1 + t.19 = [t.1+0] + t.20 = [t.19+12] + t.18 = call t.20(t.1 ) + t.1 = t.18 + goto :while254_test +while254_end: + t.0 = t.0 + t.22 = [t.0+0] + t.23 = [t.22+4] + t.24 = [this+100] + t.21 = call t.23(t.0 t.24) + t.6 = t.21 + t.0 = t.0 + t.26 = [t.0+0] + t.27 = [t.26+40] + t.28 = 0 + t.25 = call t.27(t.0 t.28) + t.6 = t.25 + t.29 = 1 + ret t.29 + +func Tree_RemoveLeft(this t.0 t.1 ) +while282_test: + t.1 = t.1 + t.3 = [t.1+0] + t.4 = [t.3+32] + t.2 = call t.4(t.1 ) + t.5 = t.2 + if0 t.5 goto :while282_end +while282_body: + t.1 = t.1 + t.8 = [t.1+0] + t.9 = [t.8+24] + t.1 = t.1 + t.12 = [t.1+0] + t.13 = [t.12+16] + t.11 = call t.13(t.1 ) + t.14 = t.11 + t.15 = [t.14+0] + t.16 = [t.15+20] + t.10 = call t.16(t.14 ) + t.17 = t.10 + t.7 = call t.9(t.1 t.17) + t.6 = t.7 + t.0 = t.1 + t.1 = t.1 + t.19 = [t.1+0] + t.20 = [t.19+16] + t.18 = call t.20(t.1 ) + t.1 = t.18 + goto :while282_test +while282_end: + t.0 = t.0 + t.22 = [t.0+0] + t.23 = [t.22+8] + t.24 = [this+100] + t.21 = call t.23(t.0 t.24) + t.6 = t.21 + t.0 = t.0 + t.26 = [t.0+0] + t.27 = [t.26+36] + t.28 = 0 + t.25 = call t.27(t.0 t.28) + t.6 = t.25 + t.29 = 1 + ret t.29 + +func Tree_Search(this t.0 ) + t.2 = this + t.3 = 1 + t.4 = 0 +while310_test: + t.5 = t.3 + if0 t.5 goto :while310_end +while310_body: + t.2 = t.2 + t.8 = [t.2+0] + t.9 = [t.8+20] + t.7 = call t.9(t.2 ) + t.6 = t.7 + t.11 = t.0 + t.12 = t.6 + t.10 = LtS(t.11 t.12) + t.13 = t.10 + if0 t.13 goto :if315_else +if315_body: + t.2 = t.2 + t.15 = [t.2+0] + t.16 = [t.15+32] + t.14 = call t.16(t.2 ) + t.17 = t.14 + if0 t.17 goto :if319_else +if319_body: + t.2 = t.2 + t.19 = [t.2+0] + t.20 = [t.19+16] + t.18 = call t.20(t.2 ) + t.2 = t.18 + goto :if319_end +if319_else: + t.3 = 0 +if319_end: + goto :if315_end +if315_else: + t.22 = t.6 + t.23 = t.0 + t.21 = LtS(t.22 t.23) + t.24 = t.21 + if0 t.24 goto :if326_else +if326_body: + t.2 = t.2 + t.26 = [t.2+0] + t.27 = [t.26+28] + t.25 = call t.27(t.2 ) + t.28 = t.25 + if0 t.28 goto :if330_else +if330_body: + t.2 = t.2 + t.30 = [t.2+0] + t.31 = [t.30+12] + t.29 = call t.31(t.2 ) + t.2 = t.29 + goto :if330_end +if330_else: + t.3 = 0 +if330_end: + goto :if326_end +if326_else: + t.4 = 1 + t.3 = 0 +if326_end: +if315_end: + goto :while310_test +while310_end: + t.32 = t.4 + ret t.32 + +func Tree_Print(this ) + t.1 = this + t.4 = [this] + t.5 = t.1 + t.4 = [t.4+76] + t.3 = call t.4(this t.5) + t.2 = t.3 + t.6 = 1 + ret t.6 + +func Tree_RecPrint(this t.0 ) + t.0 = t.0 + t.2 = [t.0+0] + t.3 = [t.2+32] + t.1 = call t.3(t.0 ) + t.4 = t.1 + if0 t.4 goto :if342_else +if342_body: + t.7 = [this] + t.0 = t.0 + t.9 = [t.0+0] + t.10 = [t.9+16] + t.8 = call t.10(t.0 ) + t.11 = t.8 + t.7 = [t.7+76] + t.6 = call t.7(this t.11) + t.5 = t.6 + goto :if342_end +if342_else: + t.5 = 1 +if342_end: + t.0 = t.0 + t.13 = [t.0+0] + t.14 = [t.13+20] + t.12 = call t.14(t.0 ) + t.15 = t.12 + PrintIntS(t.15) + t.0 = t.0 + t.17 = [t.0+0] + t.18 = [t.17+28] + t.16 = call t.18(t.0 ) + t.19 = t.16 + if0 t.19 goto :if356_else +if356_body: + t.21 = [this] + t.0 = t.0 + t.23 = [t.0+0] + t.24 = [t.23+12] + t.22 = call t.24(t.0 ) + t.25 = t.22 + t.21 = [t.21+76] + t.20 = call t.21(this t.25) + t.5 = t.20 + goto :if356_end +if356_else: + t.5 = 1 +if356_end: + t.26 = 1 + ret t.26 + +func AllocArray(size) + bytes = MulS(size 4) + bytes = Add(bytes 4) + v = HeapAllocZ(bytes) + [v] = size + ret v + diff --git a/output/BinaryTree.vaporm b/output/BinaryTree.vaporm new file mode 100644 index 0000000..e69de29 diff --git a/output/BubbleSort.java b/output/BubbleSort.java new file mode 100644 index 0000000..e5645a9 --- /dev/null +++ b/output/BubbleSort.java @@ -0,0 +1,93 @@ +class BubbleSort{ + public static void main(String[] a){ + System.out.println(new BBS().Start(10)); + } +} + + +// This class contains the array of integers and +// methods to initialize, print and sort the array +// using Bublesort +class BBS{ + + int[] number ; + int size ; + + // Invoke the Initialization, Sort and Printing + // Methods + public int Start(int sz){ + int aux01 ; + aux01 = this.Init(sz); + aux01 = this.Print(); + System.out.println(99999); + aux01 = this.Sort(); + aux01 = this.Print(); + return 0 ; + } + + + // Sort array of integers using Bublesort method + public int Sort(){ + int nt ; + int i ; + int aux02 ; + int aux04 ; + int aux05 ; + int aux06 ; + int aux07 ; + int j ; + int t ; + i = size - 1 ; + aux02 = 0 - 1 ; + while (aux02 < i) { + j = 1 ; + //aux03 = i+1 ; + while (j < (i+1)){ + aux07 = j - 1 ; + aux04 = number[aux07] ; + aux05 = number[j] ; + if (aux05 < aux04) { + aux06 = j - 1 ; + t = number[aux06] ; + number[aux06] = number[j] ; + number[j] = t; + } + else nt = 0 ; + j = j + 1 ; + } + i = i - 1 ; + } + return 0 ; + } + + // Printing method + public int Print(){ + int j ; + j = 0 ; + while (j < (size)) { + System.out.println(number[j]); + j = j + 1 ; + } + return 0 ; + } + + // Initialize array of integers + public int Init(int sz){ + size = sz ; + number = new int[sz] ; + + number[0] = 20 ; + number[1] = 7 ; + number[2] = 12 ; + number[3] = 18 ; + number[4] = 2 ; + number[5] = 11 ; + number[6] = 6 ; + number[7] = 9 ; + number[8] = 19 ; + number[9] = 5 ; + + return 0 ; + } + +} diff --git a/output/BubbleSort.vapor b/output/BubbleSort.vapor new file mode 100644 index 0000000..5315afc --- /dev/null +++ b/output/BubbleSort.vapor @@ -0,0 +1,223 @@ +func Main() + t.3 = HeapAllocZ(24) + [t.3+0] = :functable_BBS + t.4 = t.3 + t.5 = [t.4+0] + t.6 = [t.5+0] + t.7 = 10 + t.2 = call t.6(t.4 t.7) + t.8 = t.2 + PrintIntS(t.8) + ret + +const functable_BBS + :BBS_Start + :BBS_Sort + :BBS_Print + :BBS_Init + +func BBS_Start(this t.0 ) + t.3 = [this] + t.4 = t.0 + t.3 = [t.3+12] + t.2 = call t.3(this t.4) + t.1 = t.2 + t.6 = [this] + t.6 = [t.6+8] + t.5 = call t.6(this ) + t.1 = t.5 + t.7 = 99999 + PrintIntS(t.7) + t.9 = [this] + t.9 = [t.9+4] + t.8 = call t.9(this ) + t.1 = t.8 + t.11 = [this] + t.11 = [t.11+8] + t.10 = call t.11(this ) + t.1 = t.10 + t.12 = 0 + ret t.12 + +func BBS_Sort(this ) + t.2 = [this+20] + t.3 = 1 + t.1 = Sub(t.2 t.3) + t.0 = t.1 + t.6 = 0 + t.7 = 1 + t.5 = Sub(t.6 t.7) + t.4 = t.5 +while23_test: + t.9 = t.4 + t.10 = t.0 + t.8 = LtS(t.9 t.10) + t.11 = t.8 + if0 t.11 goto :while23_end +while23_body: + t.12 = 1 +while28_test: + t.14 = t.12 + t.16 = t.0 + t.17 = 1 + t.15 = Add(t.16 t.17) + t.18 = t.15 + t.13 = LtS(t.14 t.18) + t.19 = t.13 + if0 t.19 goto :while28_end +while28_body: + t.22 = t.12 + t.23 = 1 + t.21 = Sub(t.22 t.23) + t.20 = t.21 + t.26 = [this+16] + t.27 = MulS(t.20 4) + t.27 = Add(t.27 4) + t.27 = Add(t.26 t.27) + t.25 = [t.27] + t.24 = t.25 + t.30 = [this+16] + t.31 = MulS(t.12 4) + t.31 = Add(t.31 4) + t.31 = Add(t.30 t.31) + t.29 = [t.31] + t.28 = t.29 + t.33 = t.28 + t.34 = t.24 + t.32 = LtS(t.33 t.34) + t.35 = t.32 + if0 t.35 goto :if45_else +if45_body: + t.38 = t.12 + t.39 = 1 + t.37 = Sub(t.38 t.39) + t.36 = t.37 + t.42 = [this+16] + t.43 = MulS(t.36 4) + t.43 = Add(t.43 4) + t.43 = Add(t.42 t.43) + t.41 = [t.43] + t.40 = t.41 + t.44 = [this+16] + t.45 = MulS(t.36 4) + t.45 = Add(t.45 4) + t.45 = Add(t.44 t.45) + t.47 = [this+16] + t.48 = MulS(t.12 4) + t.48 = Add(t.48 4) + t.48 = Add(t.47 t.48) + t.46 = [t.48] + [t.45] = t.46 + t.49 = [this+16] + t.50 = MulS(t.12 4) + t.50 = Add(t.50 4) + t.50 = Add(t.49 t.50) + [t.50] = t.40 + goto :if45_end +if45_else: + t.51 = 0 +if45_end: + t.53 = t.12 + t.54 = 1 + t.52 = Add(t.53 t.54) + t.12 = t.52 + goto :while28_test +while28_end: + t.56 = t.0 + t.57 = 1 + t.55 = Sub(t.56 t.57) + t.0 = t.55 + goto :while23_test +while23_end: + t.58 = 0 + ret t.58 + +func BBS_Print(this ) + t.0 = 0 +while69_test: + t.2 = t.0 + t.3 = [this+20] + t.1 = LtS(t.2 t.3) + t.4 = t.1 + if0 t.4 goto :while69_end +while69_body: + t.6 = [this+16] + t.7 = MulS(t.0 4) + t.7 = Add(t.7 4) + t.7 = Add(t.6 t.7) + t.5 = [t.7] + t.8 = t.5 + PrintIntS(t.8) + t.10 = t.0 + t.11 = 1 + t.9 = Add(t.10 t.11) + t.0 = t.9 + goto :while69_test +while69_end: + t.12 = 0 + ret t.12 + +func BBS_Init(this t.0 ) + [this+20] = t.0 + t.1 = call :AllocArray(t.0) + [this+16] = t.1 + t.2 = [this+16] + t.3 = MulS(0 4) + t.3 = Add(t.3 4) + t.3 = Add(t.2 t.3) + [t.3] = 20 + t.4 = [this+16] + t.5 = MulS(1 4) + t.5 = Add(t.5 4) + t.5 = Add(t.4 t.5) + [t.5] = 7 + t.6 = [this+16] + t.7 = MulS(2 4) + t.7 = Add(t.7 4) + t.7 = Add(t.6 t.7) + [t.7] = 12 + t.8 = [this+16] + t.9 = MulS(3 4) + t.9 = Add(t.9 4) + t.9 = Add(t.8 t.9) + [t.9] = 18 + t.10 = [this+16] + t.11 = MulS(4 4) + t.11 = Add(t.11 4) + t.11 = Add(t.10 t.11) + [t.11] = 2 + t.12 = [this+16] + t.13 = MulS(5 4) + t.13 = Add(t.13 4) + t.13 = Add(t.12 t.13) + [t.13] = 11 + t.14 = [this+16] + t.15 = MulS(6 4) + t.15 = Add(t.15 4) + t.15 = Add(t.14 t.15) + [t.15] = 6 + t.16 = [this+16] + t.17 = MulS(7 4) + t.17 = Add(t.17 4) + t.17 = Add(t.16 t.17) + [t.17] = 9 + t.18 = [this+16] + t.19 = MulS(8 4) + t.19 = Add(t.19 4) + t.19 = Add(t.18 t.19) + [t.19] = 19 + t.20 = [this+16] + t.21 = MulS(9 4) + t.21 = Add(t.21 4) + t.21 = Add(t.20 t.21) + [t.21] = 5 + t.22 = 0 + ret t.22 + +func AllocArray(size) + bytes = MulS(size 4) + bytes = Add(bytes 4) + v = HeapAllocZ(bytes) + [v] = size + ret v + diff --git a/output/BubbleSort.vaporm b/output/BubbleSort.vaporm new file mode 100644 index 0000000..e69de29 diff --git a/output/Factorial.java b/output/Factorial.java new file mode 100644 index 0000000..d938bb6 --- /dev/null +++ b/output/Factorial.java @@ -0,0 +1,16 @@ +class Factorial{ + public static void main(String[] a){ + System.out.println(new Fac().ComputeFac(10)); + } +} + +class Fac { + public int ComputeFac(int num){ + int num_aux ; + if (num < 1) + num_aux = 1 ; + else + num_aux = num * (this.ComputeFac(num-1)) ; + return num_aux ; + } +} diff --git a/output/Factorial.vapor b/output/Factorial.vapor new file mode 100644 index 0000000..713ef06 --- /dev/null +++ b/output/Factorial.vapor @@ -0,0 +1,47 @@ +func Main() + t.3 = HeapAllocZ(4) + [t.3+0] = :functable_Fac + t.4 = t.3 + t.5 = [t.4+0] + t.6 = [t.5+0] + t.7 = 10 + t.2 = call t.6(t.4 t.7) + t.8 = t.2 + PrintIntS(t.8) + ret + +const functable_Fac + :Fac_ComputeFac + +func Fac_ComputeFac(this t.0 ) + t.2 = t.0 + t.3 = 1 + t.1 = LtS(t.2 t.3) + t.4 = t.1 + if0 t.4 goto :if6_else +if6_body: + t.5 = 1 + goto :if6_end +if6_else: + t.7 = t.0 + t.9 = [this] + t.11 = t.0 + t.12 = 1 + t.10 = Sub(t.11 t.12) + t.13 = t.10 + t.9 = [t.9+0] + t.8 = call t.9(this t.13) + t.14 = t.8 + t.6 = MulS(t.7 t.14) + t.5 = t.6 +if6_end: + t.15 = t.5 + ret t.15 + +func AllocArray(size) + bytes = MulS(size 4) + bytes = Add(bytes 4) + v = HeapAllocZ(bytes) + [v] = size + ret v + diff --git a/output/Factorial.vaporm b/output/Factorial.vaporm new file mode 100644 index 0000000..a434ac2 --- /dev/null +++ b/output/Factorial.vaporm @@ -0,0 +1,138 @@ +const functable_Fac + :Fac_ComputeFac +func Main [in 0, out 0, local 17] + local[0] = $s0 + local[1] = $s1 + local[2] = $s2 + local[3] = $s3 + local[4] = $s4 + local[5] = $s5 + local[6] = $s6 + local[7] = $s7 + $s7 = HeapAllocZ(4 ) + [$s7+0] = :functable_Fac + $s6 = $s7 + $s7 = [$s6+0] + $s5 = [$s7+0] + $s7 = 10 + local[8] = $t0 + local[9] = $t1 + local[10] = $t2 + local[11] = $t3 + local[12] = $t4 + local[13] = $t5 + local[14] = $t6 + local[15] = $t7 + local[16] = $t8 + $a0 = $s6 + $a1 = $s7 + call $s5 + $s4 = $v0 + $t0 = local[8] + $t1 = local[9] + $t2 = local[10] + $t3 = local[11] + $t4 = local[12] + $t5 = local[13] + $t6 = local[14] + $t7 = local[15] + $t8 = local[16] + $s7 = $s4 + PrintIntS($s7 ) + $s0 = local[0] + $s1 = local[1] + $s2 = local[2] + $s3 = local[3] + $s4 = local[4] + $s5 = local[5] + $s6 = local[6] + $s7 = local[7] + ret +func Fac_ComputeFac [in 0, out 0, local 17] + local[0] = $s0 + local[1] = $s1 + local[2] = $s2 + local[3] = $s3 + local[4] = $s4 + local[5] = $s5 + local[6] = $s6 + local[7] = $s7 + $s6 = $a0 + $s7 = $a1 + $s5 = $s7 + $s4 = 1 + $s3 = LtS($s5 $s4 ) + $s4 = $s3 + if0 $s4 goto :if6_else +if6_body: + $s4 = 1 + goto :if6_end +if6_else: + $s3 = $s7 + $s5 = [$s6+0] + $s5 = $s7 + $s7 = 1 + $s2 = Sub($s5 $s7 ) + $s7 = $s2 + $s5 = [$s5+0] + local[8] = $t0 + local[9] = $t1 + local[10] = $t2 + local[11] = $t3 + local[12] = $t4 + local[13] = $t5 + local[14] = $t6 + local[15] = $t7 + local[16] = $t8 + $a0 = $s6 + $a1 = $s7 + call $s5 + $s2 = $v0 + $t0 = local[8] + $t1 = local[9] + $t2 = local[10] + $t3 = local[11] + $t4 = local[12] + $t5 = local[13] + $t6 = local[14] + $t7 = local[15] + $t8 = local[16] + $s7 = $s2 + $s2 = MulS($s3 $s7 ) + $s4 = $s2 +if6_end: + $s2 = $s4 + $v0 = $s2 + $s0 = local[0] + $s1 = local[1] + $s2 = local[2] + $s3 = local[3] + $s4 = local[4] + $s5 = local[5] + $s6 = local[6] + $s7 = local[7] + ret +func AllocArray [in 0, out 0, local 17] + local[0] = $s0 + local[1] = $s1 + local[2] = $s2 + local[3] = $s3 + local[4] = $s4 + local[5] = $s5 + local[6] = $s6 + local[7] = $s7 + $s7 = $a0 + $s6 = MulS($s7 4 ) + $s6 = Add($s6 4 ) + $s5 = HeapAllocZ($s6 ) + [$s5+0] = $s7 + $v0 = $s5 + $s0 = local[0] + $s1 = local[1] + $s2 = local[2] + $s3 = local[3] + $s4 = local[4] + $s5 = local[5] + $s6 = local[6] + $s7 = local[7] + ret diff --git a/output/LinearSearch.java b/output/LinearSearch.java new file mode 100644 index 0000000..daddd94 --- /dev/null +++ b/output/LinearSearch.java @@ -0,0 +1,99 @@ +class LinearSearch{ + public static void main(String[] a){ + System.out.println(new LS().Start(10)); + } +} + + +// This class contains an array of integers and +// methods to initialize, print and search the array +// using Linear Search +class LS { + int[] number ; + int size ; + + // Invoke methods to initialize, print and search + // for elements on the array + public int Start(int sz){ + int aux01 ; + int aux02 ; + + aux01 = this.Init(sz); + aux02 = this.Print(); + System.out.println(9999); + System.out.println(this.Search(8)); + System.out.println(this.Search(12)) ; + System.out.println(this.Search(17)) ; + System.out.println(this.Search(50)) ; + return 55 ; + } + + // Print array of integers + public int Print(){ + int j ; + + j = 1 ; + while (j < (size)) { + System.out.println(number[j]); + j = j + 1 ; + } + return 0 ; + } + + // Search for a specific value (num) using + // linear search + public int Search(int num){ + int j ; + boolean ls01 ; + int ifound ; + int aux01 ; + int aux02 ; + int nt ; + + j = 1 ; + ls01 = false ; + ifound = 0 ; + + //System.out.println(num); + while (j < (size)) { + aux01 = number[j] ; + aux02 = num + 1 ; + if (aux01 < num) nt = 0 ; + else if (!(aux01 < aux02)) nt = 0 ; + else { + ls01 = true ; + ifound = 1 ; + j = size ; + } + j = j + 1 ; + } + + return ifound ; + } + + + + // initialize array of integers with some + // some sequence + public int Init(int sz){ + int j ; + int k ; + int aux01 ; + int aux02 ; + + size = sz ; + number = new int[sz] ; + + j = 1 ; + k = size + 1 ; + while (j < (size)) { + aux01 = 2 * j ; + aux02 = k - 3 ; + number[j] = aux01 + aux02 ; + j = j + 1 ; + k = k - 1 ; + } + return 0 ; + } + +} diff --git a/output/LinearSearch.vapor b/output/LinearSearch.vapor new file mode 100644 index 0000000..868e715 --- /dev/null +++ b/output/LinearSearch.vapor @@ -0,0 +1,188 @@ +func Main() + t.3 = HeapAllocZ(24) + [t.3+0] = :functable_LS + t.4 = t.3 + t.5 = [t.4+0] + t.6 = [t.5+0] + t.7 = 10 + t.2 = call t.6(t.4 t.7) + t.8 = t.2 + PrintIntS(t.8) + ret + +const functable_LS + :LS_Start + :LS_Print + :LS_Search + :LS_Init + +func LS_Start(this t.0 ) + t.3 = [this] + t.4 = t.0 + t.3 = [t.3+12] + t.2 = call t.3(this t.4) + t.1 = t.2 + t.7 = [this] + t.7 = [t.7+4] + t.6 = call t.7(this ) + t.5 = t.6 + t.8 = 9999 + PrintIntS(t.8) + t.10 = [this] + t.11 = 8 + t.10 = [t.10+8] + t.9 = call t.10(this t.11) + t.12 = t.9 + PrintIntS(t.12) + t.14 = [this] + t.15 = 12 + t.14 = [t.14+8] + t.13 = call t.14(this t.15) + t.16 = t.13 + PrintIntS(t.16) + t.18 = [this] + t.19 = 17 + t.18 = [t.18+8] + t.17 = call t.18(this t.19) + t.20 = t.17 + PrintIntS(t.20) + t.22 = [this] + t.23 = 50 + t.22 = [t.22+8] + t.21 = call t.22(this t.23) + t.24 = t.21 + PrintIntS(t.24) + t.25 = 55 + ret t.25 + +func LS_Print(this ) + t.0 = 1 +while29_test: + t.2 = t.0 + t.3 = [this+20] + t.1 = LtS(t.2 t.3) + t.4 = t.1 + if0 t.4 goto :while29_end +while29_body: + t.6 = [this+16] + t.7 = MulS(t.0 4) + t.7 = Add(t.7 4) + t.7 = Add(t.6 t.7) + t.5 = [t.7] + t.8 = t.5 + PrintIntS(t.8) + t.10 = t.0 + t.11 = 1 + t.9 = Add(t.10 t.11) + t.0 = t.9 + goto :while29_test +while29_end: + t.12 = 0 + ret t.12 + +func LS_Search(this t.0 ) + t.1 = 1 + t.2 = 0 + t.3 = 0 +while42_test: + t.5 = t.1 + t.6 = [this+20] + t.4 = LtS(t.5 t.6) + t.7 = t.4 + if0 t.7 goto :while42_end +while42_body: + t.10 = [this+16] + t.11 = MulS(t.1 4) + t.11 = Add(t.11 4) + t.11 = Add(t.10 t.11) + t.9 = [t.11] + t.8 = t.9 + t.14 = t.0 + t.15 = 1 + t.13 = Add(t.14 t.15) + t.12 = t.13 + t.17 = t.8 + t.18 = t.0 + t.16 = LtS(t.17 t.18) + t.19 = t.16 + if0 t.19 goto :if53_else +if53_body: + t.20 = 0 + goto :if53_end +if53_else: + t.23 = t.8 + t.24 = t.12 + t.22 = LtS(t.23 t.24) + t.21 = Eq(t.22 0) + t.25 = t.21 + if0 t.25 goto :if57_else +if57_body: + t.20 = 0 + goto :if57_end +if57_else: + t.2 = 1 + t.3 = 1 + t.1 = [this+20] +if57_end: +if53_end: + t.27 = t.1 + t.28 = 1 + t.26 = Add(t.27 t.28) + t.1 = t.26 + goto :while42_test +while42_end: + t.29 = t.3 + ret t.29 + +func LS_Init(this t.0 ) + [this+20] = t.0 + t.1 = call :AllocArray(t.0) + [this+16] = t.1 + t.2 = 1 + t.5 = [this+20] + t.6 = 1 + t.4 = Add(t.5 t.6) + t.3 = t.4 +while70_test: + t.8 = t.2 + t.9 = [this+20] + t.7 = LtS(t.8 t.9) + t.10 = t.7 + if0 t.10 goto :while70_end +while70_body: + t.13 = 2 + t.14 = t.2 + t.12 = MulS(t.13 t.14) + t.11 = t.12 + t.17 = t.3 + t.18 = 3 + t.16 = Sub(t.17 t.18) + t.15 = t.16 + t.19 = [this+16] + t.20 = MulS(t.2 4) + t.20 = Add(t.20 4) + t.20 = Add(t.19 t.20) + t.22 = t.11 + t.23 = t.15 + t.21 = Add(t.22 t.23) + [t.20] = t.21 + t.25 = t.2 + t.26 = 1 + t.24 = Add(t.25 t.26) + t.2 = t.24 + t.28 = t.3 + t.29 = 1 + t.27 = Sub(t.28 t.29) + t.3 = t.27 + goto :while70_test +while70_end: + t.30 = 0 + ret t.30 + +func AllocArray(size) + bytes = MulS(size 4) + bytes = Add(bytes 4) + v = HeapAllocZ(bytes) + [v] = size + ret v + diff --git a/output/LinearSearch.vaporm b/output/LinearSearch.vaporm new file mode 100644 index 0000000..e69de29 diff --git a/output/LinkedList.java b/output/LinkedList.java new file mode 100644 index 0000000..69adc33 --- /dev/null +++ b/output/LinkedList.java @@ -0,0 +1,278 @@ +class LinkedList{ + public static void main(String[] a){ + System.out.println(new LL().Start()); + } +} + +class Element { + int Age ; + int Salary ; + boolean Married ; + + // Initialize some class variables + public boolean Init(int v_Age, int v_Salary, boolean v_Married){ + Age = v_Age ; + Salary = v_Salary ; + Married = v_Married ; + return true ; + } + + public int GetAge(){ + return Age ; + } + + public int GetSalary(){ + return Salary ; + } + + public boolean GetMarried(){ + return Married ; + } + + // This method returns true if the object "other" + // has the same values for age, salary and + public boolean Equal(Element other){ + boolean ret_val ; + int aux01 ; + int aux02 ; + int nt ; + ret_val = true ; + + aux01 = other.GetAge(); + if (!this.Compare(aux01,Age)) ret_val = false ; + else { + aux02 = other.GetSalary(); + if (!this.Compare(aux02,Salary)) ret_val = false ; + else + if (Married) + if (!other.GetMarried()) ret_val = false; + else nt = 0 ; + else + if (other.GetMarried()) ret_val = false; + else nt = 0 ; + } + + return ret_val ; + } + + // This method compares two integers and + // returns true if they are equal and false + // otherwise + public boolean Compare(int num1 , int num2){ + boolean retval ; + int aux02 ; + retval = false ; + aux02 = num2 + 1 ; + if (num1 < num2) retval = false ; + else if (!(num1 < aux02)) retval = false ; + else retval = true ; + return retval ; + } + +} + +class List{ + Element elem ; + List next ; + boolean end ; + + // Initialize the node list as the last node + public boolean Init(){ + end = true ; + return true ; + } + + // Initialize the values of a new node + public boolean InitNew(Element v_elem, List v_next, boolean v_end){ + end = v_end ; + elem = v_elem ; + next = v_next ; + return true ; + } + + // Insert a new node at the beginning of the list + public List Insert(Element new_elem){ + boolean ret_val ; + List aux03 ; + List aux02 ; + aux03 = this ; + aux02 = new List(); + ret_val = aux02.InitNew(new_elem,aux03,false); + return aux02 ; + } + + + // Update the the pointer to the next node + public boolean SetNext(List v_next){ + next = v_next ; + return true ; + } + + // Delete an element e from the list + public List Delete(Element e){ + List my_head ; + boolean ret_val ; + boolean aux05; + List aux01 ; + List prev ; + boolean var_end ; + Element var_elem ; + int aux04 ; + int nt ; + + + my_head = this ; + ret_val = false ; + aux04 = 0 - 1 ; + aux01 = this ; + prev = this ; + var_end = end; + var_elem = elem ; + while ((!var_end) && (!ret_val)){ + if (e.Equal(var_elem)){ + ret_val = true ; + if (aux04 < 0) { + // delete first element + my_head = aux01.GetNext() ; + } + else{ // delete a non first element + System.out.println(0-555); + aux05 = prev.SetNext(aux01.GetNext()); + System.out.println(0-555); + + } + } else nt = 0 ; + if (!ret_val){ + prev = aux01 ; + aux01 = aux01.GetNext() ; + var_end = aux01.GetEnd(); + var_elem = aux01.GetElem(); + aux04 = 1 ; + } else nt = 0 ; + } + return my_head ; + } + + + // Search for an element e on the list + public int Search(Element e){ + int int_ret_val ; + List aux01 ; + Element var_elem ; + boolean var_end ; + int nt ; + + int_ret_val = 0 ; + aux01 = this ; + var_end = end; + var_elem = elem ; + while (!var_end){ + if (e.Equal(var_elem)){ + int_ret_val = 1 ; + } + else nt = 0 ; + aux01 = aux01.GetNext() ; + var_end = aux01.GetEnd(); + var_elem = aux01.GetElem(); + } + return int_ret_val ; + } + + public boolean GetEnd(){ + return end ; + } + + public Element GetElem(){ + return elem ; + } + + public List GetNext(){ + return next ; + } + + + // Print the linked list + public boolean Print(){ + List aux01 ; + boolean var_end ; + Element var_elem ; + + aux01 = this ; + var_end = end ; + var_elem = elem ; + while (!var_end){ + System.out.println(var_elem.GetAge()); + aux01 = aux01.GetNext() ; + var_end = aux01.GetEnd(); + var_elem = aux01.GetElem(); + } + + return true ; + } +} + + +// this class invokes the methods to insert, delete, +// search and print the linked list +class LL{ + + public int Start(){ + + List head ; + List last_elem ; + boolean aux01 ; + Element el01 ; + Element el02 ; + Element el03 ; + + last_elem = new List(); + aux01 = last_elem.Init(); + head = last_elem ; + aux01 = head.Init(); + aux01 = head.Print(); + + // inserting first element + el01 = new Element(); + aux01 = el01.Init(25,37000,false); + head = head.Insert(el01); + aux01 = head.Print(); + System.out.println(10000000); + // inserting second element + el01 = new Element(); + aux01 = el01.Init(39,42000,true); + el02 = el01 ; + head = head.Insert(el01); + aux01 = head.Print(); + System.out.println(10000000); + // inserting third element + el01 = new Element(); + aux01 = el01.Init(22,34000,false); + head = head.Insert(el01); + aux01 = head.Print(); + el03 = new Element(); + aux01 = el03.Init(27,34000,false); + System.out.println(head.Search(el02)); + System.out.println(head.Search(el03)); + System.out.println(10000000); + // inserting fourth element + el01 = new Element(); + aux01 = el01.Init(28,35000,false); + head = head.Insert(el01); + aux01 = head.Print(); + System.out.println(2220000); + + head = head.Delete(el02); + aux01 = head.Print(); + System.out.println(33300000); + + + head = head.Delete(el01); + aux01 = head.Print(); + System.out.println(44440000); + + return 0 ; + + + } + +} diff --git a/output/LinkedList.vapor b/output/LinkedList.vapor new file mode 100644 index 0000000..6a04bc4 --- /dev/null +++ b/output/LinkedList.vapor @@ -0,0 +1,556 @@ +func Main() + t.3 = HeapAllocZ(4) + [t.3+0] = :functable_LL + t.4 = t.3 + t.5 = [t.4+0] + t.6 = [t.5+0] + t.2 = call t.6(t.4 ) + t.7 = t.2 + PrintIntS(t.7) + ret + +const functable_Element + :Element_Init + :Element_GetAge + :Element_GetSalary + :Element_GetMarried + :Element_Equal + :Element_Compare + +func Element_Init(this t.0 t.1 t.2 ) + [this+24] = t.0 + [this+28] = t.1 + [this+32] = t.2 + t.3 = 1 + ret t.3 + +func Element_GetAge(this ) + t.0 = [this+24] + ret t.0 + +func Element_GetSalary(this ) + t.0 = [this+28] + ret t.0 + +func Element_GetMarried(this ) + t.0 = [this+32] + ret t.0 + +func Element_Equal(this t.0 ) + t.1 = 1 + t.0 = t.0 + t.4 = [t.0+0] + t.5 = [t.4+4] + t.3 = call t.5(t.0 ) + t.2 = t.3 + t.8 = [this] + t.9 = t.2 + t.10 = [this+24] + t.8 = [t.8+20] + t.7 = call t.8(this t.9 t.10) + t.6 = Eq(t.7 0) + t.11 = t.6 + if0 t.11 goto :if12_else +if12_body: + t.1 = 0 + goto :if12_end +if12_else: + t.0 = t.0 + t.14 = [t.0+0] + t.15 = [t.14+8] + t.13 = call t.15(t.0 ) + t.12 = t.13 + t.18 = [this] + t.19 = t.12 + t.20 = [this+28] + t.18 = [t.18+20] + t.17 = call t.18(this t.19 t.20) + t.16 = Eq(t.17 0) + t.21 = t.16 + if0 t.21 goto :if21_else +if21_body: + t.1 = 0 + goto :if21_end +if21_else: + t.22 = [this+32] + if0 t.22 goto :if27_else +if27_body: + t.0 = t.0 + t.25 = [t.0+0] + t.26 = [t.25+12] + t.24 = call t.26(t.0 ) + t.23 = Eq(t.24 0) + t.27 = t.23 + if0 t.27 goto :if28_else +if28_body: + t.1 = 0 + goto :if28_end +if28_else: + t.28 = 0 +if28_end: + goto :if27_end +if27_else: + t.0 = t.0 + t.30 = [t.0+0] + t.31 = [t.30+12] + t.29 = call t.31(t.0 ) + t.32 = t.29 + if0 t.32 goto :if33_else +if33_body: + t.1 = 0 + goto :if33_end +if33_else: + t.28 = 0 +if33_end: +if27_end: +if21_end: +if12_end: + t.33 = t.1 + ret t.33 + +func Element_Compare(this t.0 t.1 ) + t.2 = 0 + t.5 = t.1 + t.6 = 1 + t.4 = Add(t.5 t.6) + t.3 = t.4 + t.8 = t.0 + t.9 = t.1 + t.7 = LtS(t.8 t.9) + t.10 = t.7 + if0 t.10 goto :if41_else +if41_body: + t.2 = 0 + goto :if41_end +if41_else: + t.13 = t.0 + t.14 = t.3 + t.12 = LtS(t.13 t.14) + t.11 = Eq(t.12 0) + t.15 = t.11 + if0 t.15 goto :if45_else +if45_body: + t.2 = 0 + goto :if45_end +if45_else: + t.2 = 1 +if45_end: +if41_end: + t.16 = t.2 + ret t.16 + +const functable_List + :List_Init + :List_InitNew + :List_Insert + :List_SetNext + :List_Delete + :List_Search + :List_GetEnd + :List_GetElem + :List_GetNext + :List_Print + +func List_Init(this ) + [this+48] = 1 + t.0 = 1 + ret t.0 + +func List_InitNew(this t.0 t.1 t.2 ) + [this+48] = t.2 + [this+40] = t.0 + [this+44] = t.1 + t.3 = 1 + ret t.3 + +func List_Insert(this t.0 ) + t.2 = this + t.4 = HeapAllocZ(52) + [t.4+0] = :functable_List + t.3 = t.4 + t.3 = t.3 + t.7 = [t.3+0] + t.8 = [t.7+4] + t.9 = t.0 + t.10 = t.2 + t.11 = 0 + t.6 = call t.8(t.3 t.9 t.10 t.11) + t.5 = t.6 + t.12 = t.3 + ret t.12 + +func List_SetNext(this t.0 ) + [this+44] = t.0 + t.1 = 1 + ret t.1 + +func List_Delete(this t.0 ) + t.3 = this + t.4 = 0 + t.7 = 0 + t.8 = 1 + t.6 = Sub(t.7 t.8) + t.5 = t.6 + t.9 = this + t.10 = this + t.11 = [this+48] + t.12 = [this+40] +while65_test: + t.14 = Eq(t.11 0) + t.15 = t.14 + t.16 = Eq(t.4 0) + t.17 = t.16 + t.18 = Eq(1 t.15) + t.19 = Eq(1 t.17) + t.13 = Eq(t.18 t.19) + t.20 = t.13 + if0 t.20 goto :while65_end +while65_body: + t.0 = t.0 + t.22 = [t.0+0] + t.23 = [t.22+16] + t.24 = t.12 + t.21 = call t.23(t.0 t.24) + t.25 = t.21 + if0 t.25 goto :if74_else +if74_body: + t.4 = 1 + t.27 = t.5 + t.28 = 0 + t.26 = LtS(t.27 t.28) + t.29 = t.26 + if0 t.29 goto :if79_else +if79_body: + t.9 = t.9 + t.31 = [t.9+0] + t.32 = [t.31+32] + t.30 = call t.32(t.9 ) + t.3 = t.30 + goto :if79_end +if79_else: + t.34 = 0 + t.35 = 555 + t.33 = Sub(t.34 t.35) + t.36 = t.33 + PrintIntS(t.36) + t.10 = t.10 + t.39 = [t.10+0] + t.40 = [t.39+12] + t.9 = t.9 + t.42 = [t.9+0] + t.43 = [t.42+32] + t.41 = call t.43(t.9 ) + t.44 = t.41 + t.38 = call t.40(t.10 t.44) + t.37 = t.38 + t.46 = 0 + t.47 = 555 + t.45 = Sub(t.46 t.47) + t.48 = t.45 + PrintIntS(t.48) +if79_end: + goto :if74_end +if74_else: + t.49 = 0 +if74_end: + t.50 = Eq(t.4 0) + t.51 = t.50 + if0 t.51 goto :if101_else +if101_body: + t.10 = t.9 + t.9 = t.9 + t.53 = [t.9+0] + t.54 = [t.53+32] + t.52 = call t.54(t.9 ) + t.9 = t.52 + t.9 = t.9 + t.56 = [t.9+0] + t.57 = [t.56+24] + t.55 = call t.57(t.9 ) + t.11 = t.55 + t.9 = t.9 + t.59 = [t.9+0] + t.60 = [t.59+28] + t.58 = call t.60(t.9 ) + t.12 = t.58 + t.5 = 1 + goto :if101_end +if101_else: + t.49 = 0 +if101_end: + goto :while65_test +while65_end: + t.61 = t.3 + ret t.61 + +func List_Search(this t.0 ) + t.3 = 0 + t.4 = this + t.5 = [this+48] + t.6 = [this+40] +while113_test: + t.7 = Eq(t.5 0) + t.8 = t.7 + if0 t.8 goto :while113_end +while113_body: + t.0 = t.0 + t.10 = [t.0+0] + t.11 = [t.10+16] + t.12 = t.6 + t.9 = call t.11(t.0 t.12) + t.13 = t.9 + if0 t.13 goto :if116_else +if116_body: + t.3 = 1 + goto :if116_end +if116_else: + t.14 = 0 +if116_end: + t.4 = t.4 + t.16 = [t.4+0] + t.17 = [t.16+32] + t.15 = call t.17(t.4 ) + t.4 = t.15 + t.4 = t.4 + t.19 = [t.4+0] + t.20 = [t.19+24] + t.18 = call t.20(t.4 ) + t.5 = t.18 + t.4 = t.4 + t.22 = [t.4+0] + t.23 = [t.22+28] + t.21 = call t.23(t.4 ) + t.6 = t.21 + goto :while113_test +while113_end: + t.24 = t.3 + ret t.24 + +func List_GetEnd(this ) + t.0 = [this+48] + ret t.0 + +func List_GetElem(this ) + t.0 = [this+40] + ret t.0 + +func List_GetNext(this ) + t.0 = [this+44] + ret t.0 + +func List_Print(this ) + t.2 = this + t.3 = [this+48] + t.4 = [this+40] +while134_test: + t.5 = Eq(t.3 0) + t.6 = t.5 + if0 t.6 goto :while134_end +while134_body: + t.4 = t.4 + t.8 = [t.4+0] + t.9 = [t.8+4] + t.7 = call t.9(t.4 ) + t.10 = t.7 + PrintIntS(t.10) + t.2 = t.2 + t.12 = [t.2+0] + t.13 = [t.12+32] + t.11 = call t.13(t.2 ) + t.2 = t.11 + t.2 = t.2 + t.15 = [t.2+0] + t.16 = [t.15+24] + t.14 = call t.16(t.2 ) + t.3 = t.14 + t.2 = t.2 + t.18 = [t.2+0] + t.19 = [t.18+28] + t.17 = call t.19(t.2 ) + t.4 = t.17 + goto :while134_test +while134_end: + t.20 = 1 + ret t.20 + +const functable_LL + :LL_Start + +func LL_Start(this ) + t.3 = HeapAllocZ(52) + [t.3+0] = :functable_List + t.2 = t.3 + t.2 = t.2 + t.6 = [t.2+0] + t.7 = [t.6+0] + t.5 = call t.7(t.2 ) + t.4 = t.5 + t.8 = t.2 + t.8 = t.8 + t.10 = [t.8+0] + t.11 = [t.10+0] + t.9 = call t.11(t.8 ) + t.4 = t.9 + t.8 = t.8 + t.13 = [t.8+0] + t.14 = [t.13+36] + t.12 = call t.14(t.8 ) + t.4 = t.12 + t.16 = HeapAllocZ(36) + [t.16+0] = :functable_Element + t.15 = t.16 + t.15 = t.15 + t.18 = [t.15+0] + t.19 = [t.18+0] + t.20 = 25 + t.21 = 37000 + t.22 = 0 + t.17 = call t.19(t.15 t.20 t.21 t.22) + t.4 = t.17 + t.8 = t.8 + t.24 = [t.8+0] + t.25 = [t.24+8] + t.26 = t.15 + t.23 = call t.25(t.8 t.26) + t.8 = t.23 + t.8 = t.8 + t.28 = [t.8+0] + t.29 = [t.28+36] + t.27 = call t.29(t.8 ) + t.4 = t.27 + t.30 = 10000000 + PrintIntS(t.30) + t.31 = HeapAllocZ(36) + [t.31+0] = :functable_Element + t.15 = t.31 + t.15 = t.15 + t.33 = [t.15+0] + t.34 = [t.33+0] + t.35 = 39 + t.36 = 42000 + t.37 = 1 + t.32 = call t.34(t.15 t.35 t.36 t.37) + t.4 = t.32 + t.38 = t.15 + t.8 = t.8 + t.40 = [t.8+0] + t.41 = [t.40+8] + t.42 = t.15 + t.39 = call t.41(t.8 t.42) + t.8 = t.39 + t.8 = t.8 + t.44 = [t.8+0] + t.45 = [t.44+36] + t.43 = call t.45(t.8 ) + t.4 = t.43 + t.46 = 10000000 + PrintIntS(t.46) + t.47 = HeapAllocZ(36) + [t.47+0] = :functable_Element + t.15 = t.47 + t.15 = t.15 + t.49 = [t.15+0] + t.50 = [t.49+0] + t.51 = 22 + t.52 = 34000 + t.53 = 0 + t.48 = call t.50(t.15 t.51 t.52 t.53) + t.4 = t.48 + t.8 = t.8 + t.55 = [t.8+0] + t.56 = [t.55+8] + t.57 = t.15 + t.54 = call t.56(t.8 t.57) + t.8 = t.54 + t.8 = t.8 + t.59 = [t.8+0] + t.60 = [t.59+36] + t.58 = call t.60(t.8 ) + t.4 = t.58 + t.62 = HeapAllocZ(36) + [t.62+0] = :functable_Element + t.61 = t.62 + t.61 = t.61 + t.64 = [t.61+0] + t.65 = [t.64+0] + t.66 = 27 + t.67 = 34000 + t.68 = 0 + t.63 = call t.65(t.61 t.66 t.67 t.68) + t.4 = t.63 + t.8 = t.8 + t.70 = [t.8+0] + t.71 = [t.70+20] + t.72 = t.38 + t.69 = call t.71(t.8 t.72) + t.73 = t.69 + PrintIntS(t.73) + t.8 = t.8 + t.75 = [t.8+0] + t.76 = [t.75+20] + t.77 = t.61 + t.74 = call t.76(t.8 t.77) + t.78 = t.74 + PrintIntS(t.78) + t.79 = 10000000 + PrintIntS(t.79) + t.80 = HeapAllocZ(36) + [t.80+0] = :functable_Element + t.15 = t.80 + t.15 = t.15 + t.82 = [t.15+0] + t.83 = [t.82+0] + t.84 = 28 + t.85 = 35000 + t.86 = 0 + t.81 = call t.83(t.15 t.84 t.85 t.86) + t.4 = t.81 + t.8 = t.8 + t.88 = [t.8+0] + t.89 = [t.88+8] + t.90 = t.15 + t.87 = call t.89(t.8 t.90) + t.8 = t.87 + t.8 = t.8 + t.92 = [t.8+0] + t.93 = [t.92+36] + t.91 = call t.93(t.8 ) + t.4 = t.91 + t.94 = 2220000 + PrintIntS(t.94) + t.8 = t.8 + t.96 = [t.8+0] + t.97 = [t.96+16] + t.98 = t.38 + t.95 = call t.97(t.8 t.98) + t.8 = t.95 + t.8 = t.8 + t.100 = [t.8+0] + t.101 = [t.100+36] + t.99 = call t.101(t.8 ) + t.4 = t.99 + t.102 = 33300000 + PrintIntS(t.102) + t.8 = t.8 + t.104 = [t.8+0] + t.105 = [t.104+16] + t.106 = t.15 + t.103 = call t.105(t.8 t.106) + t.8 = t.103 + t.8 = t.8 + t.108 = [t.8+0] + t.109 = [t.108+36] + t.107 = call t.109(t.8 ) + t.4 = t.107 + t.110 = 44440000 + PrintIntS(t.110) + t.111 = 0 + ret t.111 + +func AllocArray(size) + bytes = MulS(size 4) + bytes = Add(bytes 4) + v = HeapAllocZ(bytes) + [v] = size + ret v + diff --git a/output/LinkedList.vaporm b/output/LinkedList.vaporm new file mode 100644 index 0000000..e69de29 diff --git a/output/MoreThan4.java b/output/MoreThan4.java new file mode 100644 index 0000000..4960f01 --- /dev/null +++ b/output/MoreThan4.java @@ -0,0 +1,29 @@ +class MoreThan4{ + public static void main(String[] a){ + System.out.println(new MT4().Start(1,2,3,4,5,6)); + } +} + +class MT4 { + public int Start(int p1, int p2, int p3 , int p4, int p5, int p6){ + int aux ; + System.out.println(p1); + System.out.println(p2); + System.out.println(p3); + System.out.println(p4); + System.out.println(p5); + System.out.println(p6); + aux = this.Change(p6,p5,p4,p3,p2,p1); + return aux ; + } + + public int Change(int p1, int p2, int p3 , int p4, int p5, int p6){ + System.out.println(p1); + System.out.println(p2); + System.out.println(p3); + System.out.println(p4); + System.out.println(p5); + System.out.println(p6); + return 0 ; + } +} diff --git a/output/MoreThan4.vapor b/output/MoreThan4.vapor new file mode 100644 index 0000000..fc09ab1 --- /dev/null +++ b/output/MoreThan4.vapor @@ -0,0 +1,70 @@ +func Main() + t.3 = HeapAllocZ(8) + [t.3+0] = :functable_MT4 + t.4 = t.3 + t.5 = [t.4+0] + t.6 = [t.5+0] + t.7 = 1 + t.8 = 2 + t.9 = 3 + t.10 = 4 + t.11 = 5 + t.12 = 6 + t.2 = call t.6(t.4 t.7 t.8 t.9 t.10 t.11 t.12) + t.13 = t.2 + PrintIntS(t.13) + ret + +const functable_MT4 + :MT4_Start + :MT4_Change + +func MT4_Start(this t.0 t.1 t.2 t.3 t.4 t.5 ) + t.6 = t.0 + PrintIntS(t.6) + t.7 = t.1 + PrintIntS(t.7) + t.8 = t.2 + PrintIntS(t.8) + t.9 = t.3 + PrintIntS(t.9) + t.10 = t.4 + PrintIntS(t.10) + t.11 = t.5 + PrintIntS(t.11) + t.14 = [this] + t.15 = t.5 + t.16 = t.4 + t.17 = t.3 + t.18 = t.2 + t.19 = t.1 + t.20 = t.0 + t.14 = [t.14+4] + t.13 = call t.14(this t.15 t.16 t.17 t.18 t.19 t.20) + t.12 = t.13 + t.21 = t.12 + ret t.21 + +func MT4_Change(this t.0 t.1 t.2 t.3 t.4 t.5 ) + t.6 = t.0 + PrintIntS(t.6) + t.7 = t.1 + PrintIntS(t.7) + t.8 = t.2 + PrintIntS(t.8) + t.9 = t.3 + PrintIntS(t.9) + t.10 = t.4 + PrintIntS(t.10) + t.11 = t.5 + PrintIntS(t.11) + t.12 = 0 + ret t.12 + +func AllocArray(size) + bytes = MulS(size 4) + bytes = Add(bytes 4) + v = HeapAllocZ(bytes) + [v] = size + ret v + diff --git a/output/MoreThan4.vaporm b/output/MoreThan4.vaporm new file mode 100644 index 0000000..e69de29 diff --git a/output/QuickSort.java b/output/QuickSort.java new file mode 100644 index 0000000..5893390 --- /dev/null +++ b/output/QuickSort.java @@ -0,0 +1,112 @@ +class QuickSort{ + public static void main(String[] a){ + System.out.println(new QS().Start(10)); + } +} + + +// This class contains the array of integers and +// methods to initialize, print and sort the array +// using Quicksort +class QS{ + + int[] number ; + int size ; + + // Invoke the Initialization, Sort and Printing + // Methods + public int Start(int sz){ + int aux01 ; + aux01 = this.Init(sz); + aux01 = this.Print(); + System.out.println(9999); + aux01 = size - 1 ; + aux01 = this.Sort(0,aux01); + aux01 = this.Print(); + return 0 ; + } + + + // Sort array of integers using Quicksort method + public int Sort(int left, int right){ + int v ; + int i ; + int j ; + int nt; + int t ; + boolean cont01; + boolean cont02; + int aux03 ; + t = 0 ; + if (left < right){ + v = number[right] ; + i = left - 1 ; + j = right ; + cont01 = true ; + while (cont01){ + cont02 = true ; + while (cont02){ + i = i + 1 ; + aux03 = number[i] ; + if (!(aux03