Listing: 1 MODULE Showcase; 2 (* Exercises every syntax form of M2comp.atg step 1. *) 3 FROM In IMPORT x; 4 IMPORT y, z; 5 6 CONST 7 N = 10; 8 H = 0FFH; 9 R = 3.14; 10 E = 2.0E+3; 11 S = "hi"; 12 Q = 'q'; 13 Neg = -N + 2; 14 15 TYPE 16 Sub = [0 .. 9]; 17 RS = INTEGER[1 .. N]; 18 Vec = ARRAY [0 .. 9] OF INTEGER; 19 Mat = ARRAY [0 .. 9], [0 .. 3] OF REAL; 20 Rec = RECORD a : INTEGER; b : Vec END; 21 Empty = RECORD END; 22 Ptr = POINTER TO Rec; 23 St = SET OF Sub; 24 Boo = BOOLEAN; 25 26 VAR 27 i, j : INTEGER; 28 v : Vec; 29 m : Mat; 30 r : Rec; 31 p : Ptr; 32 s : St; 33 b : BOOLEAN; 34 ch : CHAR; 35 36 PROCEDURE Min(a, b : INTEGER) : INTEGER; 37 BEGIN 38 IF a < b THEN RETURN a ELSE RETURN b END 39 END Min; 40 41 PROCEDURE Work(VAR v : Vec; n : CARDINAL; flag : BOOLEAN); 42 VAR k : INTEGER; 43 44 PROCEDURE Nested(t : INTEGER) : INTEGER; 45 BEGIN 46 RETURN t * 2 47 END Nested; 48 49 BEGIN 50 k := +n - 1; 51 k := -k + 1; 52 v[0] := k; 53 v[N - 1] := Nested(k); 54 m[1, 2] := R; 55 r.a := k; 56 p^ := r; 57 s := s; 58 b := (k <= 0) OR (k >= N) OR NOT flag; 59 IF k = 0 THEN k := 1 60 ELSIF k # 1 THEN k := 2 61 ELSE k := 3 62 END; 63 WHILE k < N DO 64 k := k + 1 65 END; 66 REPEAT 67 k := k - 1 68 UNTIL k = 0; 69 LOOP 70 k := k + 1; 71 IF k > N THEN EXIT END 72 END; 73 FOR k := 1 TO N BY 2 DO 74 Work(v, k, flag) 75 END; 76 FOR k := N TO 1 DO 77 k := k DIV 2 78 END; 79 b := (k IN s) AND (H <> 0) AND (Q = Q); 80 j := k MOD 3; 81 r := r 82 END Work; 83 84 MODULE Local [3]; 85 FROM In IMPORT w; 86 EXPORT QUALIFIED q; 87 VAR q : INTEGER; 88 PROCEDURE Init; 89 BEGIN 90 q := 0 91 END Init; 92 BEGIN 93 q := 1 94 END Local; 95 96 BEGIN 97 i := Min(3, 4) + (2 * 3 - 4 / 2); 98 Work(v, N, TRUE); 99 Local.q := i; 100 y(i, S, x); 101 z 102 END Showcase. 0 errors