showcase.LST 2.3 KB

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