3 (* From: MODULA-2, An Introduction, by Daniel Thalmann, Springer-Verlag,
8 FROM InOut IMPORT Done, EOL, Read, Write, OpenInput, OpenOutput, CloseInput, CloseOutput;
15 alpha = ARRAY [0..14] OF CHAR;
19 i, j, k, l, m, r : CARDINAL;
20 id : ARRAY [0..WordLength] OF CHAR;
21 key : ARRAY [1..N] OF alpha;
36 key[ 7] := "DEFINITION ";
47 key[18] := "IMPLEMENTATION ";
56 key[27] := "POINTER ";
57 key[28] := "PROCEDURE ";
58 key[29] := "QUALIFIED ";
72 PROCEDURE Identifier() : BOOLEAN;
75 l := 1; r := N; id[k] := " ";
79 WHILE (id[i]=key[m,i]) AND (id[i]#" ") DO i := i+1; END;
81 IF id[i] <= key[m,i] THEN r := m-1; END;
82 IF id[i] >= key[m,i] THEN l := m+1; END;
91 IF NOT Done THEN HALT; END;
94 IF (CAP(ch) >= "A") AND (CAP(ch) <= "Z") THEN
97 id[k] := ch; k := k+1;
99 UNTIL (ch<"0") OR (ch>"9") AND (CAP(ch)<"A") OR (CAP(ch)>"Z");
106 Write(id[i]); Write(10C); Write(id[i]); Write(10C); Write(id[i]);
109 ELSIF (ch >= "0") AND (ch <= "9") THEN
111 UNTIL ((ch<"0") OR (ch>"9")) AND ((ch < "A") OR (ch > "Z"))
123 REPEAT copy; UNTIL ch = "'";
126 REPEAT copy; UNTIL ch = '"';