ready for merge!
This commit is contained in:
31
tests/sprint2/expected/sp2_carls_mistake.expected
Normal file
31
tests/sprint2/expected/sp2_carls_mistake.expected
Normal file
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
26
tests/sprint2/expected/sp2_function_types.expected
Normal file
26
tests/sprint2/expected/sp2_function_types.expected
Normal file
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
17
tests/sprint2/expected/sp2_integer_binary_op.expected
Normal file
17
tests/sprint2/expected/sp2_integer_binary_op.expected
Normal file
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
17
tests/sprint2/expected/sp2_invalid_recop.expected
Normal file
17
tests/sprint2/expected/sp2_invalid_recop.expected
Normal file
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
14
tests/sprint2/expected/sp2_invalid_release.expected
Normal file
14
tests/sprint2/expected/sp2_invalid_release.expected
Normal file
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
36
tests/sprint2/expected/sp2_library.expected
Normal file
36
tests/sprint2/expected/sp2_library.expected
Normal file
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
62
tests/sprint2/expected/sp2_llnode.expected
Normal file
62
tests/sprint2/expected/sp2_llnode.expected
Normal file
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
30
tests/sprint2/expected/sp2_one_line.expected
Normal file
30
tests/sprint2/expected/sp2_one_line.expected
Normal file
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
13
tests/sprint2/expected/sp2_presidence.expected
Normal file
13
tests/sprint2/expected/sp2_presidence.expected
Normal file
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
12
tests/sprint2/expected/sp2_simple.expected
Normal file
12
tests/sprint2/expected/sp2_simple.expected
Normal file
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
18
tests/sprint2/expected/sp2_valid_assignable_and_mem.expected
Normal file
18
tests/sprint2/expected/sp2_valid_assignable_and_mem.expected
Normal file
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
@ -1,28 +1,34 @@
|
|||||||
|
type main: string -> integer
|
||||||
|
function entry: main
|
||||||
|
|
||||||
type rec: [integer: x; integer: y]
|
type rec: [integer: x; integer: y]
|
||||||
type T1: integer -> integer
|
type T1: integer -> integer
|
||||||
type T2: rec -> integer
|
type T2: rec -> integer
|
||||||
type arr : 1 -> integer
|
type arr: 1 -> integer
|
||||||
|
|
||||||
function foo : T1
|
function foo: T1
|
||||||
function bar1 : T2
|
function bar1: T2
|
||||||
function bar2 : T2
|
function bar2: T2
|
||||||
|
|
||||||
foo(x) := {
|
foo (x) := {
|
||||||
return x * x;
|
return x * x;
|
||||||
}
|
}
|
||||||
bar1(a) := {
|
|
||||||
return a.x * a.y;
|
bar1 (a) := {
|
||||||
|
return a.x * a.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
bar2 as (r,s) := {
|
bar2 as (r,s) := {
|
||||||
return r * s;
|
return r * s;
|
||||||
}
|
}
|
||||||
entry(arg) := {
|
|
||||||
[ integer: result ; rec: w]
|
entry (arg) := {
|
||||||
result := foo(5);
|
[ integer: result ; rec: w]
|
||||||
w := reserve w; (* see types.alpha – reserve returns a value of type address, which can be assigned to array and record variables*)
|
result := foo(5);
|
||||||
w.x := 5;
|
w := reserve w; (* see types.alpha – reserve returns a value of type address, which can be assigned to array and record variables*)
|
||||||
w.y := 7;
|
w.x := 5;
|
||||||
result := bar1(w); (* pass w (a rec type value) to bar1 *)
|
w.y := 7;
|
||||||
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 *)
|
result := bar1(w); (* pass w (a rec type value) to bar1 *)
|
||||||
return 0;
|
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;
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,19 @@ type integer2integer: integer -> integer
|
|||||||
type character2integer: character -> integer
|
type character2integer: character -> integer
|
||||||
type Boolean2integer: Boolean -> integer
|
type Boolean2integer: Boolean -> integer
|
||||||
type string2integer: string -> integer
|
type string2integer: string -> integer
|
||||||
function integerXinteger2integer: integerXinteger (*-> integer
|
|
||||||
type integerXinteger2Boolean: integerXinteger -> Boolean
|
type integer2integer2Boolean: integer2integer -> Boolean
|
||||||
type characterXcharacter2Boolean: characterXcharacter -> Boolean
|
type character2character2Boolean: character2character -> Boolean
|
||||||
type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean
|
type Boolean2Boolean2Boolean: Boolean2Boolean -> Boolean
|
||||||
type integer2address: integer -> address
|
type integer2address: integer -> address
|
||||||
type address2integer: address -> integer
|
type address2integer: address -> integer
|
||||||
|
type integer2integer2integer: integer2integer -> integer
|
||||||
|
|
||||||
external function printInteger: integer2integer
|
external function printInteger: integer2integer
|
||||||
external function printCharacter: character2integer
|
external function printCharacter: character2integer
|
||||||
external function printBoolean: Boolean2integer
|
external function printBoolean: Boolean2integer
|
||||||
external function reserve: integer2address
|
external function reserved: integer2address
|
||||||
external function release: address2integer
|
external function released: address2integer
|
||||||
function entry: string2integer*)
|
|
||||||
|
function integer2integer2integerFunc: integer2integer2integer
|
||||||
|
function entry: string2integer
|
@ -1,12 +1,17 @@
|
|||||||
entry(arg) := {
|
type main: string -> integer
|
||||||
[integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1]
|
function entry: main
|
||||||
x := 3 + 2 * 8;
|
|
||||||
x := 3 - 2 / 8;
|
entry (arg) := {
|
||||||
x := 3 * 2 % 8;
|
[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;
|
||||||
arr2 := 1 * reserve x;
|
x := 3 * 2 % 8;
|
||||||
|
x := 3 * 2 % 8;
|
||||||
|
x := 3 % 2 * 8;
|
||||||
|
x := 3 + 2 - 8;
|
||||||
|
|
||||||
|
arr2 := 1 * reserve x;
|
||||||
arr2 := release x;
|
arr2 := release x;
|
||||||
b2 := 3 < 2;
|
b2 := 3 < 2;
|
||||||
b1 := 1 = 2;
|
b1 := 1 = 2;
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
|
type main: string -> integer
|
||||||
|
function entry: main
|
||||||
|
|
||||||
type rec: [integer: x; integer: y]
|
type rec: [integer: x; integer: y]
|
||||||
|
|
||||||
entry(arg) := {
|
entry (arg) := {
|
||||||
[rec: w]
|
[rec: w]
|
||||||
w := reserve w;
|
w := reserve w;
|
||||||
w.x := 1;
|
w.x := 1;
|
||||||
w.y := 2;
|
w.y := 2;
|
||||||
w.z := 3;
|
w.z := 3;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
@ -1,8 +1,8 @@
|
|||||||
type rec: [integer: x; integer: y]
|
type rec: [integer: x; integer: y]
|
||||||
|
|
||||||
entry(arg) := {
|
entry (arg) := {
|
||||||
[rec: w]
|
[rec: w]
|
||||||
w := reserve w;
|
w := reserve w;
|
||||||
w := release (w);
|
w := release (w);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
@ -1,11 +1,14 @@
|
|||||||
(* At compiler start-up your program should create symbol table entries for the four primitive types:
|
(*
|
||||||
Boolean (1 byte)
|
At compiler start-up your program should create symbol table entries for the four primitive types:
|
||||||
character (1 byte)
|
Boolean (1 byte)
|
||||||
integer (4 bytes)
|
character (1 byte)
|
||||||
address (8 bytes)
|
integer (4 bytes)
|
||||||
You should #include this file at the start of your alpha file.
|
address (8 bytes)
|
||||||
Some useful types are defined below.
|
|
||||||
|
should #include this file at the start of your alpha file.
|
||||||
|
Some useful types are defined below.
|
||||||
*)
|
*)
|
||||||
|
|
||||||
type string: 1 -> character
|
type string: 1 -> character
|
||||||
type BooleanXBoolean: [Boolean: x; Boolean: y]
|
type BooleanXBoolean: [Boolean: x; Boolean: y]
|
||||||
type characterXcharacter: [character: x; character: y]
|
type characterXcharacter: [character: x; character: y]
|
||||||
@ -22,7 +25,9 @@ type characterXcharacter2Boolean: characterXcharacter -> Boolean
|
|||||||
type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean
|
type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean
|
||||||
type integer2address: integer -> address
|
type integer2address: integer -> address
|
||||||
type address2integer: address -> integer
|
type address2integer: address -> integer
|
||||||
|
|
||||||
external function printInteger: integer2integer
|
external function printInteger: integer2integer
|
||||||
external function printCharacter: character2integer
|
external function printCharacter: character2integer
|
||||||
external function printBoolean: Boolean2integer
|
external function printBoolean: Boolean2integer
|
||||||
|
|
||||||
function entry: string2integer
|
function entry: string2integer
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
type main: string -> integer
|
||||||
|
function entry: main
|
||||||
|
|
||||||
type rec: [integer: x; integer: y]
|
type rec: [integer: x; integer: y]
|
||||||
type T1: integer -> integer
|
type T1: integer -> integer
|
||||||
type T2: rec -> integer
|
type T2: rec -> integer
|
||||||
@ -10,66 +13,69 @@ function bar1 : T2
|
|||||||
function bar2 : T2
|
function bar2 : T2
|
||||||
function make_list : list
|
function make_list : list
|
||||||
|
|
||||||
make_list(a) := {
|
make_list (a) := {
|
||||||
[integer:orig_a; address: ret; address: curr; address: temp]
|
[integer:orig_a; address: ret; address: curr; address: temp]
|
||||||
if (a < 0 | a = 0) then {
|
|
||||||
return null;
|
if (a < 0 | a = 0) then {
|
||||||
} else {
|
return null;
|
||||||
ret := reserve llnode;
|
} else {
|
||||||
ret.prev := null;
|
ret := reserve llnode;
|
||||||
ret.next := null;
|
ret.prev := null;
|
||||||
ret.val := a;
|
ret.next := null;
|
||||||
while (0 < a) {
|
ret.val := a;
|
||||||
temp := reserve llnode;
|
while (0 < a) {
|
||||||
temp.prev := null;
|
temp := reserve llnode;
|
||||||
temp.next := null;
|
temp.prev := null;
|
||||||
temp.val := val;
|
temp.next := null;
|
||||||
if (a = orig_a) then {
|
temp.val := val;
|
||||||
ret.next := temp;
|
if (a = orig_a) then {
|
||||||
temp.prev := ret;
|
ret.next := temp;
|
||||||
curr := temp;
|
temp.prev := ret;
|
||||||
} else {
|
curr := temp;
|
||||||
curr.next := temp;
|
} else {
|
||||||
temp.prev := curr;
|
curr.next := temp;
|
||||||
curr := temp;
|
temp.prev := curr;
|
||||||
}
|
curr := temp;
|
||||||
a := a - 1;
|
}
|
||||||
}
|
a := a - 1;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foo (x) := {
|
||||||
|
return x * x;
|
||||||
|
}
|
||||||
|
|
||||||
foo(x) := {
|
bar1 (a) := {
|
||||||
return x * x;
|
return a.x * a.y;
|
||||||
}
|
}
|
||||||
bar1(a) := {
|
|
||||||
return a.x * a.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
bar2 as (r,s) := {
|
bar2 as (r,s) := {
|
||||||
if (r < s) then {
|
if (r < s) then {
|
||||||
while (!(r < s)) {
|
while (!(r < s)) {
|
||||||
r := r + 1;
|
r := r + 1;
|
||||||
}
|
|
||||||
} else {
|
|
||||||
[integer: x]
|
|
||||||
x := 0;
|
|
||||||
while (x < 10) {
|
|
||||||
r := r + s;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return r * s;
|
} else {
|
||||||
}
|
[integer: x]
|
||||||
entry(arg) := {
|
x := 0;
|
||||||
[ integer: result ; rec: w; llnode: li]
|
while (x < 10) {
|
||||||
li := make_list(6);
|
r := r + s;
|
||||||
result := foo(5);
|
}
|
||||||
w := reserve w;
|
}
|
||||||
w.x := 5;
|
return r * s;
|
||||||
w.y := 7;
|
}
|
||||||
result := bar1(w);
|
|
||||||
result := bar2(5,7);
|
entry (arg) := {
|
||||||
|
[ integer: result ; rec: w; llnode: li]
|
||||||
return 0;
|
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
@ -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; }
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
entry(arg) := {
|
type main: string -> integer
|
||||||
[integer:x]
|
function entry: main
|
||||||
x := 3 + 2 * 8;
|
|
||||||
|
entry (arg) := {
|
||||||
|
[integer:x]
|
||||||
|
x := 3 + 2 * 8;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
|
type main: string -> integer
|
||||||
|
function entry: main
|
||||||
|
|
||||||
entry(arg) := {
|
entry(arg) := {
|
||||||
[int : x]
|
[int : x]
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
|
type main: string -> integer
|
||||||
|
function entry: main
|
||||||
|
|
||||||
type rec: [integer: x; integer: y]
|
type rec: [integer: x; integer: y]
|
||||||
type T2: rec -> integer
|
type T2: rec -> integer
|
||||||
|
|
||||||
entry(arg) := {
|
entry(arg) := {
|
||||||
[rec: w]
|
[rec: w]
|
||||||
w := reserve w;
|
|
||||||
|
w := reserve w;
|
||||||
w.x := 1;
|
w.x := 1;
|
||||||
w.y := 2;
|
w.y := 2;
|
||||||
w := release w;
|
w := release w;
|
||||||
return 0;
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
17
tests/sprint3/expected/sp3_carls_second_mistake.expected
Normal file
17
tests/sprint3/expected/sp3_carls_second_mistake.expected
Normal file
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
@ -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
|
||||||
|
-------------------------:--------:--------:--------------------------:------------------------------
|
@ -1,6 +1,12 @@
|
|||||||
entry(arg) := {
|
type main: string -> integer
|
||||||
[integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1]
|
function entry: main
|
||||||
b2 := 3 < x;
|
|
||||||
b1 := arr = 2;
|
entry (arg) := {
|
||||||
b1 := 6<7 & arr2=7;
|
[integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1]
|
||||||
|
|
||||||
|
b2 := 3 < x;
|
||||||
|
b1 := arr = 2;
|
||||||
|
b1 := 6<7 & arr2=7;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
entry(arg) := {
|
type main: string -> integer
|
||||||
[integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1]
|
function entry: main
|
||||||
b2 := !(3 < 2);
|
|
||||||
b1 := !5;
|
entry (arg) := {
|
||||||
|
[integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1]
|
||||||
|
|
||||||
|
b2 := !(3 < 2);
|
||||||
|
b1 := !5;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
|
type main: string -> integer
|
||||||
|
function entry: main
|
||||||
|
|
||||||
type string: 1 -> character
|
type string: 1 -> character
|
||||||
type a_of_s: 1 -> string
|
type a_of_s: 1 -> string
|
||||||
|
|
||||||
(* maybe some other type definitions *)
|
(* maybe some other type definitions *)
|
||||||
|
|
||||||
entry(arg) := {
|
entry (arg) := {
|
||||||
[ string: one_name; string: another_name; a_of_s: many_names ]
|
[ string: one_name; string: another_name; a_of_s: many_names ]
|
||||||
|
|
||||||
one_name := "a string literal";
|
one_name := "a string literal";
|
||||||
another_name := reserve another_name(4); (* reserve space for an an array of character, with 4 members *)
|
another_name := reserve another_name(4); (* reserve space for an an array of character, with 4 members *)
|
||||||
another_name(0) := 'C';
|
another_name(0) := 'C';
|
||||||
@ -20,6 +24,7 @@ entry(arg) := {
|
|||||||
many_names(2)(2) := 'r';
|
many_names(2)(2) := 'r';
|
||||||
many_names(2)(3) := 't';
|
many_names(2)(3) := 't';
|
||||||
many_names(2)(4) := 'h';
|
many_names(2)(4) := 'h';
|
||||||
0(2)(5) := 'o';
|
many_names(2)(5) := 'o';
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
@ -1,9 +1,15 @@
|
|||||||
entry(arg) := {
|
type main: string -> integer
|
||||||
[integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1; character : a]
|
function entry: main
|
||||||
x := 3 + 2 * 8;
|
|
||||||
x := 3 - 2 / 8;
|
entry (arg) := {
|
||||||
x := a * 2 % 8;
|
[integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1; character : a]
|
||||||
b2 := 3 * 2 % 8;
|
|
||||||
x := 3 % 2 * 8;
|
x := 3 + 2 * 8;
|
||||||
x := 3 + arr - 8;
|
x := 3 - 2 / 8;
|
||||||
|
x := a * 2 % 8;
|
||||||
|
b2 := 3 * 2 % 8;
|
||||||
|
x := 3 % 2 * 8;
|
||||||
|
x := 3 + arr - 8;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,12 @@
|
|||||||
entry(arg) := {
|
type main: string -> integer
|
||||||
[integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1]
|
function entry: main
|
||||||
x := -8;
|
|
||||||
|
entry (arg) := {
|
||||||
|
[integer:x; address: arr; address: arr2; Boolean : b2; Boolean : b1]
|
||||||
|
|
||||||
|
x := -8;
|
||||||
x := -b1;
|
x := -b1;
|
||||||
b2 := -x;
|
b2 := -x;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user