| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- 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
|