showcase.mod 1.6 KB

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