diff --git a/pa1-tests/README.md b/pa1-tests/README.md new file mode 100644 index 0000000..b1395dd --- /dev/null +++ b/pa1-tests/README.md @@ -0,0 +1,24 @@ +# Tests for PA1: ChocoPy Parser + +Clone a student repository: +``` +TEAM="team" +git clone --branch=pa1final \ + https://github.com/nyu-compiler-construction/pa1-chocopy-parser-${TEAM} +``` + +Build it: +``` +cd pa1-chocopy-parser-${TEAM} +mvn clean package +``` + +Clone the tests _into_ the student repository: +``` +git clone https://github.com/nyu-compiler-construction/pa1-tests +``` + +Run the tests: +``` +./pa1-tests/run-tests.sh +``` \ No newline at end of file diff --git a/pa1-tests/chocopy-ref.jar b/pa1-tests/chocopy-ref.jar new file mode 100644 index 0000000..31646a6 Binary files /dev/null and b/pa1-tests/chocopy-ref.jar differ diff --git a/pa1-tests/core/bad_assign_expr1.py b/pa1-tests/core/bad_assign_expr1.py new file mode 100644 index 0000000..ccc8c3e --- /dev/null +++ b/pa1-tests/core/bad_assign_expr1.py @@ -0,0 +1 @@ +x = (y = 2) diff --git a/pa1-tests/core/bad_assign_expr1.py.ast b/pa1-tests/core/bad_assign_expr1.py.ast new file mode 100644 index 0000000..d134770 --- /dev/null +++ b/pa1-tests/core/bad_assign_expr1.py.ast @@ -0,0 +1,16 @@ +{ + "kind" : "Program", + "location" : [ 1, 6, 1, 6 ], + "declarations" : [ ], + "statements" : [ ], + "errors" : { + "errors" : [ { + "kind" : "CompilerError", + "location" : [ 1, 8, 1, 8 ], + "message" : "Parse error near token EQ: =", + "syntax" : true + } ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/bad_assign_expr2.py b/pa1-tests/core/bad_assign_expr2.py new file mode 100644 index 0000000..444bc53 --- /dev/null +++ b/pa1-tests/core/bad_assign_expr2.py @@ -0,0 +1 @@ +print(x = 1) diff --git a/pa1-tests/core/bad_assign_expr2.py.ast b/pa1-tests/core/bad_assign_expr2.py.ast new file mode 100644 index 0000000..53e699c --- /dev/null +++ b/pa1-tests/core/bad_assign_expr2.py.ast @@ -0,0 +1,16 @@ +{ + "kind" : "Program", + "location" : [ 1, 7, 1, 7 ], + "declarations" : [ ], + "statements" : [ ], + "errors" : { + "errors" : [ { + "kind" : "CompilerError", + "location" : [ 1, 9, 1, 9 ], + "message" : "Parse error near token EQ: =", + "syntax" : true + } ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/bad_func_def.py b/pa1-tests/core/bad_func_def.py new file mode 100644 index 0000000..ebd2373 --- /dev/null +++ b/pa1-tests/core/bad_func_def.py @@ -0,0 +1,6 @@ +def foo(a, b) -> 1: + x:int = a + return 1 + +print(1) +print(3**6) diff --git a/pa1-tests/core/bad_func_def.py.ast b/pa1-tests/core/bad_func_def.py.ast new file mode 100644 index 0000000..934bef0 --- /dev/null +++ b/pa1-tests/core/bad_func_def.py.ast @@ -0,0 +1,64 @@ +{ + "kind" : "Program", + "location" : [ 2, 13, 6, 8 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 2, 13, 2, 13 ], + "expr" : { + "kind" : "Identifier", + "location" : [ 2, 13, 2, 13 ], + "name" : "a" + } + }, { + "kind" : "ReturnStmt", + "location" : [ 3, 5, 3, 12 ], + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 3, 12, 3, 12 ], + "value" : 1 + } + }, { + "kind" : "ExprStmt", + "location" : [ 5, 1, 5, 8 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 5, 1, 5, 8 ], + "function" : { + "kind" : "Identifier", + "location" : [ 5, 1, 5, 5 ], + "name" : "print" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 5, 7, 5, 7 ], + "value" : 1 + } ] + } + } ], + "errors" : { + "errors" : [ { + "kind" : "CompilerError", + "location" : [ 1, 10, 1, 10 ], + "message" : "Parse error near token COMMA: ,", + "syntax" : true + }, { + "kind" : "CompilerError", + "location" : [ 2, 13, 2, 13 ], + "message" : "Parse error near token IDENTIFIER: a", + "syntax" : true + }, { + "kind" : "CompilerError", + "location" : [ 5, 1, 5, 0 ], + "message" : "Parse error near token DEDENT: ", + "syntax" : true + }, { + "kind" : "CompilerError", + "location" : [ 6, 9, 6, 9 ], + "message" : "Parse error near token TIMES: *", + "syntax" : true + } ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/bad_indentation.py b/pa1-tests/core/bad_indentation.py new file mode 100644 index 0000000..670b7ab --- /dev/null +++ b/pa1-tests/core/bad_indentation.py @@ -0,0 +1,3 @@ +x = 1 + y = 2 +z = 3 diff --git a/pa1-tests/core/bad_indentation.py.ast b/pa1-tests/core/bad_indentation.py.ast new file mode 100644 index 0000000..f37b92e --- /dev/null +++ b/pa1-tests/core/bad_indentation.py.ast @@ -0,0 +1,47 @@ +{ + "kind" : "Program", + "location" : [ 2, 3, 3, 6 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 2, 3, 2, 7 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 2, 3, 2, 3 ], + "name" : "y" + } ], + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 2, 7, 2, 7 ], + "value" : 2 + } + }, { + "kind" : "AssignStmt", + "location" : [ 3, 1, 3, 5 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 3, 1, 3, 1 ], + "name" : "z" + } ], + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 3, 5, 3, 5 ], + "value" : 3 + } + } ], + "errors" : { + "errors" : [ { + "kind" : "CompilerError", + "location" : [ 2, 1, 2, 2 ], + "message" : "Parse error near token INDENT: ", + "syntax" : true + }, { + "kind" : "CompilerError", + "location" : [ 3, 1, 3, 0 ], + "message" : "Parse error near token DEDENT: ", + "syntax" : true + } ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/bad_stmt.py b/pa1-tests/core/bad_stmt.py new file mode 100644 index 0000000..8e8a4da --- /dev/null +++ b/pa1-tests/core/bad_stmt.py @@ -0,0 +1,4 @@ +1 + 2 +3 == 4 or (not False && True) +5 + 6 +7 << 8 diff --git a/pa1-tests/core/bad_stmt.py.ast b/pa1-tests/core/bad_stmt.py.ast new file mode 100644 index 0000000..afe9602 --- /dev/null +++ b/pa1-tests/core/bad_stmt.py.ast @@ -0,0 +1,65 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 4, 7 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 1, 1, 1, 5 ], + "expr" : { + "kind" : "BinaryExpr", + "location" : [ 1, 1, 1, 5 ], + "left" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 1, 1, 1 ], + "value" : 1 + }, + "operator" : "+", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 5, 1, 5 ], + "value" : 2 + } + } + }, { + "kind" : "ExprStmt", + "location" : [ 3, 1, 3, 5 ], + "expr" : { + "kind" : "BinaryExpr", + "location" : [ 3, 1, 3, 5 ], + "left" : { + "kind" : "IntegerLiteral", + "location" : [ 3, 1, 3, 1 ], + "value" : 5 + }, + "operator" : "+", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 3, 5, 3, 5 ], + "value" : 6 + } + } + }, { + "kind" : "ExprStmt", + "location" : [ 4, 6, 4, 6 ], + "expr" : { + "kind" : "IntegerLiteral", + "location" : [ 4, 6, 4, 6 ], + "value" : 8 + } + } ], + "errors" : { + "errors" : [ { + "kind" : "CompilerError", + "location" : [ 2, 22, 2, 22 ], + "message" : "Parse error near token UNRECOGNIZED: &", + "syntax" : true + }, { + "kind" : "CompilerError", + "location" : [ 4, 4, 4, 4 ], + "message" : "Parse error near token LT: <", + "syntax" : true + } ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/chained_mixed_assignments.py b/pa1-tests/core/chained_mixed_assignments.py new file mode 100644 index 0000000..46a230a --- /dev/null +++ b/pa1-tests/core/chained_mixed_assignments.py @@ -0,0 +1,2 @@ +x[0] = y = z.f = 1 +z.g = y = x[0] diff --git a/pa1-tests/core/chained_mixed_assignments.py.ast b/pa1-tests/core/chained_mixed_assignments.py.ast new file mode 100644 index 0000000..9654bf6 --- /dev/null +++ b/pa1-tests/core/chained_mixed_assignments.py.ast @@ -0,0 +1,85 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 2, 15 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 1, 1, 1, 18 ], + "targets" : [ { + "kind" : "IndexExpr", + "location" : [ 1, 1, 1, 4 ], + "list" : { + "kind" : "Identifier", + "location" : [ 1, 1, 1, 1 ], + "name" : "x" + }, + "index" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 3, 1, 3 ], + "value" : 0 + } + }, { + "kind" : "Identifier", + "location" : [ 1, 8, 1, 8 ], + "name" : "y" + }, { + "kind" : "MemberExpr", + "location" : [ 1, 12, 1, 14 ], + "object" : { + "kind" : "Identifier", + "location" : [ 1, 12, 1, 12 ], + "name" : "z" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 1, 14, 1, 14 ], + "name" : "f" + } + } ], + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 18, 1, 18 ], + "value" : 1 + } + }, { + "kind" : "AssignStmt", + "location" : [ 2, 1, 2, 14 ], + "targets" : [ { + "kind" : "MemberExpr", + "location" : [ 2, 1, 2, 3 ], + "object" : { + "kind" : "Identifier", + "location" : [ 2, 1, 2, 1 ], + "name" : "z" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 2, 3, 2, 3 ], + "name" : "g" + } + }, { + "kind" : "Identifier", + "location" : [ 2, 7, 2, 7 ], + "name" : "y" + } ], + "value" : { + "kind" : "IndexExpr", + "location" : [ 2, 11, 2, 14 ], + "list" : { + "kind" : "Identifier", + "location" : [ 2, 11, 2, 11 ], + "name" : "x" + }, + "index" : { + "kind" : "IntegerLiteral", + "location" : [ 2, 13, 2, 13 ], + "value" : 0 + } + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/chained_var_assignments.py b/pa1-tests/core/chained_var_assignments.py new file mode 100644 index 0000000..b253c2a --- /dev/null +++ b/pa1-tests/core/chained_var_assignments.py @@ -0,0 +1 @@ +x = y = z = 1 diff --git a/pa1-tests/core/chained_var_assignments.py.ast b/pa1-tests/core/chained_var_assignments.py.ast new file mode 100644 index 0000000..28f0ea7 --- /dev/null +++ b/pa1-tests/core/chained_var_assignments.py.ast @@ -0,0 +1,32 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 1, 14 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 1, 1, 1, 13 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 1, 1, 1, 1 ], + "name" : "x" + }, { + "kind" : "Identifier", + "location" : [ 1, 5, 1, 5 ], + "name" : "y" + }, { + "kind" : "Identifier", + "location" : [ 1, 9, 1, 9 ], + "name" : "z" + } ], + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 13, 1, 13 ], + "value" : 1 + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/class_attr.py b/pa1-tests/core/class_attr.py new file mode 100644 index 0000000..bb1e1cd --- /dev/null +++ b/pa1-tests/core/class_attr.py @@ -0,0 +1,4 @@ +class Foo(object): + x:int = 1 + +f = Foo() diff --git a/pa1-tests/core/class_attr.py.ast b/pa1-tests/core/class_attr.py.ast new file mode 100644 index 0000000..4fdab40 --- /dev/null +++ b/pa1-tests/core/class_attr.py.ast @@ -0,0 +1,65 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 4, 10 ], + "declarations" : [ { + "kind" : "ClassDef", + "location" : [ 1, 1, 2, 14 ], + "name" : { + "kind" : "Identifier", + "location" : [ 1, 7, 1, 9 ], + "name" : "Foo" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 1, 11, 1, 16 ], + "name" : "object" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 2, 5, 2, 13 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 2, 5, 2, 9 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 2, 5, 2, 5 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 2, 7, 2, 9 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 2, 13, 2, 13 ], + "value" : 1 + } + } ] + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 4, 1, 4, 9 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 4, 1, 4, 1 ], + "name" : "f" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 4, 5, 4, 9 ], + "function" : { + "kind" : "Identifier", + "location" : [ 4, 5, 4, 7 ], + "name" : "Foo" + }, + "args" : [ ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/class_attr_get.py b/pa1-tests/core/class_attr_get.py new file mode 100644 index 0000000..b4e6365 --- /dev/null +++ b/pa1-tests/core/class_attr_get.py @@ -0,0 +1,5 @@ +class Foo(object): + x:int = 1 + +f = Foo() +print(f.x) diff --git a/pa1-tests/core/class_attr_get.py.ast b/pa1-tests/core/class_attr_get.py.ast new file mode 100644 index 0000000..f286342 --- /dev/null +++ b/pa1-tests/core/class_attr_get.py.ast @@ -0,0 +1,91 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 5, 11 ], + "declarations" : [ { + "kind" : "ClassDef", + "location" : [ 1, 1, 2, 14 ], + "name" : { + "kind" : "Identifier", + "location" : [ 1, 7, 1, 9 ], + "name" : "Foo" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 1, 11, 1, 16 ], + "name" : "object" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 2, 5, 2, 13 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 2, 5, 2, 9 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 2, 5, 2, 5 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 2, 7, 2, 9 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 2, 13, 2, 13 ], + "value" : 1 + } + } ] + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 4, 1, 4, 9 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 4, 1, 4, 1 ], + "name" : "f" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 4, 5, 4, 9 ], + "function" : { + "kind" : "Identifier", + "location" : [ 4, 5, 4, 7 ], + "name" : "Foo" + }, + "args" : [ ] + } + }, { + "kind" : "ExprStmt", + "location" : [ 5, 1, 5, 10 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 5, 1, 5, 10 ], + "function" : { + "kind" : "Identifier", + "location" : [ 5, 1, 5, 5 ], + "name" : "print" + }, + "args" : [ { + "kind" : "MemberExpr", + "location" : [ 5, 7, 5, 9 ], + "object" : { + "kind" : "Identifier", + "location" : [ 5, 7, 5, 7 ], + "name" : "f" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 5, 9, 5, 9 ], + "name" : "x" + } + } ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/class_attr_set.py b/pa1-tests/core/class_attr_set.py new file mode 100644 index 0000000..ac94bf8 --- /dev/null +++ b/pa1-tests/core/class_attr_set.py @@ -0,0 +1,5 @@ +class Foo(object): + x:int = 1 + +f = Foo() +f.x = 2 diff --git a/pa1-tests/core/class_attr_set.py.ast b/pa1-tests/core/class_attr_set.py.ast new file mode 100644 index 0000000..03d6bba --- /dev/null +++ b/pa1-tests/core/class_attr_set.py.ast @@ -0,0 +1,87 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 5, 8 ], + "declarations" : [ { + "kind" : "ClassDef", + "location" : [ 1, 1, 2, 14 ], + "name" : { + "kind" : "Identifier", + "location" : [ 1, 7, 1, 9 ], + "name" : "Foo" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 1, 11, 1, 16 ], + "name" : "object" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 2, 5, 2, 13 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 2, 5, 2, 9 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 2, 5, 2, 5 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 2, 7, 2, 9 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 2, 13, 2, 13 ], + "value" : 1 + } + } ] + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 4, 1, 4, 9 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 4, 1, 4, 1 ], + "name" : "f" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 4, 5, 4, 9 ], + "function" : { + "kind" : "Identifier", + "location" : [ 4, 5, 4, 7 ], + "name" : "Foo" + }, + "args" : [ ] + } + }, { + "kind" : "AssignStmt", + "location" : [ 5, 1, 5, 7 ], + "targets" : [ { + "kind" : "MemberExpr", + "location" : [ 5, 1, 5, 3 ], + "object" : { + "kind" : "Identifier", + "location" : [ 5, 1, 5, 1 ], + "name" : "f" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 5, 3, 5, 3 ], + "name" : "x" + } + } ], + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 5, 7, 5, 7 ], + "value" : 2 + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/class_constructor.py b/pa1-tests/core/class_constructor.py new file mode 100644 index 0000000..46d7ccb --- /dev/null +++ b/pa1-tests/core/class_constructor.py @@ -0,0 +1,8 @@ +class Foo(object): + x:int = 0 + + def __init__(self:"Foo", x:int): + self.x = x + +f = Foo(1) +print(f.x) diff --git a/pa1-tests/core/class_constructor.py.ast b/pa1-tests/core/class_constructor.py.ast new file mode 100644 index 0000000..6850e03 --- /dev/null +++ b/pa1-tests/core/class_constructor.py.ast @@ -0,0 +1,159 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 8, 11 ], + "declarations" : [ { + "kind" : "ClassDef", + "location" : [ 1, 1, 7, 0 ], + "name" : { + "kind" : "Identifier", + "location" : [ 1, 7, 1, 9 ], + "name" : "Foo" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 1, 11, 1, 16 ], + "name" : "object" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 2, 5, 2, 13 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 2, 5, 2, 9 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 2, 5, 2, 5 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 2, 7, 2, 9 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 2, 13, 2, 13 ], + "value" : 0 + } + }, { + "kind" : "FuncDef", + "location" : [ 4, 5, 5, 19 ], + "name" : { + "kind" : "Identifier", + "location" : [ 4, 9, 4, 16 ], + "name" : "__init__" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 4, 18, 4, 27 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 4, 18, 4, 21 ], + "name" : "self" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 4, 23, 4, 27 ], + "className" : "Foo" + } + }, { + "kind" : "TypedVar", + "location" : [ 4, 30, 4, 34 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 4, 30, 4, 30 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 4, 32, 4, 34 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 4, 36, 4, 36 ], + "className" : "" + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 5, 9, 5, 18 ], + "targets" : [ { + "kind" : "MemberExpr", + "location" : [ 5, 9, 5, 14 ], + "object" : { + "kind" : "Identifier", + "location" : [ 5, 9, 5, 12 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 5, 14, 5, 14 ], + "name" : "x" + } + } ], + "value" : { + "kind" : "Identifier", + "location" : [ 5, 18, 5, 18 ], + "name" : "x" + } + } ] + } ] + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 7, 1, 7, 10 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 7, 1, 7, 1 ], + "name" : "f" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 7, 5, 7, 10 ], + "function" : { + "kind" : "Identifier", + "location" : [ 7, 5, 7, 7 ], + "name" : "Foo" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 7, 9, 7, 9 ], + "value" : 1 + } ] + } + }, { + "kind" : "ExprStmt", + "location" : [ 8, 1, 8, 10 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 8, 1, 8, 10 ], + "function" : { + "kind" : "Identifier", + "location" : [ 8, 1, 8, 5 ], + "name" : "print" + }, + "args" : [ { + "kind" : "MemberExpr", + "location" : [ 8, 7, 8, 9 ], + "object" : { + "kind" : "Identifier", + "location" : [ 8, 7, 8, 7 ], + "name" : "f" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 8, 9, 8, 9 ], + "name" : "x" + } + } ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/class_method.py b/pa1-tests/core/class_method.py new file mode 100644 index 0000000..cc03ce2 --- /dev/null +++ b/pa1-tests/core/class_method.py @@ -0,0 +1,9 @@ +class Foo(object): + x:int = 0 + + def set(self:"Foo", x:int) -> object: + self.x = x + +f = Foo() +f.set(1) +print(f.x) diff --git a/pa1-tests/core/class_method.py.ast b/pa1-tests/core/class_method.py.ast new file mode 100644 index 0000000..66bc2e1 --- /dev/null +++ b/pa1-tests/core/class_method.py.ast @@ -0,0 +1,181 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 9, 11 ], + "declarations" : [ { + "kind" : "ClassDef", + "location" : [ 1, 1, 7, 0 ], + "name" : { + "kind" : "Identifier", + "location" : [ 1, 7, 1, 9 ], + "name" : "Foo" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 1, 11, 1, 16 ], + "name" : "object" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 2, 5, 2, 13 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 2, 5, 2, 9 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 2, 5, 2, 5 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 2, 7, 2, 9 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 2, 13, 2, 13 ], + "value" : 0 + } + }, { + "kind" : "FuncDef", + "location" : [ 4, 5, 5, 19 ], + "name" : { + "kind" : "Identifier", + "location" : [ 4, 9, 4, 11 ], + "name" : "set" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 4, 13, 4, 22 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 4, 13, 4, 16 ], + "name" : "self" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 4, 18, 4, 22 ], + "className" : "Foo" + } + }, { + "kind" : "TypedVar", + "location" : [ 4, 25, 4, 29 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 4, 25, 4, 25 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 4, 27, 4, 29 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 4, 35, 4, 40 ], + "className" : "object" + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 5, 9, 5, 18 ], + "targets" : [ { + "kind" : "MemberExpr", + "location" : [ 5, 9, 5, 14 ], + "object" : { + "kind" : "Identifier", + "location" : [ 5, 9, 5, 12 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 5, 14, 5, 14 ], + "name" : "x" + } + } ], + "value" : { + "kind" : "Identifier", + "location" : [ 5, 18, 5, 18 ], + "name" : "x" + } + } ] + } ] + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 7, 1, 7, 9 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 7, 1, 7, 1 ], + "name" : "f" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 7, 5, 7, 9 ], + "function" : { + "kind" : "Identifier", + "location" : [ 7, 5, 7, 7 ], + "name" : "Foo" + }, + "args" : [ ] + } + }, { + "kind" : "ExprStmt", + "location" : [ 8, 1, 8, 8 ], + "expr" : { + "kind" : "MethodCallExpr", + "location" : [ 8, 1, 8, 8 ], + "method" : { + "kind" : "MemberExpr", + "location" : [ 8, 1, 8, 5 ], + "object" : { + "kind" : "Identifier", + "location" : [ 8, 1, 8, 1 ], + "name" : "f" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 8, 3, 8, 5 ], + "name" : "set" + } + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 8, 7, 8, 7 ], + "value" : 1 + } ] + } + }, { + "kind" : "ExprStmt", + "location" : [ 9, 1, 9, 10 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 9, 1, 9, 10 ], + "function" : { + "kind" : "Identifier", + "location" : [ 9, 1, 9, 5 ], + "name" : "print" + }, + "args" : [ { + "kind" : "MemberExpr", + "location" : [ 9, 7, 9, 9 ], + "object" : { + "kind" : "Identifier", + "location" : [ 9, 7, 9, 7 ], + "name" : "f" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 9, 9, 9, 9 ], + "name" : "x" + } + } ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/coverage.py b/pa1-tests/core/coverage.py new file mode 100644 index 0000000..1da3446 --- /dev/null +++ b/pa1-tests/core/coverage.py @@ -0,0 +1,38 @@ +count:int = 0 + +def foo(s: str) -> int: + return len(s) + +class bar(object): + p: bool = True + + def baz(self:"bar", xx: [int]) -> str: + global count + x:int = 0 + y:int = 1 + + def qux(y: int) -> object: + nonlocal x + if x > y: + x = -1 + + for x in xx: + self.p = x == 2 + + qux(0) # Yay! ChocoPy + + count = count + 1 + + while x <= 0: + if self.p: + xx[0] = xx[1] + self.p = not self.p + x = x + 1 + elif foo("Long"[0]) == 1: + return self is None + + return "Nope" + +print(bar().baz([1,2])) + + diff --git a/pa1-tests/core/coverage.py.ast b/pa1-tests/core/coverage.py.ast new file mode 100644 index 0000000..c7bab9f --- /dev/null +++ b/pa1-tests/core/coverage.py.ast @@ -0,0 +1,613 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 36, 24 ], + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 1, 1, 1, 13 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 1, 1, 1, 9 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 1, 1, 1, 5 ], + "name" : "count" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 1, 7, 1, 9 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 13, 1, 13 ], + "value" : 0 + } + }, { + "kind" : "FuncDef", + "location" : [ 3, 1, 4, 18 ], + "name" : { + "kind" : "Identifier", + "location" : [ 3, 5, 3, 7 ], + "name" : "foo" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 3, 9, 3, 14 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 3, 9, 3, 9 ], + "name" : "s" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 3, 12, 3, 14 ], + "className" : "str" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 3, 20, 3, 22 ], + "className" : "int" + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 4, 5, 4, 17 ], + "value" : { + "kind" : "CallExpr", + "location" : [ 4, 12, 4, 17 ], + "function" : { + "kind" : "Identifier", + "location" : [ 4, 12, 4, 14 ], + "name" : "len" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 4, 16, 4, 16 ], + "name" : "s" + } ] + } + } ] + }, { + "kind" : "ClassDef", + "location" : [ 6, 1, 36, 0 ], + "name" : { + "kind" : "Identifier", + "location" : [ 6, 7, 6, 9 ], + "name" : "bar" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 6, 11, 6, 16 ], + "name" : "object" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 7, 5, 7, 18 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 7, 5, 7, 11 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 7, 5, 7, 5 ], + "name" : "p" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 7, 8, 7, 11 ], + "className" : "bool" + } + }, + "value" : { + "kind" : "BooleanLiteral", + "location" : [ 7, 15, 7, 18 ], + "value" : true + } + }, { + "kind" : "FuncDef", + "location" : [ 9, 5, 34, 22 ], + "name" : { + "kind" : "Identifier", + "location" : [ 9, 9, 9, 11 ], + "name" : "baz" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 9, 13, 9, 22 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 9, 13, 9, 16 ], + "name" : "self" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 9, 18, 9, 22 ], + "className" : "bar" + } + }, { + "kind" : "TypedVar", + "location" : [ 9, 25, 9, 33 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 9, 25, 9, 26 ], + "name" : "xx" + }, + "type" : { + "kind" : "ListType", + "location" : [ 9, 29, 9, 33 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 9, 30, 9, 32 ], + "className" : "int" + } + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 9, 39, 9, 41 ], + "className" : "str" + }, + "declarations" : [ { + "kind" : "GlobalDecl", + "location" : [ 10, 9, 10, 20 ], + "variable" : { + "kind" : "Identifier", + "location" : [ 10, 16, 10, 20 ], + "name" : "count" + } + }, { + "kind" : "VarDef", + "location" : [ 11, 9, 11, 17 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 11, 9, 11, 13 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 11, 9, 11, 9 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 11, 11, 11, 13 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 11, 17, 11, 17 ], + "value" : 0 + } + }, { + "kind" : "VarDef", + "location" : [ 12, 9, 12, 17 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 12, 9, 12, 13 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 12, 9, 12, 9 ], + "name" : "y" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 12, 11, 12, 13 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 12, 17, 12, 17 ], + "value" : 1 + } + }, { + "kind" : "FuncDef", + "location" : [ 14, 9, 19, 8 ], + "name" : { + "kind" : "Identifier", + "location" : [ 14, 13, 14, 15 ], + "name" : "qux" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 14, 17, 14, 22 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 14, 17, 14, 17 ], + "name" : "y" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 14, 20, 14, 22 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 14, 28, 14, 33 ], + "className" : "object" + }, + "declarations" : [ { + "kind" : "NonLocalDecl", + "location" : [ 15, 13, 15, 22 ], + "variable" : { + "kind" : "Identifier", + "location" : [ 15, 22, 15, 22 ], + "name" : "x" + } + } ], + "statements" : [ { + "kind" : "IfStmt", + "location" : [ 16, 13, 19, 8 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 16, 16, 16, 20 ], + "left" : { + "kind" : "Identifier", + "location" : [ 16, 16, 16, 16 ], + "name" : "x" + }, + "operator" : ">", + "right" : { + "kind" : "Identifier", + "location" : [ 16, 20, 16, 20 ], + "name" : "y" + } + }, + "thenBody" : [ { + "kind" : "AssignStmt", + "location" : [ 17, 17, 17, 22 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 17, 17, 17, 17 ], + "name" : "x" + } ], + "value" : { + "kind" : "UnaryExpr", + "location" : [ 17, 21, 17, 22 ], + "operator" : "-", + "operand" : { + "kind" : "IntegerLiteral", + "location" : [ 17, 22, 17, 22 ], + "value" : 1 + } + } + } ], + "elseBody" : [ ] + } ] + } ], + "statements" : [ { + "kind" : "ForStmt", + "location" : [ 19, 9, 22, 8 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 19, 13, 19, 13 ], + "name" : "x" + }, + "iterable" : { + "kind" : "Identifier", + "location" : [ 19, 18, 19, 19 ], + "name" : "xx" + }, + "body" : [ { + "kind" : "AssignStmt", + "location" : [ 20, 13, 20, 27 ], + "targets" : [ { + "kind" : "MemberExpr", + "location" : [ 20, 13, 20, 18 ], + "object" : { + "kind" : "Identifier", + "location" : [ 20, 13, 20, 16 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 20, 18, 20, 18 ], + "name" : "p" + } + } ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 20, 22, 20, 27 ], + "left" : { + "kind" : "Identifier", + "location" : [ 20, 22, 20, 22 ], + "name" : "x" + }, + "operator" : "==", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 20, 27, 20, 27 ], + "value" : 2 + } + } + } ] + }, { + "kind" : "ExprStmt", + "location" : [ 22, 9, 22, 14 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 22, 9, 22, 14 ], + "function" : { + "kind" : "Identifier", + "location" : [ 22, 9, 22, 11 ], + "name" : "qux" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 22, 13, 22, 13 ], + "value" : 0 + } ] + } + }, { + "kind" : "AssignStmt", + "location" : [ 24, 9, 24, 25 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 24, 9, 24, 13 ], + "name" : "count" + } ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 24, 17, 24, 25 ], + "left" : { + "kind" : "Identifier", + "location" : [ 24, 17, 24, 21 ], + "name" : "count" + }, + "operator" : "+", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 24, 25, 24, 25 ], + "value" : 1 + } + } + }, { + "kind" : "WhileStmt", + "location" : [ 26, 9, 34, 8 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 26, 15, 26, 20 ], + "left" : { + "kind" : "Identifier", + "location" : [ 26, 15, 26, 15 ], + "name" : "x" + }, + "operator" : "<=", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 26, 20, 26, 20 ], + "value" : 0 + } + }, + "body" : [ { + "kind" : "IfStmt", + "location" : [ 27, 13, 34, 8 ], + "condition" : { + "kind" : "MemberExpr", + "location" : [ 27, 16, 27, 21 ], + "object" : { + "kind" : "Identifier", + "location" : [ 27, 16, 27, 19 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 27, 21, 27, 21 ], + "name" : "p" + } + }, + "thenBody" : [ { + "kind" : "AssignStmt", + "location" : [ 28, 17, 28, 29 ], + "targets" : [ { + "kind" : "IndexExpr", + "location" : [ 28, 17, 28, 21 ], + "list" : { + "kind" : "Identifier", + "location" : [ 28, 17, 28, 18 ], + "name" : "xx" + }, + "index" : { + "kind" : "IntegerLiteral", + "location" : [ 28, 20, 28, 20 ], + "value" : 0 + } + } ], + "value" : { + "kind" : "IndexExpr", + "location" : [ 28, 25, 28, 29 ], + "list" : { + "kind" : "Identifier", + "location" : [ 28, 25, 28, 26 ], + "name" : "xx" + }, + "index" : { + "kind" : "IntegerLiteral", + "location" : [ 28, 28, 28, 28 ], + "value" : 1 + } + } + }, { + "kind" : "AssignStmt", + "location" : [ 29, 17, 29, 35 ], + "targets" : [ { + "kind" : "MemberExpr", + "location" : [ 29, 17, 29, 22 ], + "object" : { + "kind" : "Identifier", + "location" : [ 29, 17, 29, 20 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 29, 22, 29, 22 ], + "name" : "p" + } + } ], + "value" : { + "kind" : "UnaryExpr", + "location" : [ 29, 26, 29, 35 ], + "operator" : "not", + "operand" : { + "kind" : "MemberExpr", + "location" : [ 29, 30, 29, 35 ], + "object" : { + "kind" : "Identifier", + "location" : [ 29, 30, 29, 33 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 29, 35, 29, 35 ], + "name" : "p" + } + } + } + }, { + "kind" : "AssignStmt", + "location" : [ 30, 17, 30, 25 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 30, 17, 30, 17 ], + "name" : "x" + } ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 30, 21, 30, 25 ], + "left" : { + "kind" : "Identifier", + "location" : [ 30, 21, 30, 21 ], + "name" : "x" + }, + "operator" : "+", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 30, 25, 30, 25 ], + "value" : 1 + } + } + } ], + "elseBody" : [ { + "kind" : "IfStmt", + "location" : [ 31, 13, 34, 8 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 31, 18, 31, 36 ], + "left" : { + "kind" : "CallExpr", + "location" : [ 31, 18, 31, 31 ], + "function" : { + "kind" : "Identifier", + "location" : [ 31, 18, 31, 20 ], + "name" : "foo" + }, + "args" : [ { + "kind" : "IndexExpr", + "location" : [ 31, 22, 31, 30 ], + "list" : { + "kind" : "StringLiteral", + "location" : [ 31, 22, 31, 27 ], + "value" : "Long" + }, + "index" : { + "kind" : "IntegerLiteral", + "location" : [ 31, 29, 31, 29 ], + "value" : 0 + } + } ] + }, + "operator" : "==", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 31, 36, 31, 36 ], + "value" : 1 + } + }, + "thenBody" : [ { + "kind" : "ReturnStmt", + "location" : [ 32, 17, 32, 35 ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 32, 24, 32, 35 ], + "left" : { + "kind" : "Identifier", + "location" : [ 32, 24, 32, 27 ], + "name" : "self" + }, + "operator" : "is", + "right" : { + "kind" : "NoneLiteral", + "location" : [ 32, 32, 32, 35 ] + } + } + } ], + "elseBody" : [ ] + } ] + } ] + }, { + "kind" : "ReturnStmt", + "location" : [ 34, 9, 34, 21 ], + "value" : { + "kind" : "StringLiteral", + "location" : [ 34, 16, 34, 21 ], + "value" : "Nope" + } + } ] + } ] + } ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 36, 1, 36, 23 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 36, 1, 36, 23 ], + "function" : { + "kind" : "Identifier", + "location" : [ 36, 1, 36, 5 ], + "name" : "print" + }, + "args" : [ { + "kind" : "MethodCallExpr", + "location" : [ 36, 7, 36, 22 ], + "method" : { + "kind" : "MemberExpr", + "location" : [ 36, 7, 36, 15 ], + "object" : { + "kind" : "CallExpr", + "location" : [ 36, 7, 36, 11 ], + "function" : { + "kind" : "Identifier", + "location" : [ 36, 7, 36, 9 ], + "name" : "bar" + }, + "args" : [ ] + }, + "member" : { + "kind" : "Identifier", + "location" : [ 36, 13, 36, 15 ], + "name" : "baz" + } + }, + "args" : [ { + "kind" : "ListExpr", + "location" : [ 36, 17, 36, 21 ], + "elements" : [ { + "kind" : "IntegerLiteral", + "location" : [ 36, 18, 36, 18 ], + "value" : 1 + }, { + "kind" : "IntegerLiteral", + "location" : [ 36, 20, 36, 20 ], + "value" : 2 + } ] + } ] + } ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/def_func.py b/pa1-tests/core/def_func.py new file mode 100644 index 0000000..55e9c43 --- /dev/null +++ b/pa1-tests/core/def_func.py @@ -0,0 +1,4 @@ +def foo() -> int: + return 1 + +foo() diff --git a/pa1-tests/core/def_func.py.ast b/pa1-tests/core/def_func.py.ast new file mode 100644 index 0000000..00a7e65 --- /dev/null +++ b/pa1-tests/core/def_func.py.ast @@ -0,0 +1,48 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 4, 6 ], + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 1, 1, 2, 13 ], + "name" : { + "kind" : "Identifier", + "location" : [ 1, 5, 1, 7 ], + "name" : "foo" + }, + "params" : [ ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 1, 14, 1, 16 ], + "className" : "int" + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 2, 5, 2, 12 ], + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 2, 12, 2, 12 ], + "value" : 1 + } + } ] + } ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 4, 1, 4, 5 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 4, 1, 4, 5 ], + "function" : { + "kind" : "Identifier", + "location" : [ 4, 1, 4, 3 ], + "name" : "foo" + }, + "args" : [ ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/def_func_args.py b/pa1-tests/core/def_func_args.py new file mode 100644 index 0000000..196f504 --- /dev/null +++ b/pa1-tests/core/def_func_args.py @@ -0,0 +1,4 @@ +def foo(x:int, y:int) -> bool: + return x > y + +foo(1,2) diff --git a/pa1-tests/core/def_func_args.py.ast b/pa1-tests/core/def_func_args.py.ast new file mode 100644 index 0000000..77d9dc9 --- /dev/null +++ b/pa1-tests/core/def_func_args.py.ast @@ -0,0 +1,92 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 4, 9 ], + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 1, 1, 2, 17 ], + "name" : { + "kind" : "Identifier", + "location" : [ 1, 5, 1, 7 ], + "name" : "foo" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 1, 9, 1, 13 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 1, 9, 1, 9 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 1, 11, 1, 13 ], + "className" : "int" + } + }, { + "kind" : "TypedVar", + "location" : [ 1, 16, 1, 20 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 1, 16, 1, 16 ], + "name" : "y" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 1, 18, 1, 20 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 1, 26, 1, 29 ], + "className" : "bool" + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 2, 5, 2, 16 ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 2, 12, 2, 16 ], + "left" : { + "kind" : "Identifier", + "location" : [ 2, 12, 2, 12 ], + "name" : "x" + }, + "operator" : ">", + "right" : { + "kind" : "Identifier", + "location" : [ 2, 16, 2, 16 ], + "name" : "y" + } + } + } ] + } ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 4, 1, 4, 8 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 4, 1, 4, 8 ], + "function" : { + "kind" : "Identifier", + "location" : [ 4, 1, 4, 3 ], + "name" : "foo" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 4, 5, 4, 5 ], + "value" : 1 + }, { + "kind" : "IntegerLiteral", + "location" : [ 4, 7, 4, 7 ], + "value" : 2 + } ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/def_func_global.py b/pa1-tests/core/def_func_global.py new file mode 100644 index 0000000..12f9dfc --- /dev/null +++ b/pa1-tests/core/def_func_global.py @@ -0,0 +1,7 @@ +z:int = 0 + +def foo(x:int) -> bool: + global z + return x > z + +foo(1) diff --git a/pa1-tests/core/def_func_global.py.ast b/pa1-tests/core/def_func_global.py.ast new file mode 100644 index 0000000..736af77 --- /dev/null +++ b/pa1-tests/core/def_func_global.py.ast @@ -0,0 +1,105 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 7, 7 ], + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 1, 1, 1, 9 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 1, 1, 1, 5 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 1, 1, 1, 1 ], + "name" : "z" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 1, 3, 1, 5 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 9, 1, 9 ], + "value" : 0 + } + }, { + "kind" : "FuncDef", + "location" : [ 3, 1, 5, 17 ], + "name" : { + "kind" : "Identifier", + "location" : [ 3, 5, 3, 7 ], + "name" : "foo" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 3, 9, 3, 13 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 3, 9, 3, 9 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 3, 11, 3, 13 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 3, 19, 3, 22 ], + "className" : "bool" + }, + "declarations" : [ { + "kind" : "GlobalDecl", + "location" : [ 4, 5, 4, 12 ], + "variable" : { + "kind" : "Identifier", + "location" : [ 4, 12, 4, 12 ], + "name" : "z" + } + } ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 5, 5, 5, 16 ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 5, 12, 5, 16 ], + "left" : { + "kind" : "Identifier", + "location" : [ 5, 12, 5, 12 ], + "name" : "x" + }, + "operator" : ">", + "right" : { + "kind" : "Identifier", + "location" : [ 5, 16, 5, 16 ], + "name" : "z" + } + } + } ] + } ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 7, 1, 7, 6 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 7, 1, 7, 6 ], + "function" : { + "kind" : "Identifier", + "location" : [ 7, 1, 7, 3 ], + "name" : "foo" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 7, 5, 7, 5 ], + "value" : 1 + } ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/def_func_nested.py b/pa1-tests/core/def_func_nested.py new file mode 100644 index 0000000..835614e --- /dev/null +++ b/pa1-tests/core/def_func_nested.py @@ -0,0 +1,10 @@ + +def foo(x:int) -> bool: + a:int = 0 + b:int = 1 + def bar(y: int) -> int: + a:int = 2 + return y + return bar(x) > a + +foo(1) diff --git a/pa1-tests/core/def_func_nested.py.ast b/pa1-tests/core/def_func_nested.py.ast new file mode 100644 index 0000000..0024178 --- /dev/null +++ b/pa1-tests/core/def_func_nested.py.ast @@ -0,0 +1,187 @@ +{ + "kind" : "Program", + "location" : [ 2, 1, 10, 7 ], + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 2, 1, 8, 22 ], + "name" : { + "kind" : "Identifier", + "location" : [ 2, 5, 2, 7 ], + "name" : "foo" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 2, 9, 2, 13 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 2, 9, 2, 9 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 2, 11, 2, 13 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 2, 19, 2, 22 ], + "className" : "bool" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 3, 5, 3, 13 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 3, 5, 3, 9 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 3, 5, 3, 5 ], + "name" : "a" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 3, 7, 3, 9 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 3, 13, 3, 13 ], + "value" : 0 + } + }, { + "kind" : "VarDef", + "location" : [ 4, 5, 4, 13 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 4, 5, 4, 9 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 4, 5, 4, 5 ], + "name" : "b" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 4, 7, 4, 9 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 4, 13, 4, 13 ], + "value" : 1 + } + }, { + "kind" : "FuncDef", + "location" : [ 5, 5, 7, 17 ], + "name" : { + "kind" : "Identifier", + "location" : [ 5, 9, 5, 11 ], + "name" : "bar" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 5, 13, 5, 18 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 5, 13, 5, 13 ], + "name" : "y" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 5, 16, 5, 18 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 5, 24, 5, 26 ], + "className" : "int" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 6, 9, 6, 17 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 6, 9, 6, 13 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 6, 9, 6, 9 ], + "name" : "a" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 6, 11, 6, 13 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 6, 17, 6, 17 ], + "value" : 2 + } + } ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 7, 9, 7, 16 ], + "value" : { + "kind" : "Identifier", + "location" : [ 7, 16, 7, 16 ], + "name" : "y" + } + } ] + } ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 8, 5, 8, 21 ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 8, 12, 8, 21 ], + "left" : { + "kind" : "CallExpr", + "location" : [ 8, 12, 8, 17 ], + "function" : { + "kind" : "Identifier", + "location" : [ 8, 12, 8, 14 ], + "name" : "bar" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 8, 16, 8, 16 ], + "name" : "x" + } ] + }, + "operator" : ">", + "right" : { + "kind" : "Identifier", + "location" : [ 8, 21, 8, 21 ], + "name" : "a" + } + } + } ] + } ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 10, 1, 10, 6 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 10, 1, 10, 6 ], + "function" : { + "kind" : "Identifier", + "location" : [ 10, 1, 10, 3 ], + "name" : "foo" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 10, 5, 10, 5 ], + "value" : 1 + } ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/def_func_nonlocal.py b/pa1-tests/core/def_func_nonlocal.py new file mode 100644 index 0000000..1304328 --- /dev/null +++ b/pa1-tests/core/def_func_nonlocal.py @@ -0,0 +1,11 @@ + +def foo(x:int) -> bool: + a:int = 0 + b:int = 1 + def bar(y: int) -> int: + nonlocal a + a = 2 + return y + return bar(x) > a + +foo(1) diff --git a/pa1-tests/core/def_func_nonlocal.py.ast b/pa1-tests/core/def_func_nonlocal.py.ast new file mode 100644 index 0000000..5c1e1de --- /dev/null +++ b/pa1-tests/core/def_func_nonlocal.py.ast @@ -0,0 +1,186 @@ +{ + "kind" : "Program", + "location" : [ 2, 1, 11, 7 ], + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 2, 1, 9, 22 ], + "name" : { + "kind" : "Identifier", + "location" : [ 2, 5, 2, 7 ], + "name" : "foo" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 2, 9, 2, 13 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 2, 9, 2, 9 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 2, 11, 2, 13 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 2, 19, 2, 22 ], + "className" : "bool" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 3, 5, 3, 13 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 3, 5, 3, 9 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 3, 5, 3, 5 ], + "name" : "a" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 3, 7, 3, 9 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 3, 13, 3, 13 ], + "value" : 0 + } + }, { + "kind" : "VarDef", + "location" : [ 4, 5, 4, 13 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 4, 5, 4, 9 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 4, 5, 4, 5 ], + "name" : "b" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 4, 7, 4, 9 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 4, 13, 4, 13 ], + "value" : 1 + } + }, { + "kind" : "FuncDef", + "location" : [ 5, 5, 8, 17 ], + "name" : { + "kind" : "Identifier", + "location" : [ 5, 9, 5, 11 ], + "name" : "bar" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 5, 13, 5, 18 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 5, 13, 5, 13 ], + "name" : "y" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 5, 16, 5, 18 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 5, 24, 5, 26 ], + "className" : "int" + }, + "declarations" : [ { + "kind" : "NonLocalDecl", + "location" : [ 6, 9, 6, 18 ], + "variable" : { + "kind" : "Identifier", + "location" : [ 6, 18, 6, 18 ], + "name" : "a" + } + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 7, 9, 7, 13 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 7, 9, 7, 9 ], + "name" : "a" + } ], + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 7, 13, 7, 13 ], + "value" : 2 + } + }, { + "kind" : "ReturnStmt", + "location" : [ 8, 9, 8, 16 ], + "value" : { + "kind" : "Identifier", + "location" : [ 8, 16, 8, 16 ], + "name" : "y" + } + } ] + } ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 9, 5, 9, 21 ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 9, 12, 9, 21 ], + "left" : { + "kind" : "CallExpr", + "location" : [ 9, 12, 9, 17 ], + "function" : { + "kind" : "Identifier", + "location" : [ 9, 12, 9, 14 ], + "name" : "bar" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 9, 16, 9, 16 ], + "name" : "x" + } ] + }, + "operator" : ">", + "right" : { + "kind" : "Identifier", + "location" : [ 9, 21, 9, 21 ], + "name" : "a" + } + } + } ] + } ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 11, 1, 11, 6 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 11, 1, 11, 6 ], + "function" : { + "kind" : "Identifier", + "location" : [ 11, 1, 11, 3 ], + "name" : "foo" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 11, 5, 11, 5 ], + "value" : 1 + } ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/expr_if.py b/pa1-tests/core/expr_if.py new file mode 100644 index 0000000..e9e9c26 --- /dev/null +++ b/pa1-tests/core/expr_if.py @@ -0,0 +1 @@ +3 if 1 > 2 else 4 diff --git a/pa1-tests/core/expr_if.py.ast b/pa1-tests/core/expr_if.py.ast new file mode 100644 index 0000000..0ed9a55 --- /dev/null +++ b/pa1-tests/core/expr_if.py.ast @@ -0,0 +1,43 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 1, 18 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 1, 1, 1, 17 ], + "expr" : { + "kind" : "IfExpr", + "location" : [ 1, 1, 1, 17 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 1, 6, 1, 10 ], + "left" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 6, 1, 6 ], + "value" : 1 + }, + "operator" : ">", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 10, 1, 10 ], + "value" : 2 + } + }, + "thenExpr" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 1, 1, 1 ], + "value" : 3 + }, + "elseExpr" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 17, 1, 17 ], + "value" : 4 + } + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/expr_if_chained.py b/pa1-tests/core/expr_if_chained.py new file mode 100644 index 0000000..4a7837e --- /dev/null +++ b/pa1-tests/core/expr_if_chained.py @@ -0,0 +1 @@ +3 if 1 > 2 else 4 if 1 < 0 else 5 diff --git a/pa1-tests/core/expr_if_chained.py.ast b/pa1-tests/core/expr_if_chained.py.ast new file mode 100644 index 0000000..2776da9 --- /dev/null +++ b/pa1-tests/core/expr_if_chained.py.ast @@ -0,0 +1,67 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 1, 34 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 1, 1, 1, 33 ], + "expr" : { + "kind" : "IfExpr", + "location" : [ 1, 1, 1, 33 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 1, 6, 1, 10 ], + "left" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 6, 1, 6 ], + "value" : 1 + }, + "operator" : ">", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 10, 1, 10 ], + "value" : 2 + } + }, + "thenExpr" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 1, 1, 1 ], + "value" : 3 + }, + "elseExpr" : { + "kind" : "IfExpr", + "location" : [ 1, 17, 1, 33 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 1, 22, 1, 26 ], + "left" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 22, 1, 22 ], + "value" : 1 + }, + "operator" : "<", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 26, 1, 26 ], + "value" : 0 + } + }, + "thenExpr" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 17, 1, 17 ], + "value" : 4 + }, + "elseExpr" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 33, 1, 33 ], + "value" : 5 + } + } + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/expr_index.py b/pa1-tests/core/expr_index.py new file mode 100644 index 0000000..8e95ff2 --- /dev/null +++ b/pa1-tests/core/expr_index.py @@ -0,0 +1 @@ +a + b[i][j] diff --git a/pa1-tests/core/expr_index.py.ast b/pa1-tests/core/expr_index.py.ast new file mode 100644 index 0000000..a5f97ee --- /dev/null +++ b/pa1-tests/core/expr_index.py.ast @@ -0,0 +1,47 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 1, 12 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 1, 1, 1, 11 ], + "expr" : { + "kind" : "BinaryExpr", + "location" : [ 1, 1, 1, 11 ], + "left" : { + "kind" : "Identifier", + "location" : [ 1, 1, 1, 1 ], + "name" : "a" + }, + "operator" : "+", + "right" : { + "kind" : "IndexExpr", + "location" : [ 1, 5, 1, 11 ], + "list" : { + "kind" : "IndexExpr", + "location" : [ 1, 5, 1, 8 ], + "list" : { + "kind" : "Identifier", + "location" : [ 1, 5, 1, 5 ], + "name" : "b" + }, + "index" : { + "kind" : "Identifier", + "location" : [ 1, 7, 1, 7 ], + "name" : "i" + } + }, + "index" : { + "kind" : "Identifier", + "location" : [ 1, 10, 1, 10 ], + "name" : "j" + } + } + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/expr_plus.py b/pa1-tests/core/expr_plus.py new file mode 100644 index 0000000..8138b36 --- /dev/null +++ b/pa1-tests/core/expr_plus.py @@ -0,0 +1 @@ +1 + 2 + 3 diff --git a/pa1-tests/core/expr_plus.py.ast b/pa1-tests/core/expr_plus.py.ast new file mode 100644 index 0000000..f924e67 --- /dev/null +++ b/pa1-tests/core/expr_plus.py.ast @@ -0,0 +1,39 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 1, 10 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 1, 1, 1, 9 ], + "expr" : { + "kind" : "BinaryExpr", + "location" : [ 1, 1, 1, 9 ], + "left" : { + "kind" : "BinaryExpr", + "location" : [ 1, 1, 1, 5 ], + "left" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 1, 1, 1 ], + "value" : 1 + }, + "operator" : "+", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 5, 1, 5 ], + "value" : 2 + } + }, + "operator" : "+", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 9, 1, 9 ], + "value" : 3 + } + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/expr_unary.py b/pa1-tests/core/expr_unary.py new file mode 100644 index 0000000..3a2e3f4 --- /dev/null +++ b/pa1-tests/core/expr_unary.py @@ -0,0 +1 @@ +-1 diff --git a/pa1-tests/core/expr_unary.py.ast b/pa1-tests/core/expr_unary.py.ast new file mode 100644 index 0000000..e4ef8d2 --- /dev/null +++ b/pa1-tests/core/expr_unary.py.ast @@ -0,0 +1,24 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 1, 3 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 1, 1, 1, 2 ], + "expr" : { + "kind" : "UnaryExpr", + "location" : [ 1, 1, 1, 2 ], + "operator" : "-", + "operand" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 2, 1, 2 ], + "value" : 1 + } + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/global.py b/pa1-tests/core/global.py new file mode 100644 index 0000000..779d3bb --- /dev/null +++ b/pa1-tests/core/global.py @@ -0,0 +1,5 @@ +x:int = 1 + +x = 2 + +print(x) diff --git a/pa1-tests/core/global.py.ast b/pa1-tests/core/global.py.ast new file mode 100644 index 0000000..84b42b1 --- /dev/null +++ b/pa1-tests/core/global.py.ast @@ -0,0 +1,63 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 5, 9 ], + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 1, 1, 1, 9 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 1, 1, 1, 5 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 1, 1, 1, 1 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 1, 3, 1, 5 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 9, 1, 9 ], + "value" : 1 + } + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 3, 1, 3, 5 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 3, 1, 3, 1 ], + "name" : "x" + } ], + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 3, 5, 3, 5 ], + "value" : 2 + } + }, { + "kind" : "ExprStmt", + "location" : [ 5, 1, 5, 8 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 5, 1, 5, 8 ], + "function" : { + "kind" : "Identifier", + "location" : [ 5, 1, 5, 5 ], + "name" : "print" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 5, 7, 5, 7 ], + "name" : "x" + } ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/literals.py b/pa1-tests/core/literals.py new file mode 100644 index 0000000..081863e --- /dev/null +++ b/pa1-tests/core/literals.py @@ -0,0 +1,7 @@ +True +False +1 +None +"This is a string" +[1, 2, 3] + diff --git a/pa1-tests/core/literals.py.ast b/pa1-tests/core/literals.py.ast new file mode 100644 index 0000000..d6fd3bc --- /dev/null +++ b/pa1-tests/core/literals.py.ast @@ -0,0 +1,70 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 6, 10 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 1, 1, 1, 4 ], + "expr" : { + "kind" : "BooleanLiteral", + "location" : [ 1, 1, 1, 4 ], + "value" : true + } + }, { + "kind" : "ExprStmt", + "location" : [ 2, 1, 2, 5 ], + "expr" : { + "kind" : "BooleanLiteral", + "location" : [ 2, 1, 2, 5 ], + "value" : false + } + }, { + "kind" : "ExprStmt", + "location" : [ 3, 1, 3, 1 ], + "expr" : { + "kind" : "IntegerLiteral", + "location" : [ 3, 1, 3, 1 ], + "value" : 1 + } + }, { + "kind" : "ExprStmt", + "location" : [ 4, 1, 4, 4 ], + "expr" : { + "kind" : "NoneLiteral", + "location" : [ 4, 1, 4, 4 ] + } + }, { + "kind" : "ExprStmt", + "location" : [ 5, 1, 5, 18 ], + "expr" : { + "kind" : "StringLiteral", + "location" : [ 5, 1, 5, 18 ], + "value" : "This is a string" + } + }, { + "kind" : "ExprStmt", + "location" : [ 6, 1, 6, 9 ], + "expr" : { + "kind" : "ListExpr", + "location" : [ 6, 1, 6, 9 ], + "elements" : [ { + "kind" : "IntegerLiteral", + "location" : [ 6, 2, 6, 2 ], + "value" : 1 + }, { + "kind" : "IntegerLiteral", + "location" : [ 6, 5, 6, 5 ], + "value" : 2 + }, { + "kind" : "IntegerLiteral", + "location" : [ 6, 8, 6, 8 ], + "value" : 3 + } ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/stmt_call.py b/pa1-tests/core/stmt_call.py new file mode 100644 index 0000000..b917a72 --- /dev/null +++ b/pa1-tests/core/stmt_call.py @@ -0,0 +1 @@ +print(1) diff --git a/pa1-tests/core/stmt_call.py.ast b/pa1-tests/core/stmt_call.py.ast new file mode 100644 index 0000000..4d0ef38 --- /dev/null +++ b/pa1-tests/core/stmt_call.py.ast @@ -0,0 +1,28 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 1, 9 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 1, 1, 1, 8 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 1, 1, 1, 8 ], + "function" : { + "kind" : "Identifier", + "location" : [ 1, 1, 1, 5 ], + "name" : "print" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 1, 7, 1, 7 ], + "value" : 1 + } ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/stmt_for.py b/pa1-tests/core/stmt_for.py new file mode 100644 index 0000000..6f65c5f --- /dev/null +++ b/pa1-tests/core/stmt_for.py @@ -0,0 +1,4 @@ +x:int = 0 +for x in [1, 2, 3]: + print(x) + diff --git a/pa1-tests/core/stmt_for.py.ast b/pa1-tests/core/stmt_for.py.ast new file mode 100644 index 0000000..ba0847b --- /dev/null +++ b/pa1-tests/core/stmt_for.py.ast @@ -0,0 +1,76 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 5, 1 ], + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 1, 1, 1, 9 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 1, 1, 1, 5 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 1, 1, 1, 1 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 1, 3, 1, 5 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 9, 1, 9 ], + "value" : 0 + } + } ], + "statements" : [ { + "kind" : "ForStmt", + "location" : [ 2, 1, 5, 1 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 2, 5, 2, 5 ], + "name" : "x" + }, + "iterable" : { + "kind" : "ListExpr", + "location" : [ 2, 10, 2, 18 ], + "elements" : [ { + "kind" : "IntegerLiteral", + "location" : [ 2, 11, 2, 11 ], + "value" : 1 + }, { + "kind" : "IntegerLiteral", + "location" : [ 2, 14, 2, 14 ], + "value" : 2 + }, { + "kind" : "IntegerLiteral", + "location" : [ 2, 17, 2, 17 ], + "value" : 3 + } ] + }, + "body" : [ { + "kind" : "ExprStmt", + "location" : [ 3, 5, 3, 12 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 3, 5, 3, 12 ], + "function" : { + "kind" : "Identifier", + "location" : [ 3, 5, 3, 9 ], + "name" : "print" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 3, 11, 3, 11 ], + "name" : "x" + } ] + } + } ] + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/stmt_if.py b/pa1-tests/core/stmt_if.py new file mode 100644 index 0000000..b87c003 --- /dev/null +++ b/pa1-tests/core/stmt_if.py @@ -0,0 +1,3 @@ +if True: + False + diff --git a/pa1-tests/core/stmt_if.py.ast b/pa1-tests/core/stmt_if.py.ast new file mode 100644 index 0000000..2b08a8f --- /dev/null +++ b/pa1-tests/core/stmt_if.py.ast @@ -0,0 +1,29 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 4, 1 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "IfStmt", + "location" : [ 1, 1, 4, 1 ], + "condition" : { + "kind" : "BooleanLiteral", + "location" : [ 1, 4, 1, 7 ], + "value" : true + }, + "thenBody" : [ { + "kind" : "ExprStmt", + "location" : [ 2, 5, 2, 9 ], + "expr" : { + "kind" : "BooleanLiteral", + "location" : [ 2, 5, 2, 9 ], + "value" : false + } + } ], + "elseBody" : [ ] + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/stmt_if_elif.py b/pa1-tests/core/stmt_if_elif.py new file mode 100644 index 0000000..7fa86dd --- /dev/null +++ b/pa1-tests/core/stmt_if_elif.py @@ -0,0 +1,6 @@ +if 1 > 2: + print(1) +elif 3 == 4: + print(2) +elif True: + print(3) diff --git a/pa1-tests/core/stmt_if_elif.py.ast b/pa1-tests/core/stmt_if_elif.py.ast new file mode 100644 index 0000000..11dcd2e --- /dev/null +++ b/pa1-tests/core/stmt_if_elif.py.ast @@ -0,0 +1,112 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 7, 1 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "IfStmt", + "location" : [ 1, 1, 7, 1 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 1, 4, 1, 8 ], + "left" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 4, 1, 4 ], + "value" : 1 + }, + "operator" : ">", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 8, 1, 8 ], + "value" : 2 + } + }, + "thenBody" : [ { + "kind" : "ExprStmt", + "location" : [ 2, 5, 2, 12 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 2, 5, 2, 12 ], + "function" : { + "kind" : "Identifier", + "location" : [ 2, 5, 2, 9 ], + "name" : "print" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 2, 11, 2, 11 ], + "value" : 1 + } ] + } + } ], + "elseBody" : [ { + "kind" : "IfStmt", + "location" : [ 3, 1, 7, 1 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 3, 6, 3, 11 ], + "left" : { + "kind" : "IntegerLiteral", + "location" : [ 3, 6, 3, 6 ], + "value" : 3 + }, + "operator" : "==", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 3, 11, 3, 11 ], + "value" : 4 + } + }, + "thenBody" : [ { + "kind" : "ExprStmt", + "location" : [ 4, 5, 4, 12 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 4, 5, 4, 12 ], + "function" : { + "kind" : "Identifier", + "location" : [ 4, 5, 4, 9 ], + "name" : "print" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 4, 11, 4, 11 ], + "value" : 2 + } ] + } + } ], + "elseBody" : [ { + "kind" : "IfStmt", + "location" : [ 5, 1, 7, 1 ], + "condition" : { + "kind" : "BooleanLiteral", + "location" : [ 5, 6, 5, 9 ], + "value" : true + }, + "thenBody" : [ { + "kind" : "ExprStmt", + "location" : [ 6, 5, 6, 12 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 6, 5, 6, 12 ], + "function" : { + "kind" : "Identifier", + "location" : [ 6, 5, 6, 9 ], + "name" : "print" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 6, 11, 6, 11 ], + "value" : 3 + } ] + } + } ], + "elseBody" : [ ] + } ] + } ] + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/stmt_if_elif_else.py b/pa1-tests/core/stmt_if_elif_else.py new file mode 100644 index 0000000..161d9d9 --- /dev/null +++ b/pa1-tests/core/stmt_if_elif_else.py @@ -0,0 +1,8 @@ +if 1 > 2: + print(1) +elif 3 == 4: + print(2) +elif True: + print(3) +else: + print(4) diff --git a/pa1-tests/core/stmt_if_elif_else.py.ast b/pa1-tests/core/stmt_if_elif_else.py.ast new file mode 100644 index 0000000..dc25855 --- /dev/null +++ b/pa1-tests/core/stmt_if_elif_else.py.ast @@ -0,0 +1,129 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 9, 1 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "IfStmt", + "location" : [ 1, 1, 9, 1 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 1, 4, 1, 8 ], + "left" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 4, 1, 4 ], + "value" : 1 + }, + "operator" : ">", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 1, 8, 1, 8 ], + "value" : 2 + } + }, + "thenBody" : [ { + "kind" : "ExprStmt", + "location" : [ 2, 5, 2, 12 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 2, 5, 2, 12 ], + "function" : { + "kind" : "Identifier", + "location" : [ 2, 5, 2, 9 ], + "name" : "print" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 2, 11, 2, 11 ], + "value" : 1 + } ] + } + } ], + "elseBody" : [ { + "kind" : "IfStmt", + "location" : [ 3, 1, 9, 1 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 3, 6, 3, 11 ], + "left" : { + "kind" : "IntegerLiteral", + "location" : [ 3, 6, 3, 6 ], + "value" : 3 + }, + "operator" : "==", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 3, 11, 3, 11 ], + "value" : 4 + } + }, + "thenBody" : [ { + "kind" : "ExprStmt", + "location" : [ 4, 5, 4, 12 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 4, 5, 4, 12 ], + "function" : { + "kind" : "Identifier", + "location" : [ 4, 5, 4, 9 ], + "name" : "print" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 4, 11, 4, 11 ], + "value" : 2 + } ] + } + } ], + "elseBody" : [ { + "kind" : "IfStmt", + "location" : [ 5, 1, 9, 1 ], + "condition" : { + "kind" : "BooleanLiteral", + "location" : [ 5, 6, 5, 9 ], + "value" : true + }, + "thenBody" : [ { + "kind" : "ExprStmt", + "location" : [ 6, 5, 6, 12 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 6, 5, 6, 12 ], + "function" : { + "kind" : "Identifier", + "location" : [ 6, 5, 6, 9 ], + "name" : "print" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 6, 11, 6, 11 ], + "value" : 3 + } ] + } + } ], + "elseBody" : [ { + "kind" : "ExprStmt", + "location" : [ 8, 5, 8, 12 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 8, 5, 8, 12 ], + "function" : { + "kind" : "Identifier", + "location" : [ 8, 5, 8, 9 ], + "name" : "print" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 8, 11, 8, 11 ], + "value" : 4 + } ] + } + } ] + } ] + } ] + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/stmt_ifelse.py b/pa1-tests/core/stmt_ifelse.py new file mode 100644 index 0000000..f138957 --- /dev/null +++ b/pa1-tests/core/stmt_ifelse.py @@ -0,0 +1,5 @@ +if True: + False +else: + True + diff --git a/pa1-tests/core/stmt_ifelse.py.ast b/pa1-tests/core/stmt_ifelse.py.ast new file mode 100644 index 0000000..8e23d16 --- /dev/null +++ b/pa1-tests/core/stmt_ifelse.py.ast @@ -0,0 +1,37 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 6, 1 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "IfStmt", + "location" : [ 1, 1, 6, 1 ], + "condition" : { + "kind" : "BooleanLiteral", + "location" : [ 1, 4, 1, 7 ], + "value" : true + }, + "thenBody" : [ { + "kind" : "ExprStmt", + "location" : [ 2, 5, 2, 9 ], + "expr" : { + "kind" : "BooleanLiteral", + "location" : [ 2, 5, 2, 9 ], + "value" : false + } + } ], + "elseBody" : [ { + "kind" : "ExprStmt", + "location" : [ 4, 5, 4, 8 ], + "expr" : { + "kind" : "BooleanLiteral", + "location" : [ 4, 5, 4, 8 ], + "value" : true + } + } ] + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/stmt_list_assign.py b/pa1-tests/core/stmt_list_assign.py new file mode 100644 index 0000000..e9e31d9 --- /dev/null +++ b/pa1-tests/core/stmt_list_assign.py @@ -0,0 +1,4 @@ +x:int = None + +x = [1, 2, 3] +x[0] = x[1] diff --git a/pa1-tests/core/stmt_list_assign.py.ast b/pa1-tests/core/stmt_list_assign.py.ast new file mode 100644 index 0000000..b65848c --- /dev/null +++ b/pa1-tests/core/stmt_list_assign.py.ast @@ -0,0 +1,88 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 4, 12 ], + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 1, 1, 1, 12 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 1, 1, 1, 5 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 1, 1, 1, 1 ], + "name" : "x" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 1, 3, 1, 5 ], + "className" : "int" + } + }, + "value" : { + "kind" : "NoneLiteral", + "location" : [ 1, 9, 1, 12 ] + } + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 3, 1, 3, 13 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 3, 1, 3, 1 ], + "name" : "x" + } ], + "value" : { + "kind" : "ListExpr", + "location" : [ 3, 5, 3, 13 ], + "elements" : [ { + "kind" : "IntegerLiteral", + "location" : [ 3, 6, 3, 6 ], + "value" : 1 + }, { + "kind" : "IntegerLiteral", + "location" : [ 3, 9, 3, 9 ], + "value" : 2 + }, { + "kind" : "IntegerLiteral", + "location" : [ 3, 12, 3, 12 ], + "value" : 3 + } ] + } + }, { + "kind" : "AssignStmt", + "location" : [ 4, 1, 4, 11 ], + "targets" : [ { + "kind" : "IndexExpr", + "location" : [ 4, 1, 4, 4 ], + "list" : { + "kind" : "Identifier", + "location" : [ 4, 1, 4, 1 ], + "name" : "x" + }, + "index" : { + "kind" : "IntegerLiteral", + "location" : [ 4, 3, 4, 3 ], + "value" : 0 + } + } ], + "value" : { + "kind" : "IndexExpr", + "location" : [ 4, 8, 4, 11 ], + "list" : { + "kind" : "Identifier", + "location" : [ 4, 8, 4, 8 ], + "name" : "x" + }, + "index" : { + "kind" : "IntegerLiteral", + "location" : [ 4, 10, 4, 10 ], + "value" : 1 + } + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/core/stmt_while.py b/pa1-tests/core/stmt_while.py new file mode 100644 index 0000000..1aaefd8 --- /dev/null +++ b/pa1-tests/core/stmt_while.py @@ -0,0 +1,3 @@ +while True: + pass + diff --git a/pa1-tests/core/stmt_while.py.ast b/pa1-tests/core/stmt_while.py.ast new file mode 100644 index 0000000..a564490 --- /dev/null +++ b/pa1-tests/core/stmt_while.py.ast @@ -0,0 +1,20 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 4, 1 ], + "declarations" : [ ], + "statements" : [ { + "kind" : "WhileStmt", + "location" : [ 1, 1, 4, 1 ], + "condition" : { + "kind" : "BooleanLiteral", + "location" : [ 1, 7, 1, 10 ], + "value" : true + }, + "body" : [ ] + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/extra/graph.py b/pa1-tests/extra/graph.py new file mode 100644 index 0000000..bb75943 --- /dev/null +++ b/pa1-tests/extra/graph.py @@ -0,0 +1,52 @@ +class weight(object): + value: int = 0 + + def __init__(self: "weight", value: int): + self.value = value + + def __repr__(self: "weight"): + return "weight(" + str(self.value) + ")" + + +class graph(object): + matrix: [[weight]] = None + + def __init__(self: "graph", num_vertices: int): + i: int = 0 + j: int = 0 + row: [weight] = None + + self.matrix = [] + while i < num_vertices: + j = 0 + row = [] + while j < num_vertices: + row = row + [weight(0)] + j = j + 1 + self.matrix = self.matrix + [row] + i = i + 1 + + def add_edge(self: "graph", from_vertex: int, to_vertex: int, edge_weight: int): + pass + + def print(self: "graph"): + for row in self.matrix: + print(row) + + +class undirectedgraph(graph): + def add_edge(self: "undirectedgraph", from_vertex: int, to_vertex: int, edge_weight: int): + self.matrix[from_vertex][to_vertex] = weight(edge_weight) + self.matrix[to_vertex][from_vertex] = weight(edge_weight) + + +class directedgraph(graph): + def add_edge(self: "undirectedgraph", from_vertex: int, to_vertex: int, edge_weight: int): + self.matrix[from_vertex][to_vertex] = weight(edge_weight) + + +g = undirectedgraph(3) +g.add_edge(0, 2, 100) +g.print() + +directedgraph(3).print() diff --git a/pa1-tests/extra/graph.py.ast b/pa1-tests/extra/graph.py.ast new file mode 100644 index 0000000..6332c1f --- /dev/null +++ b/pa1-tests/extra/graph.py.ast @@ -0,0 +1,1110 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 52, 25 ], + "declarations" : [ { + "kind" : "ClassDef", + "location" : [ 1, 1, 11, 0 ], + "name" : { + "kind" : "Identifier", + "location" : [ 1, 7, 1, 12 ], + "name" : "weight" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 1, 14, 1, 19 ], + "name" : "object" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 2, 5, 2, 18 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 2, 5, 2, 14 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 2, 5, 2, 9 ], + "name" : "value" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 2, 12, 2, 14 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 2, 18, 2, 18 ], + "value" : 0 + } + }, { + "kind" : "FuncDef", + "location" : [ 4, 5, 5, 27 ], + "name" : { + "kind" : "Identifier", + "location" : [ 4, 9, 4, 16 ], + "name" : "__init__" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 4, 18, 4, 31 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 4, 18, 4, 21 ], + "name" : "self" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 4, 24, 4, 31 ], + "className" : "weight" + } + }, { + "kind" : "TypedVar", + "location" : [ 4, 34, 4, 43 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 4, 34, 4, 38 ], + "name" : "value" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 4, 41, 4, 43 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 4, 45, 4, 45 ], + "className" : "" + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 5, 9, 5, 26 ], + "targets" : [ { + "kind" : "MemberExpr", + "location" : [ 5, 9, 5, 18 ], + "object" : { + "kind" : "Identifier", + "location" : [ 5, 9, 5, 12 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 5, 14, 5, 18 ], + "name" : "value" + } + } ], + "value" : { + "kind" : "Identifier", + "location" : [ 5, 22, 5, 26 ], + "name" : "value" + } + } ] + }, { + "kind" : "FuncDef", + "location" : [ 7, 5, 8, 49 ], + "name" : { + "kind" : "Identifier", + "location" : [ 7, 9, 7, 16 ], + "name" : "__repr__" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 7, 18, 7, 31 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 7, 18, 7, 21 ], + "name" : "self" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 7, 24, 7, 31 ], + "className" : "weight" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 7, 33, 7, 33 ], + "className" : "" + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 8, 9, 8, 48 ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 8, 16, 8, 48 ], + "left" : { + "kind" : "BinaryExpr", + "location" : [ 8, 16, 8, 42 ], + "left" : { + "kind" : "StringLiteral", + "location" : [ 8, 16, 8, 24 ], + "value" : "weight(" + }, + "operator" : "+", + "right" : { + "kind" : "CallExpr", + "location" : [ 8, 28, 8, 42 ], + "function" : { + "kind" : "Identifier", + "location" : [ 8, 28, 8, 30 ], + "name" : "str" + }, + "args" : [ { + "kind" : "MemberExpr", + "location" : [ 8, 32, 8, 41 ], + "object" : { + "kind" : "Identifier", + "location" : [ 8, 32, 8, 35 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 8, 37, 8, 41 ], + "name" : "value" + } + } ] + } + }, + "operator" : "+", + "right" : { + "kind" : "StringLiteral", + "location" : [ 8, 46, 8, 48 ], + "value" : ")" + } + } + } ] + } ] + }, { + "kind" : "ClassDef", + "location" : [ 11, 1, 37, 0 ], + "name" : { + "kind" : "Identifier", + "location" : [ 11, 7, 11, 11 ], + "name" : "graph" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 11, 13, 11, 18 ], + "name" : "object" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 12, 5, 12, 29 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 12, 5, 12, 22 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 12, 5, 12, 10 ], + "name" : "matrix" + }, + "type" : { + "kind" : "ListType", + "location" : [ 12, 13, 12, 22 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 12, 14, 12, 21 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 12, 15, 12, 20 ], + "className" : "weight" + } + } + } + }, + "value" : { + "kind" : "NoneLiteral", + "location" : [ 12, 26, 12, 29 ] + } + }, { + "kind" : "FuncDef", + "location" : [ 14, 5, 29, 4 ], + "name" : { + "kind" : "Identifier", + "location" : [ 14, 9, 14, 16 ], + "name" : "__init__" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 14, 18, 14, 30 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 14, 18, 14, 21 ], + "name" : "self" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 14, 24, 14, 30 ], + "className" : "graph" + } + }, { + "kind" : "TypedVar", + "location" : [ 14, 33, 14, 49 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 14, 33, 14, 44 ], + "name" : "num_vertices" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 14, 47, 14, 49 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 14, 51, 14, 51 ], + "className" : "" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 15, 9, 15, 18 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 15, 9, 15, 14 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 15, 9, 15, 9 ], + "name" : "i" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 15, 12, 15, 14 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 15, 18, 15, 18 ], + "value" : 0 + } + }, { + "kind" : "VarDef", + "location" : [ 16, 9, 16, 18 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 16, 9, 16, 14 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 16, 9, 16, 9 ], + "name" : "j" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 16, 12, 16, 14 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 16, 18, 16, 18 ], + "value" : 0 + } + }, { + "kind" : "VarDef", + "location" : [ 17, 9, 17, 28 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 17, 9, 17, 21 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 17, 9, 17, 11 ], + "name" : "row" + }, + "type" : { + "kind" : "ListType", + "location" : [ 17, 14, 17, 21 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 17, 15, 17, 20 ], + "className" : "weight" + } + } + }, + "value" : { + "kind" : "NoneLiteral", + "location" : [ 17, 25, 17, 28 ] + } + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 19, 9, 19, 24 ], + "targets" : [ { + "kind" : "MemberExpr", + "location" : [ 19, 9, 19, 19 ], + "object" : { + "kind" : "Identifier", + "location" : [ 19, 9, 19, 12 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 19, 14, 19, 19 ], + "name" : "matrix" + } + } ], + "value" : { + "kind" : "ListExpr", + "location" : [ 19, 23, 19, 24 ], + "elements" : [ ] + } + }, { + "kind" : "WhileStmt", + "location" : [ 20, 9, 29, 4 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 20, 15, 20, 30 ], + "left" : { + "kind" : "Identifier", + "location" : [ 20, 15, 20, 15 ], + "name" : "i" + }, + "operator" : "<", + "right" : { + "kind" : "Identifier", + "location" : [ 20, 19, 20, 30 ], + "name" : "num_vertices" + } + }, + "body" : [ { + "kind" : "AssignStmt", + "location" : [ 21, 13, 21, 17 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 21, 13, 21, 13 ], + "name" : "j" + } ], + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 21, 17, 21, 17 ], + "value" : 0 + } + }, { + "kind" : "AssignStmt", + "location" : [ 22, 13, 22, 20 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 22, 13, 22, 15 ], + "name" : "row" + } ], + "value" : { + "kind" : "ListExpr", + "location" : [ 22, 19, 22, 20 ], + "elements" : [ ] + } + }, { + "kind" : "WhileStmt", + "location" : [ 23, 13, 26, 12 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 23, 19, 23, 34 ], + "left" : { + "kind" : "Identifier", + "location" : [ 23, 19, 23, 19 ], + "name" : "j" + }, + "operator" : "<", + "right" : { + "kind" : "Identifier", + "location" : [ 23, 23, 23, 34 ], + "name" : "num_vertices" + } + }, + "body" : [ { + "kind" : "AssignStmt", + "location" : [ 24, 17, 24, 39 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 24, 17, 24, 19 ], + "name" : "row" + } ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 24, 23, 24, 39 ], + "left" : { + "kind" : "Identifier", + "location" : [ 24, 23, 24, 25 ], + "name" : "row" + }, + "operator" : "+", + "right" : { + "kind" : "ListExpr", + "location" : [ 24, 29, 24, 39 ], + "elements" : [ { + "kind" : "CallExpr", + "location" : [ 24, 30, 24, 38 ], + "function" : { + "kind" : "Identifier", + "location" : [ 24, 30, 24, 35 ], + "name" : "weight" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 24, 37, 24, 37 ], + "value" : 0 + } ] + } ] + } + } + }, { + "kind" : "AssignStmt", + "location" : [ 25, 17, 25, 25 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 25, 17, 25, 17 ], + "name" : "j" + } ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 25, 21, 25, 25 ], + "left" : { + "kind" : "Identifier", + "location" : [ 25, 21, 25, 21 ], + "name" : "j" + }, + "operator" : "+", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 25, 25, 25, 25 ], + "value" : 1 + } + } + } ] + }, { + "kind" : "AssignStmt", + "location" : [ 26, 13, 26, 45 ], + "targets" : [ { + "kind" : "MemberExpr", + "location" : [ 26, 13, 26, 23 ], + "object" : { + "kind" : "Identifier", + "location" : [ 26, 13, 26, 16 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 26, 18, 26, 23 ], + "name" : "matrix" + } + } ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 26, 27, 26, 45 ], + "left" : { + "kind" : "MemberExpr", + "location" : [ 26, 27, 26, 37 ], + "object" : { + "kind" : "Identifier", + "location" : [ 26, 27, 26, 30 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 26, 32, 26, 37 ], + "name" : "matrix" + } + }, + "operator" : "+", + "right" : { + "kind" : "ListExpr", + "location" : [ 26, 41, 26, 45 ], + "elements" : [ { + "kind" : "Identifier", + "location" : [ 26, 42, 26, 44 ], + "name" : "row" + } ] + } + } + }, { + "kind" : "AssignStmt", + "location" : [ 27, 13, 27, 21 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 27, 13, 27, 13 ], + "name" : "i" + } ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 27, 17, 27, 21 ], + "left" : { + "kind" : "Identifier", + "location" : [ 27, 17, 27, 17 ], + "name" : "i" + }, + "operator" : "+", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 27, 21, 27, 21 ], + "value" : 1 + } + } + } ] + } ] + }, { + "kind" : "FuncDef", + "location" : [ 29, 5, 30, 13 ], + "name" : { + "kind" : "Identifier", + "location" : [ 29, 9, 29, 16 ], + "name" : "add_edge" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 29, 18, 29, 30 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 29, 18, 29, 21 ], + "name" : "self" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 29, 24, 29, 30 ], + "className" : "graph" + } + }, { + "kind" : "TypedVar", + "location" : [ 29, 33, 29, 48 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 29, 33, 29, 43 ], + "name" : "from_vertex" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 29, 46, 29, 48 ], + "className" : "int" + } + }, { + "kind" : "TypedVar", + "location" : [ 29, 51, 29, 64 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 29, 51, 29, 59 ], + "name" : "to_vertex" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 29, 62, 29, 64 ], + "className" : "int" + } + }, { + "kind" : "TypedVar", + "location" : [ 29, 67, 29, 82 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 29, 67, 29, 77 ], + "name" : "edge_weight" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 29, 80, 29, 82 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 29, 84, 29, 84 ], + "className" : "" + }, + "declarations" : [ ], + "statements" : [ ] + }, { + "kind" : "FuncDef", + "location" : [ 32, 5, 37, 0 ], + "name" : { + "kind" : "Identifier", + "location" : [ 32, 9, 32, 13 ], + "name" : "print" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 32, 15, 32, 27 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 32, 15, 32, 18 ], + "name" : "self" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 32, 21, 32, 27 ], + "className" : "graph" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 32, 29, 32, 29 ], + "className" : "" + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "ForStmt", + "location" : [ 33, 9, 37, 0 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 33, 13, 33, 15 ], + "name" : "row" + }, + "iterable" : { + "kind" : "MemberExpr", + "location" : [ 33, 20, 33, 30 ], + "object" : { + "kind" : "Identifier", + "location" : [ 33, 20, 33, 23 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 33, 25, 33, 30 ], + "name" : "matrix" + } + }, + "body" : [ { + "kind" : "ExprStmt", + "location" : [ 34, 13, 34, 22 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 34, 13, 34, 22 ], + "function" : { + "kind" : "Identifier", + "location" : [ 34, 13, 34, 17 ], + "name" : "print" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 34, 19, 34, 21 ], + "name" : "row" + } ] + } + } ] + } ] + } ] + }, { + "kind" : "ClassDef", + "location" : [ 37, 1, 43, 0 ], + "name" : { + "kind" : "Identifier", + "location" : [ 37, 7, 37, 21 ], + "name" : "undirectedgraph" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 37, 23, 37, 27 ], + "name" : "graph" + }, + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 38, 5, 40, 66 ], + "name" : { + "kind" : "Identifier", + "location" : [ 38, 9, 38, 16 ], + "name" : "add_edge" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 38, 18, 38, 40 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 38, 18, 38, 21 ], + "name" : "self" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 38, 24, 38, 40 ], + "className" : "undirectedgraph" + } + }, { + "kind" : "TypedVar", + "location" : [ 38, 43, 38, 58 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 38, 43, 38, 53 ], + "name" : "from_vertex" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 38, 56, 38, 58 ], + "className" : "int" + } + }, { + "kind" : "TypedVar", + "location" : [ 38, 61, 38, 74 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 38, 61, 38, 69 ], + "name" : "to_vertex" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 38, 72, 38, 74 ], + "className" : "int" + } + }, { + "kind" : "TypedVar", + "location" : [ 38, 77, 38, 92 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 38, 77, 38, 87 ], + "name" : "edge_weight" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 38, 90, 38, 92 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 38, 94, 38, 94 ], + "className" : "" + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 39, 9, 39, 65 ], + "targets" : [ { + "kind" : "IndexExpr", + "location" : [ 39, 9, 39, 43 ], + "list" : { + "kind" : "IndexExpr", + "location" : [ 39, 9, 39, 32 ], + "list" : { + "kind" : "MemberExpr", + "location" : [ 39, 9, 39, 19 ], + "object" : { + "kind" : "Identifier", + "location" : [ 39, 9, 39, 12 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 39, 14, 39, 19 ], + "name" : "matrix" + } + }, + "index" : { + "kind" : "Identifier", + "location" : [ 39, 21, 39, 31 ], + "name" : "from_vertex" + } + }, + "index" : { + "kind" : "Identifier", + "location" : [ 39, 34, 39, 42 ], + "name" : "to_vertex" + } + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 39, 47, 39, 65 ], + "function" : { + "kind" : "Identifier", + "location" : [ 39, 47, 39, 52 ], + "name" : "weight" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 39, 54, 39, 64 ], + "name" : "edge_weight" + } ] + } + }, { + "kind" : "AssignStmt", + "location" : [ 40, 9, 40, 65 ], + "targets" : [ { + "kind" : "IndexExpr", + "location" : [ 40, 9, 40, 43 ], + "list" : { + "kind" : "IndexExpr", + "location" : [ 40, 9, 40, 30 ], + "list" : { + "kind" : "MemberExpr", + "location" : [ 40, 9, 40, 19 ], + "object" : { + "kind" : "Identifier", + "location" : [ 40, 9, 40, 12 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 40, 14, 40, 19 ], + "name" : "matrix" + } + }, + "index" : { + "kind" : "Identifier", + "location" : [ 40, 21, 40, 29 ], + "name" : "to_vertex" + } + }, + "index" : { + "kind" : "Identifier", + "location" : [ 40, 32, 40, 42 ], + "name" : "from_vertex" + } + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 40, 47, 40, 65 ], + "function" : { + "kind" : "Identifier", + "location" : [ 40, 47, 40, 52 ], + "name" : "weight" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 40, 54, 40, 64 ], + "name" : "edge_weight" + } ] + } + } ] + } ] + }, { + "kind" : "ClassDef", + "location" : [ 43, 1, 48, 0 ], + "name" : { + "kind" : "Identifier", + "location" : [ 43, 7, 43, 19 ], + "name" : "directedgraph" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 43, 21, 43, 25 ], + "name" : "graph" + }, + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 44, 5, 45, 66 ], + "name" : { + "kind" : "Identifier", + "location" : [ 44, 9, 44, 16 ], + "name" : "add_edge" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 44, 18, 44, 40 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 44, 18, 44, 21 ], + "name" : "self" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 44, 24, 44, 40 ], + "className" : "undirectedgraph" + } + }, { + "kind" : "TypedVar", + "location" : [ 44, 43, 44, 58 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 44, 43, 44, 53 ], + "name" : "from_vertex" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 44, 56, 44, 58 ], + "className" : "int" + } + }, { + "kind" : "TypedVar", + "location" : [ 44, 61, 44, 74 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 44, 61, 44, 69 ], + "name" : "to_vertex" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 44, 72, 44, 74 ], + "className" : "int" + } + }, { + "kind" : "TypedVar", + "location" : [ 44, 77, 44, 92 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 44, 77, 44, 87 ], + "name" : "edge_weight" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 44, 90, 44, 92 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 44, 94, 44, 94 ], + "className" : "" + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 45, 9, 45, 65 ], + "targets" : [ { + "kind" : "IndexExpr", + "location" : [ 45, 9, 45, 43 ], + "list" : { + "kind" : "IndexExpr", + "location" : [ 45, 9, 45, 32 ], + "list" : { + "kind" : "MemberExpr", + "location" : [ 45, 9, 45, 19 ], + "object" : { + "kind" : "Identifier", + "location" : [ 45, 9, 45, 12 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 45, 14, 45, 19 ], + "name" : "matrix" + } + }, + "index" : { + "kind" : "Identifier", + "location" : [ 45, 21, 45, 31 ], + "name" : "from_vertex" + } + }, + "index" : { + "kind" : "Identifier", + "location" : [ 45, 34, 45, 42 ], + "name" : "to_vertex" + } + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 45, 47, 45, 65 ], + "function" : { + "kind" : "Identifier", + "location" : [ 45, 47, 45, 52 ], + "name" : "weight" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 45, 54, 45, 64 ], + "name" : "edge_weight" + } ] + } + } ] + } ] + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 48, 1, 48, 22 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 48, 1, 48, 1 ], + "name" : "g" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 48, 5, 48, 22 ], + "function" : { + "kind" : "Identifier", + "location" : [ 48, 5, 48, 19 ], + "name" : "undirectedgraph" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 48, 21, 48, 21 ], + "value" : 3 + } ] + } + }, { + "kind" : "ExprStmt", + "location" : [ 49, 1, 49, 21 ], + "expr" : { + "kind" : "MethodCallExpr", + "location" : [ 49, 1, 49, 21 ], + "method" : { + "kind" : "MemberExpr", + "location" : [ 49, 1, 49, 10 ], + "object" : { + "kind" : "Identifier", + "location" : [ 49, 1, 49, 1 ], + "name" : "g" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 49, 3, 49, 10 ], + "name" : "add_edge" + } + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 49, 12, 49, 12 ], + "value" : 0 + }, { + "kind" : "IntegerLiteral", + "location" : [ 49, 15, 49, 15 ], + "value" : 2 + }, { + "kind" : "IntegerLiteral", + "location" : [ 49, 18, 49, 20 ], + "value" : 100 + } ] + } + }, { + "kind" : "ExprStmt", + "location" : [ 50, 1, 50, 9 ], + "expr" : { + "kind" : "MethodCallExpr", + "location" : [ 50, 1, 50, 9 ], + "method" : { + "kind" : "MemberExpr", + "location" : [ 50, 1, 50, 7 ], + "object" : { + "kind" : "Identifier", + "location" : [ 50, 1, 50, 1 ], + "name" : "g" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 50, 3, 50, 7 ], + "name" : "print" + } + }, + "args" : [ ] + } + }, { + "kind" : "ExprStmt", + "location" : [ 52, 1, 52, 24 ], + "expr" : { + "kind" : "MethodCallExpr", + "location" : [ 52, 1, 52, 24 ], + "method" : { + "kind" : "MemberExpr", + "location" : [ 52, 1, 52, 22 ], + "object" : { + "kind" : "CallExpr", + "location" : [ 52, 1, 52, 16 ], + "function" : { + "kind" : "Identifier", + "location" : [ 52, 1, 52, 13 ], + "name" : "directedgraph" + }, + "args" : [ { + "kind" : "IntegerLiteral", + "location" : [ 52, 15, 52, 15 ], + "value" : 3 + } ] + }, + "member" : { + "kind" : "Identifier", + "location" : [ 52, 18, 52, 22 ], + "name" : "print" + } + }, + "args" : [ ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/extra/mergesort.py b/pa1-tests/extra/mergesort.py new file mode 100644 index 0000000..096c2c8 --- /dev/null +++ b/pa1-tests/extra/mergesort.py @@ -0,0 +1,62 @@ +def append(a: [int], k: int) -> [int]: + return a + [k] + + +def extend(a: [int], b: [int], b_start: int, b_end: int) -> [int]: + extended: [int] = None + i: int = 0 + + extended = a + i = b_start + while i < b_end: + extended = append(extended, b[i]) + i = i + 1 + return extended + + +def merge(left: [int], right: [int]) -> [int]: + merged: [int] = None + i: int = 0 + j: int = 0 + + merged = [] + while i < len(left) and j < len(right): + if left[i] < right[j]: + merged = append(merged, left[i]) + i = i + 1 + else: + merged = append(merged, right[j]) + j = j + 1 + + if i < len(left): + merged = extend(merged, left, i, len(left)) + if j < len(right): + merged = extend(merged, right, j, len(right)) + + return merged + + +def mergesort(a: [int]) -> [int]: + mid: int = 0 + left: [int] = None + right: [int] = None + + if len(a) < 2: + return a + + mid = len(a) // 2 + left = extend([], a, 0, mid) + right = extend([], a, mid, len(a)) + + left = mergesort(left) + right = mergesort(right) + return merge(left, right) + + +initial: [int] = None +ordered: [int] = None + +initial = [2, 7, 3, 11, 5] +ordered = mergesort(initial) + +print(ordered) diff --git a/pa1-tests/extra/mergesort.py.ast b/pa1-tests/extra/mergesort.py.ast new file mode 100644 index 0000000..f11bb0f --- /dev/null +++ b/pa1-tests/extra/mergesort.py.ast @@ -0,0 +1,1262 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 62, 15 ], + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 1, 1, 2, 19 ], + "name" : { + "kind" : "Identifier", + "location" : [ 1, 5, 1, 10 ], + "name" : "append" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 1, 12, 1, 19 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 1, 12, 1, 12 ], + "name" : "a" + }, + "type" : { + "kind" : "ListType", + "location" : [ 1, 15, 1, 19 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 1, 16, 1, 18 ], + "className" : "int" + } + } + }, { + "kind" : "TypedVar", + "location" : [ 1, 22, 1, 27 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 1, 22, 1, 22 ], + "name" : "k" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 1, 25, 1, 27 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ListType", + "location" : [ 1, 33, 1, 37 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 1, 34, 1, 36 ], + "className" : "int" + } + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 2, 5, 2, 18 ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 2, 12, 2, 18 ], + "left" : { + "kind" : "Identifier", + "location" : [ 2, 12, 2, 12 ], + "name" : "a" + }, + "operator" : "+", + "right" : { + "kind" : "ListExpr", + "location" : [ 2, 16, 2, 18 ], + "elements" : [ { + "kind" : "Identifier", + "location" : [ 2, 17, 2, 17 ], + "name" : "k" + } ] + } + } + } ] + }, { + "kind" : "FuncDef", + "location" : [ 5, 1, 14, 20 ], + "name" : { + "kind" : "Identifier", + "location" : [ 5, 5, 5, 10 ], + "name" : "extend" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 5, 12, 5, 19 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 5, 12, 5, 12 ], + "name" : "a" + }, + "type" : { + "kind" : "ListType", + "location" : [ 5, 15, 5, 19 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 5, 16, 5, 18 ], + "className" : "int" + } + } + }, { + "kind" : "TypedVar", + "location" : [ 5, 22, 5, 29 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 5, 22, 5, 22 ], + "name" : "b" + }, + "type" : { + "kind" : "ListType", + "location" : [ 5, 25, 5, 29 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 5, 26, 5, 28 ], + "className" : "int" + } + } + }, { + "kind" : "TypedVar", + "location" : [ 5, 32, 5, 43 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 5, 32, 5, 38 ], + "name" : "b_start" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 5, 41, 5, 43 ], + "className" : "int" + } + }, { + "kind" : "TypedVar", + "location" : [ 5, 46, 5, 55 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 5, 46, 5, 50 ], + "name" : "b_end" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 5, 53, 5, 55 ], + "className" : "int" + } + } ], + "returnType" : { + "kind" : "ListType", + "location" : [ 5, 61, 5, 65 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 5, 62, 5, 64 ], + "className" : "int" + } + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 6, 5, 6, 26 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 6, 5, 6, 19 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 6, 5, 6, 12 ], + "name" : "extended" + }, + "type" : { + "kind" : "ListType", + "location" : [ 6, 15, 6, 19 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 6, 16, 6, 18 ], + "className" : "int" + } + } + }, + "value" : { + "kind" : "NoneLiteral", + "location" : [ 6, 23, 6, 26 ] + } + }, { + "kind" : "VarDef", + "location" : [ 7, 5, 7, 14 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 7, 5, 7, 10 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 7, 5, 7, 5 ], + "name" : "i" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 7, 8, 7, 10 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 7, 14, 7, 14 ], + "value" : 0 + } + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 9, 5, 9, 16 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 9, 5, 9, 12 ], + "name" : "extended" + } ], + "value" : { + "kind" : "Identifier", + "location" : [ 9, 16, 9, 16 ], + "name" : "a" + } + }, { + "kind" : "AssignStmt", + "location" : [ 10, 5, 10, 15 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 10, 5, 10, 5 ], + "name" : "i" + } ], + "value" : { + "kind" : "Identifier", + "location" : [ 10, 9, 10, 15 ], + "name" : "b_start" + } + }, { + "kind" : "WhileStmt", + "location" : [ 11, 5, 14, 4 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 11, 11, 11, 19 ], + "left" : { + "kind" : "Identifier", + "location" : [ 11, 11, 11, 11 ], + "name" : "i" + }, + "operator" : "<", + "right" : { + "kind" : "Identifier", + "location" : [ 11, 15, 11, 19 ], + "name" : "b_end" + } + }, + "body" : [ { + "kind" : "AssignStmt", + "location" : [ 12, 9, 12, 41 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 12, 9, 12, 16 ], + "name" : "extended" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 12, 20, 12, 41 ], + "function" : { + "kind" : "Identifier", + "location" : [ 12, 20, 12, 25 ], + "name" : "append" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 12, 27, 12, 34 ], + "name" : "extended" + }, { + "kind" : "IndexExpr", + "location" : [ 12, 37, 12, 40 ], + "list" : { + "kind" : "Identifier", + "location" : [ 12, 37, 12, 37 ], + "name" : "b" + }, + "index" : { + "kind" : "Identifier", + "location" : [ 12, 39, 12, 39 ], + "name" : "i" + } + } ] + } + }, { + "kind" : "AssignStmt", + "location" : [ 13, 9, 13, 17 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 13, 9, 13, 9 ], + "name" : "i" + } ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 13, 13, 13, 17 ], + "left" : { + "kind" : "Identifier", + "location" : [ 13, 13, 13, 13 ], + "name" : "i" + }, + "operator" : "+", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 13, 17, 13, 17 ], + "value" : 1 + } + } + } ] + }, { + "kind" : "ReturnStmt", + "location" : [ 14, 5, 14, 19 ], + "value" : { + "kind" : "Identifier", + "location" : [ 14, 12, 14, 19 ], + "name" : "extended" + } + } ] + }, { + "kind" : "FuncDef", + "location" : [ 17, 1, 36, 18 ], + "name" : { + "kind" : "Identifier", + "location" : [ 17, 5, 17, 9 ], + "name" : "merge" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 17, 11, 17, 21 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 17, 11, 17, 14 ], + "name" : "left" + }, + "type" : { + "kind" : "ListType", + "location" : [ 17, 17, 17, 21 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 17, 18, 17, 20 ], + "className" : "int" + } + } + }, { + "kind" : "TypedVar", + "location" : [ 17, 24, 17, 35 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 17, 24, 17, 28 ], + "name" : "right" + }, + "type" : { + "kind" : "ListType", + "location" : [ 17, 31, 17, 35 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 17, 32, 17, 34 ], + "className" : "int" + } + } + } ], + "returnType" : { + "kind" : "ListType", + "location" : [ 17, 41, 17, 45 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 17, 42, 17, 44 ], + "className" : "int" + } + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 18, 5, 18, 24 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 18, 5, 18, 17 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 18, 5, 18, 10 ], + "name" : "merged" + }, + "type" : { + "kind" : "ListType", + "location" : [ 18, 13, 18, 17 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 18, 14, 18, 16 ], + "className" : "int" + } + } + }, + "value" : { + "kind" : "NoneLiteral", + "location" : [ 18, 21, 18, 24 ] + } + }, { + "kind" : "VarDef", + "location" : [ 19, 5, 19, 14 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 19, 5, 19, 10 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 19, 5, 19, 5 ], + "name" : "i" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 19, 8, 19, 10 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 19, 14, 19, 14 ], + "value" : 0 + } + }, { + "kind" : "VarDef", + "location" : [ 20, 5, 20, 14 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 20, 5, 20, 10 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 20, 5, 20, 5 ], + "name" : "j" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 20, 8, 20, 10 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 20, 14, 20, 14 ], + "value" : 0 + } + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 22, 5, 22, 15 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 22, 5, 22, 10 ], + "name" : "merged" + } ], + "value" : { + "kind" : "ListExpr", + "location" : [ 22, 14, 22, 15 ], + "elements" : [ ] + } + }, { + "kind" : "WhileStmt", + "location" : [ 23, 5, 31, 4 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 23, 11, 23, 42 ], + "left" : { + "kind" : "BinaryExpr", + "location" : [ 23, 11, 23, 23 ], + "left" : { + "kind" : "Identifier", + "location" : [ 23, 11, 23, 11 ], + "name" : "i" + }, + "operator" : "<", + "right" : { + "kind" : "CallExpr", + "location" : [ 23, 15, 23, 23 ], + "function" : { + "kind" : "Identifier", + "location" : [ 23, 15, 23, 17 ], + "name" : "len" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 23, 19, 23, 22 ], + "name" : "left" + } ] + } + }, + "operator" : "and", + "right" : { + "kind" : "BinaryExpr", + "location" : [ 23, 29, 23, 42 ], + "left" : { + "kind" : "Identifier", + "location" : [ 23, 29, 23, 29 ], + "name" : "j" + }, + "operator" : "<", + "right" : { + "kind" : "CallExpr", + "location" : [ 23, 33, 23, 42 ], + "function" : { + "kind" : "Identifier", + "location" : [ 23, 33, 23, 35 ], + "name" : "len" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 23, 37, 23, 41 ], + "name" : "right" + } ] + } + } + }, + "body" : [ { + "kind" : "IfStmt", + "location" : [ 24, 9, 31, 4 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 24, 12, 24, 29 ], + "left" : { + "kind" : "IndexExpr", + "location" : [ 24, 12, 24, 18 ], + "list" : { + "kind" : "Identifier", + "location" : [ 24, 12, 24, 15 ], + "name" : "left" + }, + "index" : { + "kind" : "Identifier", + "location" : [ 24, 17, 24, 17 ], + "name" : "i" + } + }, + "operator" : "<", + "right" : { + "kind" : "IndexExpr", + "location" : [ 24, 22, 24, 29 ], + "list" : { + "kind" : "Identifier", + "location" : [ 24, 22, 24, 26 ], + "name" : "right" + }, + "index" : { + "kind" : "Identifier", + "location" : [ 24, 28, 24, 28 ], + "name" : "j" + } + } + }, + "thenBody" : [ { + "kind" : "AssignStmt", + "location" : [ 25, 13, 25, 44 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 25, 13, 25, 18 ], + "name" : "merged" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 25, 22, 25, 44 ], + "function" : { + "kind" : "Identifier", + "location" : [ 25, 22, 25, 27 ], + "name" : "append" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 25, 29, 25, 34 ], + "name" : "merged" + }, { + "kind" : "IndexExpr", + "location" : [ 25, 37, 25, 43 ], + "list" : { + "kind" : "Identifier", + "location" : [ 25, 37, 25, 40 ], + "name" : "left" + }, + "index" : { + "kind" : "Identifier", + "location" : [ 25, 42, 25, 42 ], + "name" : "i" + } + } ] + } + }, { + "kind" : "AssignStmt", + "location" : [ 26, 13, 26, 21 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 26, 13, 26, 13 ], + "name" : "i" + } ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 26, 17, 26, 21 ], + "left" : { + "kind" : "Identifier", + "location" : [ 26, 17, 26, 17 ], + "name" : "i" + }, + "operator" : "+", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 26, 21, 26, 21 ], + "value" : 1 + } + } + } ], + "elseBody" : [ { + "kind" : "AssignStmt", + "location" : [ 28, 13, 28, 45 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 28, 13, 28, 18 ], + "name" : "merged" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 28, 22, 28, 45 ], + "function" : { + "kind" : "Identifier", + "location" : [ 28, 22, 28, 27 ], + "name" : "append" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 28, 29, 28, 34 ], + "name" : "merged" + }, { + "kind" : "IndexExpr", + "location" : [ 28, 37, 28, 44 ], + "list" : { + "kind" : "Identifier", + "location" : [ 28, 37, 28, 41 ], + "name" : "right" + }, + "index" : { + "kind" : "Identifier", + "location" : [ 28, 43, 28, 43 ], + "name" : "j" + } + } ] + } + }, { + "kind" : "AssignStmt", + "location" : [ 29, 13, 29, 21 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 29, 13, 29, 13 ], + "name" : "j" + } ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 29, 17, 29, 21 ], + "left" : { + "kind" : "Identifier", + "location" : [ 29, 17, 29, 17 ], + "name" : "j" + }, + "operator" : "+", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 29, 21, 29, 21 ], + "value" : 1 + } + } + } ] + } ] + }, { + "kind" : "IfStmt", + "location" : [ 31, 5, 33, 4 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 31, 8, 31, 20 ], + "left" : { + "kind" : "Identifier", + "location" : [ 31, 8, 31, 8 ], + "name" : "i" + }, + "operator" : "<", + "right" : { + "kind" : "CallExpr", + "location" : [ 31, 12, 31, 20 ], + "function" : { + "kind" : "Identifier", + "location" : [ 31, 12, 31, 14 ], + "name" : "len" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 31, 16, 31, 19 ], + "name" : "left" + } ] + } + }, + "thenBody" : [ { + "kind" : "AssignStmt", + "location" : [ 32, 9, 32, 51 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 32, 9, 32, 14 ], + "name" : "merged" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 32, 18, 32, 51 ], + "function" : { + "kind" : "Identifier", + "location" : [ 32, 18, 32, 23 ], + "name" : "extend" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 32, 25, 32, 30 ], + "name" : "merged" + }, { + "kind" : "Identifier", + "location" : [ 32, 33, 32, 36 ], + "name" : "left" + }, { + "kind" : "Identifier", + "location" : [ 32, 39, 32, 39 ], + "name" : "i" + }, { + "kind" : "CallExpr", + "location" : [ 32, 42, 32, 50 ], + "function" : { + "kind" : "Identifier", + "location" : [ 32, 42, 32, 44 ], + "name" : "len" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 32, 46, 32, 49 ], + "name" : "left" + } ] + } ] + } + } ], + "elseBody" : [ ] + }, { + "kind" : "IfStmt", + "location" : [ 33, 5, 36, 4 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 33, 8, 33, 21 ], + "left" : { + "kind" : "Identifier", + "location" : [ 33, 8, 33, 8 ], + "name" : "j" + }, + "operator" : "<", + "right" : { + "kind" : "CallExpr", + "location" : [ 33, 12, 33, 21 ], + "function" : { + "kind" : "Identifier", + "location" : [ 33, 12, 33, 14 ], + "name" : "len" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 33, 16, 33, 20 ], + "name" : "right" + } ] + } + }, + "thenBody" : [ { + "kind" : "AssignStmt", + "location" : [ 34, 9, 34, 53 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 34, 9, 34, 14 ], + "name" : "merged" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 34, 18, 34, 53 ], + "function" : { + "kind" : "Identifier", + "location" : [ 34, 18, 34, 23 ], + "name" : "extend" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 34, 25, 34, 30 ], + "name" : "merged" + }, { + "kind" : "Identifier", + "location" : [ 34, 33, 34, 37 ], + "name" : "right" + }, { + "kind" : "Identifier", + "location" : [ 34, 40, 34, 40 ], + "name" : "j" + }, { + "kind" : "CallExpr", + "location" : [ 34, 43, 34, 52 ], + "function" : { + "kind" : "Identifier", + "location" : [ 34, 43, 34, 45 ], + "name" : "len" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 34, 47, 34, 51 ], + "name" : "right" + } ] + } ] + } + } ], + "elseBody" : [ ] + }, { + "kind" : "ReturnStmt", + "location" : [ 36, 5, 36, 17 ], + "value" : { + "kind" : "Identifier", + "location" : [ 36, 12, 36, 17 ], + "name" : "merged" + } + } ] + }, { + "kind" : "FuncDef", + "location" : [ 39, 1, 53, 30 ], + "name" : { + "kind" : "Identifier", + "location" : [ 39, 5, 39, 13 ], + "name" : "mergesort" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 39, 15, 39, 22 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 39, 15, 39, 15 ], + "name" : "a" + }, + "type" : { + "kind" : "ListType", + "location" : [ 39, 18, 39, 22 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 39, 19, 39, 21 ], + "className" : "int" + } + } + } ], + "returnType" : { + "kind" : "ListType", + "location" : [ 39, 28, 39, 32 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 39, 29, 39, 31 ], + "className" : "int" + } + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 40, 5, 40, 16 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 40, 5, 40, 12 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 40, 5, 40, 7 ], + "name" : "mid" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 40, 10, 40, 12 ], + "className" : "int" + } + }, + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 40, 16, 40, 16 ], + "value" : 0 + } + }, { + "kind" : "VarDef", + "location" : [ 41, 5, 41, 22 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 41, 5, 41, 15 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 41, 5, 41, 8 ], + "name" : "left" + }, + "type" : { + "kind" : "ListType", + "location" : [ 41, 11, 41, 15 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 41, 12, 41, 14 ], + "className" : "int" + } + } + }, + "value" : { + "kind" : "NoneLiteral", + "location" : [ 41, 19, 41, 22 ] + } + }, { + "kind" : "VarDef", + "location" : [ 42, 5, 42, 23 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 42, 5, 42, 16 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 42, 5, 42, 9 ], + "name" : "right" + }, + "type" : { + "kind" : "ListType", + "location" : [ 42, 12, 42, 16 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 42, 13, 42, 15 ], + "className" : "int" + } + } + }, + "value" : { + "kind" : "NoneLiteral", + "location" : [ 42, 20, 42, 23 ] + } + } ], + "statements" : [ { + "kind" : "IfStmt", + "location" : [ 44, 5, 47, 4 ], + "condition" : { + "kind" : "BinaryExpr", + "location" : [ 44, 8, 44, 17 ], + "left" : { + "kind" : "CallExpr", + "location" : [ 44, 8, 44, 13 ], + "function" : { + "kind" : "Identifier", + "location" : [ 44, 8, 44, 10 ], + "name" : "len" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 44, 12, 44, 12 ], + "name" : "a" + } ] + }, + "operator" : "<", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 44, 17, 44, 17 ], + "value" : 2 + } + }, + "thenBody" : [ { + "kind" : "ReturnStmt", + "location" : [ 45, 9, 45, 16 ], + "value" : { + "kind" : "Identifier", + "location" : [ 45, 16, 45, 16 ], + "name" : "a" + } + } ], + "elseBody" : [ ] + }, { + "kind" : "AssignStmt", + "location" : [ 47, 5, 47, 21 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 47, 5, 47, 7 ], + "name" : "mid" + } ], + "value" : { + "kind" : "BinaryExpr", + "location" : [ 47, 11, 47, 21 ], + "left" : { + "kind" : "CallExpr", + "location" : [ 47, 11, 47, 16 ], + "function" : { + "kind" : "Identifier", + "location" : [ 47, 11, 47, 13 ], + "name" : "len" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 47, 15, 47, 15 ], + "name" : "a" + } ] + }, + "operator" : "//", + "right" : { + "kind" : "IntegerLiteral", + "location" : [ 47, 21, 47, 21 ], + "value" : 2 + } + } + }, { + "kind" : "AssignStmt", + "location" : [ 48, 5, 48, 32 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 48, 5, 48, 8 ], + "name" : "left" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 48, 12, 48, 32 ], + "function" : { + "kind" : "Identifier", + "location" : [ 48, 12, 48, 17 ], + "name" : "extend" + }, + "args" : [ { + "kind" : "ListExpr", + "location" : [ 48, 19, 48, 20 ], + "elements" : [ ] + }, { + "kind" : "Identifier", + "location" : [ 48, 23, 48, 23 ], + "name" : "a" + }, { + "kind" : "IntegerLiteral", + "location" : [ 48, 26, 48, 26 ], + "value" : 0 + }, { + "kind" : "Identifier", + "location" : [ 48, 29, 48, 31 ], + "name" : "mid" + } ] + } + }, { + "kind" : "AssignStmt", + "location" : [ 49, 5, 49, 38 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 49, 5, 49, 9 ], + "name" : "right" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 49, 13, 49, 38 ], + "function" : { + "kind" : "Identifier", + "location" : [ 49, 13, 49, 18 ], + "name" : "extend" + }, + "args" : [ { + "kind" : "ListExpr", + "location" : [ 49, 20, 49, 21 ], + "elements" : [ ] + }, { + "kind" : "Identifier", + "location" : [ 49, 24, 49, 24 ], + "name" : "a" + }, { + "kind" : "Identifier", + "location" : [ 49, 27, 49, 29 ], + "name" : "mid" + }, { + "kind" : "CallExpr", + "location" : [ 49, 32, 49, 37 ], + "function" : { + "kind" : "Identifier", + "location" : [ 49, 32, 49, 34 ], + "name" : "len" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 49, 36, 49, 36 ], + "name" : "a" + } ] + } ] + } + }, { + "kind" : "AssignStmt", + "location" : [ 51, 5, 51, 26 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 51, 5, 51, 8 ], + "name" : "left" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 51, 12, 51, 26 ], + "function" : { + "kind" : "Identifier", + "location" : [ 51, 12, 51, 20 ], + "name" : "mergesort" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 51, 22, 51, 25 ], + "name" : "left" + } ] + } + }, { + "kind" : "AssignStmt", + "location" : [ 52, 5, 52, 28 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 52, 5, 52, 9 ], + "name" : "right" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 52, 13, 52, 28 ], + "function" : { + "kind" : "Identifier", + "location" : [ 52, 13, 52, 21 ], + "name" : "mergesort" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 52, 23, 52, 27 ], + "name" : "right" + } ] + } + }, { + "kind" : "ReturnStmt", + "location" : [ 53, 5, 53, 29 ], + "value" : { + "kind" : "CallExpr", + "location" : [ 53, 12, 53, 29 ], + "function" : { + "kind" : "Identifier", + "location" : [ 53, 12, 53, 16 ], + "name" : "merge" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 53, 18, 53, 21 ], + "name" : "left" + }, { + "kind" : "Identifier", + "location" : [ 53, 24, 53, 28 ], + "name" : "right" + } ] + } + } ] + }, { + "kind" : "VarDef", + "location" : [ 56, 1, 56, 21 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 56, 1, 56, 14 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 56, 1, 56, 7 ], + "name" : "initial" + }, + "type" : { + "kind" : "ListType", + "location" : [ 56, 10, 56, 14 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 56, 11, 56, 13 ], + "className" : "int" + } + } + }, + "value" : { + "kind" : "NoneLiteral", + "location" : [ 56, 18, 56, 21 ] + } + }, { + "kind" : "VarDef", + "location" : [ 57, 1, 57, 21 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 57, 1, 57, 14 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 57, 1, 57, 7 ], + "name" : "ordered" + }, + "type" : { + "kind" : "ListType", + "location" : [ 57, 10, 57, 14 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 57, 11, 57, 13 ], + "className" : "int" + } + } + }, + "value" : { + "kind" : "NoneLiteral", + "location" : [ 57, 18, 57, 21 ] + } + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 59, 1, 59, 26 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 59, 1, 59, 7 ], + "name" : "initial" + } ], + "value" : { + "kind" : "ListExpr", + "location" : [ 59, 11, 59, 26 ], + "elements" : [ { + "kind" : "IntegerLiteral", + "location" : [ 59, 12, 59, 12 ], + "value" : 2 + }, { + "kind" : "IntegerLiteral", + "location" : [ 59, 15, 59, 15 ], + "value" : 7 + }, { + "kind" : "IntegerLiteral", + "location" : [ 59, 18, 59, 18 ], + "value" : 3 + }, { + "kind" : "IntegerLiteral", + "location" : [ 59, 21, 59, 22 ], + "value" : 11 + }, { + "kind" : "IntegerLiteral", + "location" : [ 59, 25, 59, 25 ], + "value" : 5 + } ] + } + }, { + "kind" : "AssignStmt", + "location" : [ 60, 1, 60, 28 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 60, 1, 60, 7 ], + "name" : "ordered" + } ], + "value" : { + "kind" : "CallExpr", + "location" : [ 60, 11, 60, 28 ], + "function" : { + "kind" : "Identifier", + "location" : [ 60, 11, 60, 19 ], + "name" : "mergesort" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 60, 21, 60, 27 ], + "name" : "initial" + } ] + } + }, { + "kind" : "ExprStmt", + "location" : [ 62, 1, 62, 14 ], + "expr" : { + "kind" : "CallExpr", + "location" : [ 62, 1, 62, 14 ], + "function" : { + "kind" : "Identifier", + "location" : [ 62, 1, 62, 5 ], + "name" : "print" + }, + "args" : [ { + "kind" : "Identifier", + "location" : [ 62, 7, 62, 13 ], + "name" : "ordered" + } ] + } + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/extra/nesting.py b/pa1-tests/extra/nesting.py new file mode 100644 index 0000000..f82976a --- /dev/null +++ b/pa1-tests/extra/nesting.py @@ -0,0 +1,45 @@ +class s(object): + t: object = None + +class r(object): + sobj: s = None + +class q(object): + robj: r = None + +class p(q): + def f(self: "p") -> object: + return self.robj.sobj.t + +def a() -> int: + def b() -> int: + def c() -> int: + def d() -> int: + def e() -> int: + return 1 + return e() + return d() + return c() + return b() + +def w(): + def x(): + def y(): + def z(): + 4 + 3 + 2 + 1 + +xs: [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[int]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] = None +xs = [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[1]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + +if 1: + if 2: + if 3: + if 4: + True + elif -3: + False +else: + False diff --git a/pa1-tests/extra/nesting.py.ast b/pa1-tests/extra/nesting.py.ast new file mode 100644 index 0000000..d3157cb --- /dev/null +++ b/pa1-tests/extra/nesting.py.ast @@ -0,0 +1,799 @@ +{ + "kind" : "Program", + "location" : [ 1, 1, 46, 1 ], + "declarations" : [ { + "kind" : "ClassDef", + "location" : [ 1, 1, 2, 21 ], + "name" : { + "kind" : "Identifier", + "location" : [ 1, 7, 1, 7 ], + "name" : "s" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 1, 9, 1, 14 ], + "name" : "object" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 2, 5, 2, 20 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 2, 5, 2, 13 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 2, 5, 2, 5 ], + "name" : "t" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 2, 8, 2, 13 ], + "className" : "object" + } + }, + "value" : { + "kind" : "NoneLiteral", + "location" : [ 2, 17, 2, 20 ] + } + } ] + }, { + "kind" : "ClassDef", + "location" : [ 4, 1, 5, 19 ], + "name" : { + "kind" : "Identifier", + "location" : [ 4, 7, 4, 7 ], + "name" : "r" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 4, 9, 4, 14 ], + "name" : "object" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 5, 5, 5, 18 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 5, 5, 5, 11 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 5, 5, 5, 8 ], + "name" : "sobj" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 5, 11, 5, 11 ], + "className" : "s" + } + }, + "value" : { + "kind" : "NoneLiteral", + "location" : [ 5, 15, 5, 18 ] + } + } ] + }, { + "kind" : "ClassDef", + "location" : [ 7, 1, 8, 19 ], + "name" : { + "kind" : "Identifier", + "location" : [ 7, 7, 7, 7 ], + "name" : "q" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 7, 9, 7, 14 ], + "name" : "object" + }, + "declarations" : [ { + "kind" : "VarDef", + "location" : [ 8, 5, 8, 18 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 8, 5, 8, 11 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 8, 5, 8, 8 ], + "name" : "robj" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 8, 11, 8, 11 ], + "className" : "r" + } + }, + "value" : { + "kind" : "NoneLiteral", + "location" : [ 8, 15, 8, 18 ] + } + } ] + }, { + "kind" : "ClassDef", + "location" : [ 10, 1, 14, 0 ], + "name" : { + "kind" : "Identifier", + "location" : [ 10, 7, 10, 7 ], + "name" : "p" + }, + "superClass" : { + "kind" : "Identifier", + "location" : [ 10, 9, 10, 9 ], + "name" : "q" + }, + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 11, 5, 12, 32 ], + "name" : { + "kind" : "Identifier", + "location" : [ 11, 9, 11, 9 ], + "name" : "f" + }, + "params" : [ { + "kind" : "TypedVar", + "location" : [ 11, 11, 11, 19 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 11, 11, 11, 14 ], + "name" : "self" + }, + "type" : { + "kind" : "ClassType", + "location" : [ 11, 17, 11, 19 ], + "className" : "p" + } + } ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 11, 25, 11, 30 ], + "className" : "object" + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 12, 9, 12, 31 ], + "value" : { + "kind" : "MemberExpr", + "location" : [ 12, 16, 12, 31 ], + "object" : { + "kind" : "MemberExpr", + "location" : [ 12, 16, 12, 29 ], + "object" : { + "kind" : "MemberExpr", + "location" : [ 12, 16, 12, 24 ], + "object" : { + "kind" : "Identifier", + "location" : [ 12, 16, 12, 19 ], + "name" : "self" + }, + "member" : { + "kind" : "Identifier", + "location" : [ 12, 21, 12, 24 ], + "name" : "robj" + } + }, + "member" : { + "kind" : "Identifier", + "location" : [ 12, 26, 12, 29 ], + "name" : "sobj" + } + }, + "member" : { + "kind" : "Identifier", + "location" : [ 12, 31, 12, 31 ], + "name" : "t" + } + } + } ] + } ] + }, { + "kind" : "FuncDef", + "location" : [ 14, 1, 23, 15 ], + "name" : { + "kind" : "Identifier", + "location" : [ 14, 5, 14, 5 ], + "name" : "a" + }, + "params" : [ ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 14, 12, 14, 14 ], + "className" : "int" + }, + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 15, 5, 22, 19 ], + "name" : { + "kind" : "Identifier", + "location" : [ 15, 9, 15, 9 ], + "name" : "b" + }, + "params" : [ ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 15, 16, 15, 18 ], + "className" : "int" + }, + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 16, 9, 21, 23 ], + "name" : { + "kind" : "Identifier", + "location" : [ 16, 13, 16, 13 ], + "name" : "c" + }, + "params" : [ ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 16, 20, 16, 22 ], + "className" : "int" + }, + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 17, 13, 20, 27 ], + "name" : { + "kind" : "Identifier", + "location" : [ 17, 17, 17, 17 ], + "name" : "d" + }, + "params" : [ ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 17, 24, 17, 26 ], + "className" : "int" + }, + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 18, 17, 19, 29 ], + "name" : { + "kind" : "Identifier", + "location" : [ 18, 21, 18, 21 ], + "name" : "e" + }, + "params" : [ ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 18, 28, 18, 30 ], + "className" : "int" + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 19, 21, 19, 28 ], + "value" : { + "kind" : "IntegerLiteral", + "location" : [ 19, 28, 19, 28 ], + "value" : 1 + } + } ] + } ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 20, 17, 20, 26 ], + "value" : { + "kind" : "CallExpr", + "location" : [ 20, 24, 20, 26 ], + "function" : { + "kind" : "Identifier", + "location" : [ 20, 24, 20, 24 ], + "name" : "e" + }, + "args" : [ ] + } + } ] + } ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 21, 13, 21, 22 ], + "value" : { + "kind" : "CallExpr", + "location" : [ 21, 20, 21, 22 ], + "function" : { + "kind" : "Identifier", + "location" : [ 21, 20, 21, 20 ], + "name" : "d" + }, + "args" : [ ] + } + } ] + } ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 22, 9, 22, 18 ], + "value" : { + "kind" : "CallExpr", + "location" : [ 22, 16, 22, 18 ], + "function" : { + "kind" : "Identifier", + "location" : [ 22, 16, 22, 16 ], + "name" : "c" + }, + "args" : [ ] + } + } ] + } ], + "statements" : [ { + "kind" : "ReturnStmt", + "location" : [ 23, 5, 23, 14 ], + "value" : { + "kind" : "CallExpr", + "location" : [ 23, 12, 23, 14 ], + "function" : { + "kind" : "Identifier", + "location" : [ 23, 12, 23, 12 ], + "name" : "b" + }, + "args" : [ ] + } + } ] + }, { + "kind" : "FuncDef", + "location" : [ 25, 1, 32, 3 ], + "name" : { + "kind" : "Identifier", + "location" : [ 25, 5, 25, 5 ], + "name" : "w" + }, + "params" : [ ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 25, 8, 25, 8 ], + "className" : "" + }, + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 26, 2, 31, 5 ], + "name" : { + "kind" : "Identifier", + "location" : [ 26, 6, 26, 6 ], + "name" : "x" + }, + "params" : [ ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 26, 9, 26, 9 ], + "className" : "" + }, + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 27, 4, 30, 8 ], + "name" : { + "kind" : "Identifier", + "location" : [ 27, 8, 27, 8 ], + "name" : "y" + }, + "params" : [ ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 27, 11, 27, 11 ], + "className" : "" + }, + "declarations" : [ { + "kind" : "FuncDef", + "location" : [ 28, 7, 29, 12 ], + "name" : { + "kind" : "Identifier", + "location" : [ 28, 11, 28, 11 ], + "name" : "z" + }, + "params" : [ ], + "returnType" : { + "kind" : "ClassType", + "location" : [ 28, 14, 28, 14 ], + "className" : "" + }, + "declarations" : [ ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 29, 11, 29, 11 ], + "expr" : { + "kind" : "IntegerLiteral", + "location" : [ 29, 11, 29, 11 ], + "value" : 4 + } + } ] + } ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 30, 7, 30, 7 ], + "expr" : { + "kind" : "IntegerLiteral", + "location" : [ 30, 7, 30, 7 ], + "value" : 3 + } + } ] + } ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 31, 4, 31, 4 ], + "expr" : { + "kind" : "IntegerLiteral", + "location" : [ 31, 4, 31, 4 ], + "value" : 2 + } + } ] + } ], + "statements" : [ { + "kind" : "ExprStmt", + "location" : [ 32, 2, 32, 2 ], + "expr" : { + "kind" : "IntegerLiteral", + "location" : [ 32, 2, 32, 2 ], + "value" : 1 + } + } ] + }, { + "kind" : "VarDef", + "location" : [ 34, 1, 34, 78 ], + "var" : { + "kind" : "TypedVar", + "location" : [ 34, 1, 34, 71 ], + "identifier" : { + "kind" : "Identifier", + "location" : [ 34, 1, 34, 2 ], + "name" : "xs" + }, + "type" : { + "kind" : "ListType", + "location" : [ 34, 5, 34, 71 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 6, 34, 70 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 7, 34, 69 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 8, 34, 68 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 9, 34, 67 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 10, 34, 66 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 11, 34, 65 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 12, 34, 64 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 13, 34, 63 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 14, 34, 62 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 15, 34, 61 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 16, 34, 60 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 17, 34, 59 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 18, 34, 58 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 19, 34, 57 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 20, 34, 56 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 21, 34, 55 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 22, 34, 54 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 23, 34, 53 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 24, 34, 52 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 25, 34, 51 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 26, 34, 50 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 27, 34, 49 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 28, 34, 48 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 29, 34, 47 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 30, 34, 46 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 31, 34, 45 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 32, 34, 44 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 33, 34, 43 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 34, 34, 42 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 35, 34, 41 ], + "elementType" : { + "kind" : "ListType", + "location" : [ 34, 36, 34, 40 ], + "elementType" : { + "kind" : "ClassType", + "location" : [ 34, 37, 34, 39 ], + "className" : "int" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "value" : { + "kind" : "NoneLiteral", + "location" : [ 34, 75, 34, 78 ] + } + } ], + "statements" : [ { + "kind" : "AssignStmt", + "location" : [ 35, 1, 35, 70 ], + "targets" : [ { + "kind" : "Identifier", + "location" : [ 35, 1, 35, 2 ], + "name" : "xs" + } ], + "value" : { + "kind" : "ListExpr", + "location" : [ 35, 6, 35, 70 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 7, 35, 69 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 8, 35, 68 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 9, 35, 67 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 10, 35, 66 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 11, 35, 65 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 12, 35, 64 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 13, 35, 63 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 14, 35, 62 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 15, 35, 61 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 16, 35, 60 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 17, 35, 59 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 18, 35, 58 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 19, 35, 57 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 20, 35, 56 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 21, 35, 55 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 22, 35, 54 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 23, 35, 53 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 24, 35, 52 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 25, 35, 51 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 26, 35, 50 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 27, 35, 49 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 28, 35, 48 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 29, 35, 47 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 30, 35, 46 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 31, 35, 45 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 32, 35, 44 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 33, 35, 43 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 34, 35, 42 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 35, 35, 41 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 36, 35, 40 ], + "elements" : [ { + "kind" : "ListExpr", + "location" : [ 35, 37, 35, 39 ], + "elements" : [ { + "kind" : "IntegerLiteral", + "location" : [ 35, 38, 35, 38 ], + "value" : 1 + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } ] + } + }, { + "kind" : "IfStmt", + "location" : [ 37, 1, 46, 1 ], + "condition" : { + "kind" : "IntegerLiteral", + "location" : [ 37, 4, 37, 4 ], + "value" : 1 + }, + "thenBody" : [ { + "kind" : "IfStmt", + "location" : [ 38, 5, 44, 0 ], + "condition" : { + "kind" : "IntegerLiteral", + "location" : [ 38, 8, 38, 8 ], + "value" : 2 + }, + "thenBody" : [ { + "kind" : "IfStmt", + "location" : [ 39, 9, 44, 0 ], + "condition" : { + "kind" : "IntegerLiteral", + "location" : [ 39, 12, 39, 12 ], + "value" : 3 + }, + "thenBody" : [ { + "kind" : "IfStmt", + "location" : [ 40, 13, 42, 8 ], + "condition" : { + "kind" : "IntegerLiteral", + "location" : [ 40, 16, 40, 16 ], + "value" : 4 + }, + "thenBody" : [ { + "kind" : "ExprStmt", + "location" : [ 41, 17, 41, 20 ], + "expr" : { + "kind" : "BooleanLiteral", + "location" : [ 41, 17, 41, 20 ], + "value" : true + } + } ], + "elseBody" : [ ] + } ], + "elseBody" : [ { + "kind" : "IfStmt", + "location" : [ 42, 9, 44, 0 ], + "condition" : { + "kind" : "UnaryExpr", + "location" : [ 42, 14, 42, 15 ], + "operator" : "-", + "operand" : { + "kind" : "IntegerLiteral", + "location" : [ 42, 15, 42, 15 ], + "value" : 3 + } + }, + "thenBody" : [ { + "kind" : "ExprStmt", + "location" : [ 43, 13, 43, 17 ], + "expr" : { + "kind" : "BooleanLiteral", + "location" : [ 43, 13, 43, 17 ], + "value" : false + } + } ], + "elseBody" : [ ] + } ] + } ], + "elseBody" : [ ] + } ], + "elseBody" : [ { + "kind" : "ExprStmt", + "location" : [ 45, 5, 45, 9 ], + "expr" : { + "kind" : "BooleanLiteral", + "location" : [ 45, 5, 45, 9 ], + "value" : false + } + } ] + } ], + "errors" : { + "errors" : [ ], + "kind" : "Errors", + "location" : [ 0, 0, 0, 0 ] + } +} \ No newline at end of file diff --git a/pa1-tests/run-tests.sh b/pa1-tests/run-tests.sh new file mode 100755 index 0000000..84a9b70 --- /dev/null +++ b/pa1-tests/run-tests.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +JAVA="java -cp pa1-tests/chocopy-ref.jar:target/assignment.jar chocopy.ChocoPy" + +echo "# CORE TESTS" +${JAVA} --pass=s --test --dir pa1-tests/core + +echo +echo "# EXTRA TESTS" +${JAVA} --pass=s --test --dir pa1-tests/extra + +echo +echo "# STUDENT TESTS" +function regen_ast_and_test { + ${JAVA} --pass=r "${1}" --out "${1}.ast" 2>/dev/null 1>&2 + ${JAVA} --pass=s --test "${1}" +} +regen_ast_and_test src/test/data/pa1/student_contributed/good.py +regen_ast_and_test src/test/data/pa1/student_contributed/bad.py