From 376dfdf53de4f8fcfecc81f2b6cc0e757694495a Mon Sep 17 00:00:00 2001 From: Scarlett Date: Fri, 4 Apr 2025 18:08:59 -0400 Subject: [PATCH] ready for merge! --- .../expected/sp2_carls_mistake.expected | 31 +++++ .../expected/sp2_function_types.expected | 26 ++++ .../expected/sp2_integer_binary_op.expected | 17 +++ .../expected/sp2_invalid_recop.expected | 17 +++ .../expected/sp2_invalid_release.expected | 14 +++ tests/sprint2/expected/sp2_library.expected | 36 ++++++ tests/sprint2/expected/sp2_llnode.expected | 62 ++++++++++ tests/sprint2/expected/sp2_one_line.expected | 30 +++++ .../sprint2/expected/sp2_presidence.expected | 13 ++ tests/sprint2/expected/sp2_simple.expected | 12 ++ .../sp2_valid_assignable_and_mem.expected | 18 +++ tests/sprint2/test/sp2_carls_mistake.alpha | 42 ++++--- tests/sprint2/test/sp2_function_types.alpha | 18 +-- .../sprint2/test/sp2_integer_binary_op.alpha | 23 ++-- tests/sprint2/test/sp2_invalid_recop.alpha | 7 +- tests/sprint2/test/sp2_invalid_release.alpha | 10 +- tests/sprint2/test/sp2_library.alpha | 19 +-- tests/sprint2/test/sp2_llnode.alpha | 116 +++++++++--------- tests/sprint2/test/sp2_one_line.alpha | 2 +- tests/sprint2/test/sp2_presidence.alpha | 10 +- tests/sprint2/test/sp2_simple.alpha | 4 +- .../test/sp2_valid_assignable_and_mem.alpha | 12 +- .../sp3_boolean_binary_op_typecheck.expected | 17 +++ .../sp3_boolean_unary_op_typecheck.expected | 17 +++ .../sp3_carls_second_mistake.expected | 17 +++ .../sp3_integer_binary_op_typecheck.expected | 18 +++ .../sp3_integer_unary_op_typecheck.expected | 17 +++ .../sp3_boolean_binary_op_typecheck.alpha | 16 ++- .../test/sp3_boolean_unary_op_typecheck.alpha | 14 ++- .../test/sp3_carls_second_mistake.alpha | 9 +- .../sp3_integer_binary_op_typecheck.alpha | 22 ++-- .../test/sp3_integer_unary_op_typecheck.alpha | 12 +- 32 files changed, 564 insertions(+), 134 deletions(-) create mode 100644 tests/sprint2/expected/sp2_carls_mistake.expected create mode 100644 tests/sprint2/expected/sp2_function_types.expected create mode 100644 tests/sprint2/expected/sp2_integer_binary_op.expected create mode 100644 tests/sprint2/expected/sp2_invalid_recop.expected create mode 100644 tests/sprint2/expected/sp2_invalid_release.expected create mode 100644 tests/sprint2/expected/sp2_library.expected create mode 100644 tests/sprint2/expected/sp2_llnode.expected create mode 100644 tests/sprint2/expected/sp2_one_line.expected create mode 100644 tests/sprint2/expected/sp2_presidence.expected create mode 100644 tests/sprint2/expected/sp2_simple.expected create mode 100644 tests/sprint2/expected/sp2_valid_assignable_and_mem.expected create mode 100644 tests/sprint3/expected/sp3_boolean_binary_op_typecheck.expected create mode 100644 tests/sprint3/expected/sp3_boolean_unary_op_typecheck.expected create mode 100644 tests/sprint3/expected/sp3_carls_second_mistake.expected create mode 100644 tests/sprint3/expected/sp3_integer_binary_op_typecheck.expected create mode 100644 tests/sprint3/expected/sp3_integer_unary_op_typecheck.expected diff --git a/tests/sprint2/expected/sp2_carls_mistake.expected b/tests/sprint2/expected/sp2_carls_mistake.expected new file mode 100644 index 0000000..23a8694 --- /dev/null +++ b/tests/sprint2/expected/sp2_carls_mistake.expected @@ -0,0 +1,31 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +bar2 : 001001 : : T2 : User Defined +bar1 : 001001 : : T2 : User Defined +foo : 001001 : : T1 : User Defined +arr : 001001 : : 1 -> integer : Type of Array +T2 : 001001 : : primitive function type : User Defined +T1 : 001001 : : primitive function type : User Defined +rec : 001001 : : record : elements-2 +entry : 001001 : : main : User Defined +main : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +w : 026000 : 001001 : rec : User Defined +result : 026000 : 001001 : integer : User Defined +arg : 026000 : 001001 : string : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +r : 021000 : 001001 : integer : User Defined +s : 021000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +a : 017000 : 001001 : rec : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +x : 013000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +y : 004000 : 001001 : integer : User Defined +x : 004000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint2/expected/sp2_function_types.expected b/tests/sprint2/expected/sp2_function_types.expected new file mode 100644 index 0000000..bd1d2ce --- /dev/null +++ b/tests/sprint2/expected/sp2_function_types.expected @@ -0,0 +1,26 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +entry : 001001 : : string2integer : User Defined +integer2integer2integerFunc: 001001 : : integer2integer2integer : User Defined +released : 001001 : : address2integer : User Defined +reserved : 001001 : : integer2address : User Defined +printBoolean : 001001 : : Boolean2integer : User Defined +printCharacter : 001001 : : character2integer : User Defined +printInteger : 001001 : : integer2integer : User Defined +integer2integer2integer : 001001 : : primitive function type : User Defined +address2integer : 001001 : : primitive function type : User Defined +integer2address : 001001 : : primitive function type : User Defined +Boolean2Boolean2Boolean : 001001 : : primitive function type : User Defined +character2character2Boolean: 001001 : : primitive function type : User Defined +integer2integer2Boolean : 001001 : : primitive function type : User Defined +string2integer : 001001 : : primitive function type : User Defined +Boolean2integer : 001001 : : primitive function type : User Defined +character2integer : 001001 : : primitive function type : User Defined +integer2integer : 001001 : : primitive function type : User Defined +Boolean2Boolean : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint2/expected/sp2_integer_binary_op.expected b/tests/sprint2/expected/sp2_integer_binary_op.expected new file mode 100644 index 0000000..299c09d --- /dev/null +++ b/tests/sprint2/expected/sp2_integer_binary_op.expected @@ -0,0 +1,17 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +entry : 001001 : : main : User Defined +main : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +b1 : 005000 : 001001 : Boolean : User Defined +b2 : 005000 : 001001 : Boolean : User Defined +arr2 : 005000 : 001001 : address : User Defined +arr : 005000 : 001001 : address : User Defined +x : 005000 : 001001 : integer : User Defined +arg : 005000 : 001001 : string : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint2/expected/sp2_invalid_recop.expected b/tests/sprint2/expected/sp2_invalid_recop.expected new file mode 100644 index 0000000..5274102 --- /dev/null +++ b/tests/sprint2/expected/sp2_invalid_recop.expected @@ -0,0 +1,17 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +rec : 001001 : : record : elements-2 +entry : 001001 : : main : User Defined +main : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +w : 007000 : 001001 : rec : User Defined +arg : 007000 : 001001 : string : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +y : 004000 : 001001 : integer : User Defined +x : 004000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint2/expected/sp2_invalid_release.expected b/tests/sprint2/expected/sp2_invalid_release.expected new file mode 100644 index 0000000..de26852 --- /dev/null +++ b/tests/sprint2/expected/sp2_invalid_release.expected @@ -0,0 +1,14 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +rec : 001001 : : record : elements-2 +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +w : 004000 : 001001 : rec : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +y : 001000 : 001001 : integer : User Defined +x : 001000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint2/expected/sp2_library.expected b/tests/sprint2/expected/sp2_library.expected new file mode 100644 index 0000000..a1318bd --- /dev/null +++ b/tests/sprint2/expected/sp2_library.expected @@ -0,0 +1,36 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +entry : 001001 : : string2integer : User Defined +printBoolean : 001001 : : Boolean2integer : User Defined +printCharacter : 001001 : : character2integer : User Defined +printInteger : 001001 : : integer2integer : User Defined +address2integer : 001001 : : primitive function type : User Defined +integer2address : 001001 : : primitive function type : User Defined +BooleanXBoolean2Boolean : 001001 : : primitive function type : User Defined +characterXcharacter2Boolean: 001001 : : primitive function type : User Defined +integerXinteger2Boolean : 001001 : : primitive function type : User Defined +integerXinteger2integer : 001001 : : primitive function type : User Defined +string2integer : 001001 : : primitive function type : User Defined +Boolean2integer : 001001 : : primitive function type : User Defined +character2integer : 001001 : : primitive function type : User Defined +integer2integer : 001001 : : primitive function type : User Defined +Boolean2Boolean : 001001 : : primitive function type : User Defined +integerXinteger : 001001 : : record : elements-2 +characterXcharacter : 001001 : : record : elements-2 +BooleanXBoolean : 001001 : : record : elements-2 +string : 001001 : : 1 -> character : Type of Array +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +y : 015000 : 001001 : integer : User Defined +x : 015000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +y : 014000 : 001001 : character : User Defined +x : 014000 : 001001 : character : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +y : 013000 : 001001 : Boolean : User Defined +x : 013000 : 001001 : Boolean : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint2/expected/sp2_llnode.expected b/tests/sprint2/expected/sp2_llnode.expected new file mode 100644 index 0000000..dfe8d53 --- /dev/null +++ b/tests/sprint2/expected/sp2_llnode.expected @@ -0,0 +1,62 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +make_list : 001001 : : list : User Defined +bar2 : 001001 : : T2 : User Defined +bar1 : 001001 : : T2 : User Defined +foo : 001001 : : T1 : User Defined +list : 001001 : : primitive function type : User Defined +llnode : 001001 : : record : elements-3 +T2 : 001001 : : primitive function type : User Defined +T1 : 001001 : : primitive function type : User Defined +rec : 001001 : : record : elements-2 +entry : 001001 : : main : User Defined +main : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +li : 070000 : 001001 : llnode : User Defined +w : 070000 : 001001 : rec : User Defined +result : 070000 : 001001 : integer : User Defined +arg : 070000 : 001001 : string : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +r : 054000 : 001001 : integer : User Defined +s : 054000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +x : 060009 : 054000 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ + : 062028 : 060009 : : Empty Scope +-------------------------:--------:--------:--------------------------:------------------------------ + : 055021 : 054000 : : Empty Scope +-------------------------:--------:--------:--------------------------:------------------------------ + : 056026 : 055021 : : Empty Scope +-------------------------:--------:--------:--------------------------:------------------------------ +a : 050000 : 001001 : rec : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +x : 046000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +temp : 017000 : 001001 : address : User Defined +curr : 017000 : 001001 : address : User Defined +ret : 017000 : 001001 : address : User Defined +orig_a : 017000 : 001001 : integer : User Defined +a : 017000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ + : 021012 : 017000 : : Empty Scope +-------------------------:--------:--------:--------------------------:------------------------------ + : 026023 : 021012 : : Empty Scope +-------------------------:--------:--------:--------------------------:------------------------------ + : 035020 : 026023 : : Empty Scope +-------------------------:--------:--------:--------------------------:------------------------------ + : 031034 : 026023 : : Empty Scope +-------------------------:--------:--------:--------------------------:------------------------------ + : 019029 : 017000 : : Empty Scope +-------------------------:--------:--------:--------------------------:------------------------------ +next : 008000 : 001001 : llnode : User Defined +val : 008000 : 001001 : integer : User Defined +prev : 008000 : 001001 : llnode : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +y : 004000 : 001001 : integer : User Defined +x : 004000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint2/expected/sp2_one_line.expected b/tests/sprint2/expected/sp2_one_line.expected new file mode 100644 index 0000000..8dde170 --- /dev/null +++ b/tests/sprint2/expected/sp2_one_line.expected @@ -0,0 +1,30 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +bar2 : 001001 : : T2 : User Defined +bar1 : 001001 : : T2 : User Defined +foo : 001001 : : T1 : User Defined +T2 : 001001 : : primitive function type : User Defined +T1 : 001001 : : primitive function type : User Defined +rec : 001001 : : record : elements-2 +entry : 001001 : : main : User Defined +main : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +w : 001000 : 001001 : rec : User Defined +result : 001000 : 001001 : integer : User Defined +arg : 001000 : 001001 : string : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +r : 001000 : 001001 : integer : User Defined +s : 001000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +a : 001000 : 001001 : rec : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +x : 001000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +y : 001000 : 001001 : integer : User Defined +x : 001000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint2/expected/sp2_presidence.expected b/tests/sprint2/expected/sp2_presidence.expected new file mode 100644 index 0000000..70d9f83 --- /dev/null +++ b/tests/sprint2/expected/sp2_presidence.expected @@ -0,0 +1,13 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +entry : 001001 : : main : User Defined +main : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +x : 005000 : 001001 : integer : User Defined +arg : 005000 : 001001 : string : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint2/expected/sp2_simple.expected b/tests/sprint2/expected/sp2_simple.expected new file mode 100644 index 0000000..8d55a97 --- /dev/null +++ b/tests/sprint2/expected/sp2_simple.expected @@ -0,0 +1,12 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +entry : 001001 : : main : User Defined +main : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +arg : 005000 : 001001 : string : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint2/expected/sp2_valid_assignable_and_mem.expected b/tests/sprint2/expected/sp2_valid_assignable_and_mem.expected new file mode 100644 index 0000000..ab5cb2a --- /dev/null +++ b/tests/sprint2/expected/sp2_valid_assignable_and_mem.expected @@ -0,0 +1,18 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +T2 : 001001 : : primitive function type : User Defined +rec : 001001 : : record : elements-2 +entry : 001001 : : main : User Defined +main : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +w : 008000 : 001001 : rec : User Defined +arg : 008000 : 001001 : string : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ +y : 004000 : 001001 : integer : User Defined +x : 004000 : 001001 : integer : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint2/test/sp2_carls_mistake.alpha b/tests/sprint2/test/sp2_carls_mistake.alpha index 2f4c1ef..eb9a6f0 100644 --- a/tests/sprint2/test/sp2_carls_mistake.alpha +++ b/tests/sprint2/test/sp2_carls_mistake.alpha @@ -1,28 +1,34 @@ +type main: string -> integer +function entry: main + type rec: [integer: x; integer: y] type T1: integer -> integer type T2: rec -> integer -type arr : 1 -> integer +type arr: 1 -> integer -function foo : T1 -function bar1 : T2 -function bar2 : T2 +function foo: T1 +function bar1: T2 +function bar2: T2 -foo(x) := { - return x * x; +foo (x) := { + return x * x; } -bar1(a) := { - return a.x * a.y; + +bar1 (a) := { + return a.x * a.y; } + bar2 as (r,s) := { - return r * s; + return r * s; } -entry(arg) := { - [ integer: result ; rec: w] - result := foo(5); - w := reserve w; (* see types.alpha – reserve returns a value of type address, which can be assigned to array and record variables*) - w.x := 5; - w.y := 7; - result := bar1(w); (* pass w (a rec type value) to bar1 *) - result := bar2(5,7); (* implicitly build a rec type value, assign 5 and 7 to fields x and y, but call them r and s *) - return 0; + +entry (arg) := { + [ integer: result ; rec: w] + result := foo(5); + w := reserve w; (* see types.alpha – reserve returns a value of type address, which can be assigned to array and record variables*) + w.x := 5; + w.y := 7; + result := bar1(w); (* pass w (a rec type value) to bar1 *) + result := bar2(5,7); (* implicitly build a rec type value, assign 5 and 7 to fields x and y, but call them r and s *) + return 0; } diff --git a/tests/sprint2/test/sp2_function_types.alpha b/tests/sprint2/test/sp2_function_types.alpha index 509de78..62711c3 100644 --- a/tests/sprint2/test/sp2_function_types.alpha +++ b/tests/sprint2/test/sp2_function_types.alpha @@ -3,15 +3,19 @@ type integer2integer: integer -> integer type character2integer: character -> integer type Boolean2integer: Boolean -> integer type string2integer: string -> integer -function integerXinteger2integer: integerXinteger (*-> integer -type integerXinteger2Boolean: integerXinteger -> Boolean -type characterXcharacter2Boolean: characterXcharacter -> Boolean -type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean + +type integer2integer2Boolean: integer2integer -> Boolean +type character2character2Boolean: character2character -> Boolean +type Boolean2Boolean2Boolean: Boolean2Boolean -> Boolean type integer2address: integer -> address type address2integer: address -> integer +type integer2integer2integer: integer2integer -> integer + external function printInteger: integer2integer external function printCharacter: character2integer external function printBoolean: Boolean2integer -external function reserve: integer2address -external function release: address2integer -function entry: string2integer*) \ No newline at end of file +external function reserved: integer2address +external function released: address2integer + +function integer2integer2integerFunc: integer2integer2integer +function entry: string2integer \ No newline at end of file diff --git a/tests/sprint2/test/sp2_integer_binary_op.alpha b/tests/sprint2/test/sp2_integer_binary_op.alpha index 39e00a6..856224f 100644 --- a/tests/sprint2/test/sp2_integer_binary_op.alpha +++ b/tests/sprint2/test/sp2_integer_binary_op.alpha @@ -1,12 +1,17 @@ -entry(arg) := { - [integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1] - x := 3 + 2 * 8; - x := 3 - 2 / 8; - x := 3 * 2 % 8; - x := 3 * 2 % 8; - x := 3 % 2 * 8; - x := 3 + 2 - 8; - arr2 := 1 * reserve x; +type main: string -> integer +function entry: main + +entry (arg) := { + [integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1] + + x := 3 + 2 * 8; + x := 3 - 2 / 8; + x := 3 * 2 % 8; + x := 3 * 2 % 8; + x := 3 % 2 * 8; + x := 3 + 2 - 8; + + arr2 := 1 * reserve x; arr2 := release x; b2 := 3 < 2; b1 := 1 = 2; diff --git a/tests/sprint2/test/sp2_invalid_recop.alpha b/tests/sprint2/test/sp2_invalid_recop.alpha index 5ea874d..41b3a55 100644 --- a/tests/sprint2/test/sp2_invalid_recop.alpha +++ b/tests/sprint2/test/sp2_invalid_recop.alpha @@ -1,10 +1,13 @@ +type main: string -> integer +function entry: main + type rec: [integer: x; integer: y] -entry(arg) := { +entry (arg) := { [rec: w] w := reserve w; w.x := 1; w.y := 2; w.z := 3; - return 0; + return 0; } \ No newline at end of file diff --git a/tests/sprint2/test/sp2_invalid_release.alpha b/tests/sprint2/test/sp2_invalid_release.alpha index 41fbd8a..2bd645a 100644 --- a/tests/sprint2/test/sp2_invalid_release.alpha +++ b/tests/sprint2/test/sp2_invalid_release.alpha @@ -1,8 +1,8 @@ type rec: [integer: x; integer: y] -entry(arg) := { - [rec: w] - w := reserve w; - w := release (w); - return 0; +entry (arg) := { + [rec: w] + w := reserve w; + w := release (w); + return 0; } \ No newline at end of file diff --git a/tests/sprint2/test/sp2_library.alpha b/tests/sprint2/test/sp2_library.alpha index 866857c..82120be 100644 --- a/tests/sprint2/test/sp2_library.alpha +++ b/tests/sprint2/test/sp2_library.alpha @@ -1,11 +1,14 @@ -(* At compiler start-up your program should create symbol table entries for the four primitive types: - Boolean (1 byte) - character (1 byte) - integer (4 bytes) - address (8 bytes) -You should #include this file at the start of your alpha file. -Some useful types are defined below. +(* + At compiler start-up your program should create symbol table entries for the four primitive types: + Boolean (1 byte) + character (1 byte) + integer (4 bytes) + address (8 bytes) + + should #include this file at the start of your alpha file. + Some useful types are defined below. *) + type string: 1 -> character type BooleanXBoolean: [Boolean: x; Boolean: y] type characterXcharacter: [character: x; character: y] @@ -22,7 +25,9 @@ type characterXcharacter2Boolean: characterXcharacter -> Boolean type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean type integer2address: integer -> address type address2integer: address -> integer + external function printInteger: integer2integer external function printCharacter: character2integer external function printBoolean: Boolean2integer + function entry: string2integer diff --git a/tests/sprint2/test/sp2_llnode.alpha b/tests/sprint2/test/sp2_llnode.alpha index 43007ef..2011a83 100644 --- a/tests/sprint2/test/sp2_llnode.alpha +++ b/tests/sprint2/test/sp2_llnode.alpha @@ -1,3 +1,6 @@ +type main: string -> integer +function entry: main + type rec: [integer: x; integer: y] type T1: integer -> integer type T2: rec -> integer @@ -10,66 +13,69 @@ function bar1 : T2 function bar2 : T2 function make_list : list -make_list(a) := { - [integer:orig_a; address: ret; address: curr; address: temp] - if (a < 0 | a = 0) then { - return null; - } else { - ret := reserve llnode; - ret.prev := null; - ret.next := null; - ret.val := a; - while (0 < a) { - temp := reserve llnode; - temp.prev := null; - temp.next := null; - temp.val := val; - if (a = orig_a) then { - ret.next := temp; - temp.prev := ret; - curr := temp; - } else { - curr.next := temp; - temp.prev := curr; - curr := temp; - } - a := a - 1; - } - return ret; +make_list (a) := { + [integer:orig_a; address: ret; address: curr; address: temp] + + if (a < 0 | a = 0) then { + return null; + } else { + ret := reserve llnode; + ret.prev := null; + ret.next := null; + ret.val := a; + while (0 < a) { + temp := reserve llnode; + temp.prev := null; + temp.next := null; + temp.val := val; + if (a = orig_a) then { + ret.next := temp; + temp.prev := ret; + curr := temp; + } else { + curr.next := temp; + temp.prev := curr; + curr := temp; + } + a := a - 1; } + return ret; + } } +foo (x) := { + return x * x; +} -foo(x) := { - return x * x; - } -bar1(a) := { - return a.x * a.y; - } +bar1 (a) := { + return a.x * a.y; +} bar2 as (r,s) := { - if (r < s) then { - while (!(r < s)) { - r := r + 1; - } - } else { - [integer: x] - x := 0; - while (x < 10) { - r := r + s; - } + if (r < s) then { + while (!(r < s)) { + r := r + 1; } - return r * s; - } -entry(arg) := { - [ integer: result ; rec: w; llnode: li] - li := make_list(6); - result := foo(5); - w := reserve w; - w.x := 5; - w.y := 7; - result := bar1(w); - result := bar2(5,7); - - return 0; + } else { + [integer: x] + x := 0; + while (x < 10) { + r := r + s; + } + } + return r * s; +} + +entry (arg) := { + [ integer: result ; rec: w; llnode: li] + + li := make_list(6); + result := foo(5); + w := reserve w; + w.x := 5; + w.y := 7; + result := bar1(w); + result := bar2(5,7); + + return 0; } diff --git a/tests/sprint2/test/sp2_one_line.alpha b/tests/sprint2/test/sp2_one_line.alpha index 9031b5f..f1062e9 100644 --- a/tests/sprint2/test/sp2_one_line.alpha +++ b/tests/sprint2/test/sp2_one_line.alpha @@ -1 +1 @@ -type rec: [integer: x; integer: y] type T1: integer -> integer type T2: rec -> integer function foo : T1 function bar1 : T2 function bar2 : T2 foo(x) := { return x * x; } bar1(a) := { return a.x * a.y; } bar2 as (r,s) := { return r * s; } entry(arg) := { [ integer: result ; rec: w] result := foo(5); w := reserve w; w.x := 5; w.y := 7; result := bar1(w); result := bar2(5,7); return 0; } +type main: string -> integer function entry: main type rec: [integer: x; integer: y] type T1: integer -> integer type T2: rec -> integer function foo : T1 function bar1 : T2 function bar2 : T2 foo(x) := { return x * x; } bar1(a) := { return a.x * a.y; } bar2 as (r,s) := { return r * s; } entry(arg) := { [ integer: result ; rec: w] result := foo(5); w := reserve w; w.x := 5; w.y := 7; result := bar1(w); result := bar2(5,7); return 0; } diff --git a/tests/sprint2/test/sp2_presidence.alpha b/tests/sprint2/test/sp2_presidence.alpha index 9b2ef86..2d60209 100644 --- a/tests/sprint2/test/sp2_presidence.alpha +++ b/tests/sprint2/test/sp2_presidence.alpha @@ -1,4 +1,8 @@ -entry(arg) := { - [integer:x] - x := 3 + 2 * 8; +type main: string -> integer +function entry: main + +entry (arg) := { + [integer:x] + x := 3 + 2 * 8; + return 0; } diff --git a/tests/sprint2/test/sp2_simple.alpha b/tests/sprint2/test/sp2_simple.alpha index 0b214c3..5f60c1b 100644 --- a/tests/sprint2/test/sp2_simple.alpha +++ b/tests/sprint2/test/sp2_simple.alpha @@ -1,5 +1,7 @@ +type main: string -> integer +function entry: main entry(arg) := { [int : x] - return 0; + return 0; } diff --git a/tests/sprint2/test/sp2_valid_assignable_and_mem.alpha b/tests/sprint2/test/sp2_valid_assignable_and_mem.alpha index 43c5a5f..a49c5dd 100644 --- a/tests/sprint2/test/sp2_valid_assignable_and_mem.alpha +++ b/tests/sprint2/test/sp2_valid_assignable_and_mem.alpha @@ -1,12 +1,16 @@ +type main: string -> integer +function entry: main + type rec: [integer: x; integer: y] type T2: rec -> integer entry(arg) := { - [rec: w] - w := reserve w; + [rec: w] + + w := reserve w; w.x := 1; w.y := 2; w := release w; - return 0; - + + return 0; } \ No newline at end of file diff --git a/tests/sprint3/expected/sp3_boolean_binary_op_typecheck.expected b/tests/sprint3/expected/sp3_boolean_binary_op_typecheck.expected new file mode 100644 index 0000000..299c09d --- /dev/null +++ b/tests/sprint3/expected/sp3_boolean_binary_op_typecheck.expected @@ -0,0 +1,17 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +entry : 001001 : : main : User Defined +main : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +b1 : 005000 : 001001 : Boolean : User Defined +b2 : 005000 : 001001 : Boolean : User Defined +arr2 : 005000 : 001001 : address : User Defined +arr : 005000 : 001001 : address : User Defined +x : 005000 : 001001 : integer : User Defined +arg : 005000 : 001001 : string : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint3/expected/sp3_boolean_unary_op_typecheck.expected b/tests/sprint3/expected/sp3_boolean_unary_op_typecheck.expected new file mode 100644 index 0000000..299c09d --- /dev/null +++ b/tests/sprint3/expected/sp3_boolean_unary_op_typecheck.expected @@ -0,0 +1,17 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +entry : 001001 : : main : User Defined +main : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +b1 : 005000 : 001001 : Boolean : User Defined +b2 : 005000 : 001001 : Boolean : User Defined +arr2 : 005000 : 001001 : address : User Defined +arr : 005000 : 001001 : address : User Defined +x : 005000 : 001001 : integer : User Defined +arg : 005000 : 001001 : string : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint3/expected/sp3_carls_second_mistake.expected b/tests/sprint3/expected/sp3_carls_second_mistake.expected new file mode 100644 index 0000000..5d0682f --- /dev/null +++ b/tests/sprint3/expected/sp3_carls_second_mistake.expected @@ -0,0 +1,17 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +a_of_s : 001001 : : 1 -> string : Type of Array +string : 001001 : : 1 -> character : Type of Array +entry : 001001 : : main : User Defined +main : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +many_names : 010000 : 001001 : a_of_s : User Defined +another_name : 010000 : 001001 : string : User Defined +one_name : 010000 : 001001 : string : User Defined +arg : 010000 : 001001 : string : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint3/expected/sp3_integer_binary_op_typecheck.expected b/tests/sprint3/expected/sp3_integer_binary_op_typecheck.expected new file mode 100644 index 0000000..a183cf5 --- /dev/null +++ b/tests/sprint3/expected/sp3_integer_binary_op_typecheck.expected @@ -0,0 +1,18 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +entry : 001001 : : main : User Defined +main : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +a : 005000 : 001001 : character : User Defined +b1 : 005000 : 001001 : Boolean : User Defined +b2 : 005000 : 001001 : Boolean : User Defined +arr2 : 005000 : 001001 : address : User Defined +arr : 005000 : 001001 : address : User Defined +x : 005000 : 001001 : integer : User Defined +arg : 005000 : 001001 : string : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint3/expected/sp3_integer_unary_op_typecheck.expected b/tests/sprint3/expected/sp3_integer_unary_op_typecheck.expected new file mode 100644 index 0000000..299c09d --- /dev/null +++ b/tests/sprint3/expected/sp3_integer_unary_op_typecheck.expected @@ -0,0 +1,17 @@ +NAME : SCOPE : PARENT : TYPE : Extra annotation +-------------------------:--------:--------:--------------------------:------------------------------ +entry : 001001 : : main : User Defined +main : 001001 : : primitive function type : User Defined +integer : 001001 : : Primitive : size-4 bytes +address : 001001 : : Primitive : size-8 bytes +character : 001001 : : Primitive : size-1 bytes +string : 001001 : : 1 -> character : Type of Array +Boolean : 001001 : : Primitive : size-1 bytes +-------------------------:--------:--------:--------------------------:------------------------------ +b1 : 005000 : 001001 : Boolean : User Defined +b2 : 005000 : 001001 : Boolean : User Defined +arr2 : 005000 : 001001 : address : User Defined +arr : 005000 : 001001 : address : User Defined +x : 005000 : 001001 : integer : User Defined +arg : 005000 : 001001 : string : User Defined +-------------------------:--------:--------:--------------------------:------------------------------ diff --git a/tests/sprint3/test/sp3_boolean_binary_op_typecheck.alpha b/tests/sprint3/test/sp3_boolean_binary_op_typecheck.alpha index 5952129..538d982 100644 --- a/tests/sprint3/test/sp3_boolean_binary_op_typecheck.alpha +++ b/tests/sprint3/test/sp3_boolean_binary_op_typecheck.alpha @@ -1,6 +1,12 @@ -entry(arg) := { - [integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1] - b2 := 3 < x; - b1 := arr = 2; - b1 := 6<7 & arr2=7; +type main: string -> integer +function entry: main + +entry (arg) := { + [integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1] + + b2 := 3 < x; + b1 := arr = 2; + b1 := 6<7 & arr2=7; + + return 0; } diff --git a/tests/sprint3/test/sp3_boolean_unary_op_typecheck.alpha b/tests/sprint3/test/sp3_boolean_unary_op_typecheck.alpha index 12db768..6a23ff6 100644 --- a/tests/sprint3/test/sp3_boolean_unary_op_typecheck.alpha +++ b/tests/sprint3/test/sp3_boolean_unary_op_typecheck.alpha @@ -1,5 +1,11 @@ -entry(arg) := { - [integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1] - b2 := !(3 < 2); - b1 := !5; +type main: string -> integer +function entry: main + +entry (arg) := { + [integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1] + + b2 := !(3 < 2); + b1 := !5; + + return 0; } diff --git a/tests/sprint3/test/sp3_carls_second_mistake.alpha b/tests/sprint3/test/sp3_carls_second_mistake.alpha index 6d1d614..ddb58a4 100644 --- a/tests/sprint3/test/sp3_carls_second_mistake.alpha +++ b/tests/sprint3/test/sp3_carls_second_mistake.alpha @@ -1,10 +1,14 @@ +type main: string -> integer +function entry: main + type string: 1 -> character type a_of_s: 1 -> string (* maybe some other type definitions *) -entry(arg) := { +entry (arg) := { [ string: one_name; string: another_name; a_of_s: many_names ] + one_name := "a string literal"; another_name := reserve another_name(4); (* reserve space for an an array of character, with 4 members *) another_name(0) := 'C'; @@ -20,6 +24,7 @@ entry(arg) := { many_names(2)(2) := 'r'; many_names(2)(3) := 't'; many_names(2)(4) := 'h'; - 0(2)(5) := 'o'; + many_names(2)(5) := 'o'; + return 0; } \ No newline at end of file diff --git a/tests/sprint3/test/sp3_integer_binary_op_typecheck.alpha b/tests/sprint3/test/sp3_integer_binary_op_typecheck.alpha index 5b13147..b042e5f 100644 --- a/tests/sprint3/test/sp3_integer_binary_op_typecheck.alpha +++ b/tests/sprint3/test/sp3_integer_binary_op_typecheck.alpha @@ -1,9 +1,15 @@ -entry(arg) := { - [integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1; character : a] - x := 3 + 2 * 8; - x := 3 - 2 / 8; - x := a * 2 % 8; - b2 := 3 * 2 % 8; - x := 3 % 2 * 8; - x := 3 + arr - 8; +type main: string -> integer +function entry: main + +entry (arg) := { + [integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1; character : a] + + x := 3 + 2 * 8; + x := 3 - 2 / 8; + x := a * 2 % 8; + b2 := 3 * 2 % 8; + x := 3 % 2 * 8; + x := 3 + arr - 8; + + return 0; } diff --git a/tests/sprint3/test/sp3_integer_unary_op_typecheck.alpha b/tests/sprint3/test/sp3_integer_unary_op_typecheck.alpha index 31e01a7..7ab6817 100644 --- a/tests/sprint3/test/sp3_integer_unary_op_typecheck.alpha +++ b/tests/sprint3/test/sp3_integer_unary_op_typecheck.alpha @@ -1,6 +1,12 @@ -entry(arg) := { - [integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1] - x := -8; +type main: string -> integer +function entry: main + +entry (arg) := { + [integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1] + + x := -8; x := -b1; b2 := -x; + + return 0; }