Listing: 1 MODULE Showcase; 2 (* Exercises every syntax form of M2comp.atg step 1. *) 3 FROM In IMPORT x; 4 IMPORT w, dbg; 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 Chars = ARRAY [0 .. 15] OF CHAR; 26 27 VAR 28 i, j : INTEGER; 29 v : Vec; 30 m : Mat; 31 r : Rec; 32 p : Ptr; 33 s : St; 34 b : BOOLEAN; 35 ch : CHAR; 36 sa : Chars; 37 38 PROCEDURE y(a : INTEGER; VAR s : Chars; w : INTEGER); 39 BEGIN 40 s[0] := ch; 41 a := a + w 42 END y; 43 44 PROCEDURE z; 45 BEGIN 46 END z; 47 48 PROCEDURE Min(a, b : INTEGER) : INTEGER; 49 BEGIN 50 IF a < b THEN RETURN a ELSE RETURN b END 51 END Min; 52 53 PROCEDURE Work(VAR v : Vec; n : CARDINAL; flag : BOOLEAN); 54 VAR k : INTEGER; 55 56 PROCEDURE Nested(t : INTEGER) : INTEGER; 57 BEGIN 58 RETURN t * 2 59 END Nested; 60 61 BEGIN 62 k := +n - 1; 63 k := -k + 1; 64 v[0] := k; 65 v[N - 1] := Nested(k); 66 m[1, 2] := R; 67 r.a := k; 68 p^ := r; 69 s := s; 70 b := (k <= 0) OR (k >= N) OR NOT flag; 71 IF k = 0 THEN k := 1 72 ELSIF k # 1 THEN k := 2 73 ELSE k := 3 74 END; 75 WHILE k < N DO 76 k := k + 1 77 END; 78 REPEAT 79 k := k - 1 80 UNTIL k = 0; 81 LOOP 82 k := k + 1; 83 IF k > N THEN EXIT END 84 END; 85 FOR k := 1 TO N BY 2 DO 86 Work(v, k, flag) 87 END; 88 FOR k := N TO 1 DO 89 k := k DIV 2 90 END; 91 b := (k IN s) AND (H <> 0) AND (Q = Q); 92 j := k MOD 3; 93 r := r 94 END Work; 95 96 MODULE Local [3]; 97 FROM In IMPORT w; 98 EXPORT QUALIFIED q; 99 VAR q : INTEGER; 100 PROCEDURE Init; 101 BEGIN 102 q := 0 103 END Init; 104 BEGIN 105 q := 1 106 END Local; 107 108 BEGIN 109 i := Min(3, 4) + (2 * 3 - 4 / 2); 110 Work(v, N, TRUE); 111 Local.q := i; 112 y(i, sa, x); 113 z 114 END Showcase. 0 errors