MODULE Showcase; (* Exercises every syntax form of M2comp.atg step 1. *) FROM In IMPORT x; IMPORT w, dbg; CONST N = 10; H = 0FFH; R = 3.14; E = 2.0E+3; S = "hi"; Q = 'q'; Neg = -N + 2; TYPE Sub = [0 .. 9]; RS = INTEGER[1 .. N]; Vec = ARRAY [0 .. 9] OF INTEGER; Mat = ARRAY [0 .. 9], [0 .. 3] OF REAL; Rec = RECORD a : INTEGER; b : Vec END; Empty = RECORD END; Ptr = POINTER TO Rec; St = SET OF Sub; Boo = BOOLEAN; Chars = ARRAY [0 .. 15] OF CHAR; VAR i, j : INTEGER; v : Vec; m : Mat; r : Rec; p : Ptr; s : St; b : BOOLEAN; ch : CHAR; sa : Chars; PROCEDURE y(a : INTEGER; VAR s : Chars; w : INTEGER); BEGIN s[0] := ch; a := a + w END y; PROCEDURE z; BEGIN END z; PROCEDURE Min(a, b : INTEGER) : INTEGER; BEGIN IF a < b THEN RETURN a ELSE RETURN b END END Min; PROCEDURE Work(VAR v : Vec; n : CARDINAL; flag : BOOLEAN); VAR k : INTEGER; PROCEDURE Nested(t : INTEGER) : INTEGER; BEGIN RETURN t * 2 END Nested; BEGIN k := +n - 1; k := -k + 1; v[0] := k; v[N - 1] := Nested(k); m[1, 2] := R; r.a := k; p^ := r; s := s; b := (k <= 0) OR (k >= N) OR NOT flag; IF k = 0 THEN k := 1 ELSIF k # 1 THEN k := 2 ELSE k := 3 END; WHILE k < N DO k := k + 1 END; REPEAT k := k - 1 UNTIL k = 0; LOOP k := k + 1; IF k > N THEN EXIT END END; FOR k := 1 TO N BY 2 DO Work(v, k, flag) END; FOR k := N TO 1 DO k := k DIV 2 END; b := (k IN s) AND (H <> 0) AND (Q = Q); j := k MOD 3; r := r END Work; MODULE Local [3]; FROM In IMPORT w; EXPORT QUALIFIED q; VAR q : INTEGER; PROCEDURE Init; BEGIN q := 0 END Init; BEGIN q := 1 END Local; BEGIN i := Min(3, 4) + (2 * 3 - 4 / 2); Work(v, N, TRUE); Local.q := i; y(i, sa, N); z END Showcase.