2 FROM InOut IMPORT Done, EOL, OpenInput, OpenOutput, Read, Write,
3 WriteCard, WriteString, CloseInput, CloseOutput;
5 FROM TableHandler IMPORT
6 WordLength, Table, overflow, InitTable, Record,
9 TYPE Alfa = ARRAY [0..9] OF CHAR;
11 CONST N = 45; (* number of keywords *)
14 i,k,l,m,r,lno: CARDINAL;
16 id: ARRAY [0..WordLength-1] OF CHAR;
17 key: ARRAY [1..N] OF Alfa;
41 key[8] := "CARDINAL ";
57 key[24] := "INTEGER ";
64 key[31] := "POINTER ";
65 key[32] := "PROCEDURE ";
66 key[33] := "QUALIFIED ";
81 IF NOT Done THEN HALT END;
88 IF (CAP(ch) >= "A") & (CAP(ch) <= "Z") THEN
95 (ch > "9") & (CAP(ch) < "A") OR
100 REPEAT (* binary search *)
103 WHILE (id[i] = key[m,i]) & (id[i] > " ") DO
106 IF id[i] <= key[m,i] THEN r := m-1 END;
107 IF id[i] >= key[m,i] THEN l := m+1 END;
109 IF l = r+1 THEN Record(T, id, lno) END
110 ELSIF (ch >= "0") & (ch <= "9") THEN
113 UNTIL ((ch<"0") OR (ch>"9"))&((ch<"A") OR (ch>"Z"))
116 IF ch = "*" THEN (* comment *)
131 REPEAT copy UNTIL ch = "'";
134 REPEAT copy UNTIL ch = '"';
138 IF Done THEN heading END
142 UNTIL NOT Done OR (overflow # 0)
145 WriteString("Table overflow");
146 WriteCard(overflow, 6);