showcase.mod 1.7 KB

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