program SemanAnaly is constant cona = 'a'; conb = 'b'; con1 = 1; con9 = 9; one = 1; two = 2; ten = 10; type rec1 = record x: integer; y: char; z: array(1..20) of char endrec; rec2 = record x,y,z: array(con1..con9, 0..1) of rec1; field4: rec1; field5: record num: integer; pos,loc: array(0..1) of array(1..9) of char endrec; field6: string endrec; type3D = array (1..2, 3..6) of array(1..5) of integer; var x,y,z: integer; three: integer; key: char; str: string; arr: array(1..5) of integer; multi: array(1..5, 2..6) of array (2..4) of type3D; dims: array(one..5, two..6) of string; var1: rec1; var2: array(1..ten) of rec2; procedure P1(index:integer) is var ch: array(1..9) of char; i: integer; begin for i := 1 to index loop ch(index) := 't'; var2(0).field5.loc(0)(index) := cona; endloop end; function F1(index:integer; var out:char; x,y,z:integer) return char is forward; function F2(index:integer) return char is constant one = 100; var ch: char; three: integer; begin ch := F1(index, key, one, three, var1.x); P1(one); return (ch) end; procedure P2(index:integer) is constant hundred = 100; type recx = record i,j,k:integer endrec; var ghost: type3D; begin arr(index) := hundred; index := index * 2; ghost(1,2)(3) := index end; function F1(index:integer; var out:char; x,y,z:integer) return char is begin out := var2(index).z(z,y).z(x) end; begin x := 1; y := ten; str := 'Hello world!!!'; P1(x); P2(y); F2(ten); x := arr(1); key := F2(x); three := F1(one, key, x, y, z); var1.z := dims; var2(1).z(1,1).z(1) := F2(9); var2(three).field4.z(ten) := 100*ten; var2(three).field5.loc(0)(0) := 'h'; multi(1,2)(3)(4,5)(6) := 5; end.