|
|
@@ -5,7 +5,7 @@ IMPLEMENTATION MODULE M2compS;
|
|
|
IMPORT FileIO, Storage;
|
|
|
|
|
|
CONST
|
|
|
- noSYMB = 65; (*error token code*)
|
|
|
+ noSYMB = 68; (*error token code*)
|
|
|
(* not only for errors but also for not finished states of scanner analysis *)
|
|
|
eof = 32C (* MS-DOS Keyboard eof char *);
|
|
|
EOF = 0C;
|
|
|
@@ -102,16 +102,17 @@ PROCEDURE Get (VAR sym: CARDINAL);
|
|
|
PROCEDURE CheckLiteral;
|
|
|
BEGIN
|
|
|
CASE CurrentCh(bp0) OF
|
|
|
- "A": IF Equal("AND") THEN sym := 63;
|
|
|
+ "A": IF Equal("AND") THEN sym := 66;
|
|
|
ELSIF Equal("ARRAY") THEN sym := 27;
|
|
|
END
|
|
|
| "B": IF Equal("BEGIN") THEN sym := 16;
|
|
|
ELSIF Equal("BY") THEN sym := 47;
|
|
|
END
|
|
|
- | "C": IF Equal("CONST") THEN sym := 11;
|
|
|
+ | "C": IF Equal("CASE") THEN sym := 49;
|
|
|
+ ELSIF Equal("CONST") THEN sym := 11;
|
|
|
END
|
|
|
| "D": IF Equal("DEFINITION") THEN sym := 6;
|
|
|
- ELSIF Equal("DIV") THEN sym := 61;
|
|
|
+ ELSIF Equal("DIV") THEN sym := 64;
|
|
|
ELSIF Equal("DO") THEN sym := 42;
|
|
|
END
|
|
|
| "E": IF Equal("ELSE") THEN sym := 40;
|
|
|
@@ -126,17 +127,17 @@ PROCEDURE Get (VAR sym: CARDINAL);
|
|
|
| "I": IF Equal("IF") THEN sym := 37;
|
|
|
ELSIF Equal("IMPLEMENTATION") THEN sym := 7;
|
|
|
ELSIF Equal("IMPORT") THEN sym := 18;
|
|
|
- ELSIF Equal("IN") THEN sym := 55;
|
|
|
+ ELSIF Equal("IN") THEN sym := 58;
|
|
|
END
|
|
|
| "L": IF Equal("LOOP") THEN sym := 45;
|
|
|
END
|
|
|
- | "M": IF Equal("MOD") THEN sym := 62;
|
|
|
+ | "M": IF Equal("MOD") THEN sym := 65;
|
|
|
ELSIF Equal("MODULE") THEN sym := 8;
|
|
|
END
|
|
|
- | "N": IF Equal("NOT") THEN sym := 64;
|
|
|
+ | "N": IF Equal("NOT") THEN sym := 67;
|
|
|
END
|
|
|
| "O": IF Equal("OF") THEN sym := 28;
|
|
|
- ELSIF Equal("OR") THEN sym := 58;
|
|
|
+ ELSIF Equal("OR") THEN sym := 61;
|
|
|
END
|
|
|
| "P": IF Equal("POINTER") THEN sym := 31;
|
|
|
ELSIF Equal("PROCEDURE") THEN sym := 14;
|
|
|
@@ -145,7 +146,7 @@ PROCEDURE Get (VAR sym: CARDINAL);
|
|
|
END
|
|
|
| "R": IF Equal("RECORD") THEN sym := 29;
|
|
|
ELSIF Equal("REPEAT") THEN sym := 43;
|
|
|
- ELSIF Equal("RETURN") THEN sym := 48;
|
|
|
+ ELSIF Equal("RETURN") THEN sym := 51;
|
|
|
END
|
|
|
| "S": IF Equal("SET") THEN sym := 30;
|
|
|
END
|
|
|
@@ -158,6 +159,7 @@ PROCEDURE Get (VAR sym: CARDINAL);
|
|
|
| "V": IF Equal("VAR") THEN sym := 13;
|
|
|
END
|
|
|
| "W": IF Equal("WHILE") THEN sym := 41;
|
|
|
+ ELSIF Equal("WITH") THEN sym := 48;
|
|
|
END
|
|
|
ELSE
|
|
|
END
|
|
|
@@ -242,22 +244,23 @@ PROCEDURE Get (VAR sym: CARDINAL);
|
|
|
| 23: sym := 33; RETURN
|
|
|
| 24: sym := 35; RETURN
|
|
|
| 25: sym := 36; RETURN
|
|
|
- | 26: sym := 49; RETURN
|
|
|
- | 27: IF (ch = ">") THEN state := 28;
|
|
|
- ELSIF (ch = "=") THEN state := 29;
|
|
|
- ELSE sym := 51; RETURN
|
|
|
+ | 26: sym := 50; RETURN
|
|
|
+ | 27: sym := 52; RETURN
|
|
|
+ | 28: IF (ch = ">") THEN state := 29;
|
|
|
+ ELSIF (ch = "=") THEN state := 30;
|
|
|
+ ELSE sym := 54; RETURN
|
|
|
END;
|
|
|
- | 28: sym := 50; RETURN
|
|
|
- | 29: sym := 52; RETURN
|
|
|
- | 30: IF (ch = "=") THEN state := 31;
|
|
|
- ELSE sym := 53; RETURN
|
|
|
+ | 29: sym := 53; RETURN
|
|
|
+ | 30: sym := 55; RETURN
|
|
|
+ | 31: IF (ch = "=") THEN state := 32;
|
|
|
+ ELSE sym := 56; RETURN
|
|
|
END;
|
|
|
- | 31: sym := 54; RETURN
|
|
|
- | 32: sym := 56; RETURN
|
|
|
- | 33: sym := 57; RETURN
|
|
|
- | 34: sym := 59; RETURN
|
|
|
- | 35: sym := 60; RETURN
|
|
|
- | 36: sym := 0; ch := 0C; DEC(bp); RETURN
|
|
|
+ | 32: sym := 57; RETURN
|
|
|
+ | 33: sym := 59; RETURN
|
|
|
+ | 34: sym := 60; RETURN
|
|
|
+ | 35: sym := 62; RETURN
|
|
|
+ | 36: sym := 63; RETURN
|
|
|
+ | 37: sym := 0; ch := 0C; DEC(bp); RETURN
|
|
|
ELSE sym := noSYMB; RETURN (*NextCh already done*)
|
|
|
END
|
|
|
END
|
|
|
@@ -325,69 +328,69 @@ PROCEDURE Reset;
|
|
|
|
|
|
BEGIN
|
|
|
CurrentCh := CharAt;
|
|
|
- start[ 0] := 36; start[ 1] := 37; start[ 2] := 37; start[ 3] := 37;
|
|
|
- start[ 4] := 37; start[ 5] := 37; start[ 6] := 37; start[ 7] := 37;
|
|
|
- start[ 8] := 37; start[ 9] := 37; start[ 10] := 37; start[ 11] := 37;
|
|
|
- start[ 12] := 37; start[ 13] := 37; start[ 14] := 37; start[ 15] := 37;
|
|
|
- start[ 16] := 37; start[ 17] := 37; start[ 18] := 37; start[ 19] := 37;
|
|
|
- start[ 20] := 37; start[ 21] := 37; start[ 22] := 37; start[ 23] := 37;
|
|
|
- start[ 24] := 37; start[ 25] := 37; start[ 26] := 37; start[ 27] := 37;
|
|
|
- start[ 28] := 37; start[ 29] := 37; start[ 30] := 37; start[ 31] := 37;
|
|
|
- start[ 32] := 37; start[ 33] := 37; start[ 34] := 10; start[ 35] := 26;
|
|
|
- start[ 36] := 37; start[ 37] := 37; start[ 38] := 37; start[ 39] := 9;
|
|
|
- start[ 40] := 19; start[ 41] := 20; start[ 42] := 34; start[ 43] := 32;
|
|
|
- start[ 44] := 17; start[ 45] := 33; start[ 46] := 14; start[ 47] := 35;
|
|
|
+ start[ 0] := 37; start[ 1] := 38; start[ 2] := 38; start[ 3] := 38;
|
|
|
+ start[ 4] := 38; start[ 5] := 38; start[ 6] := 38; start[ 7] := 38;
|
|
|
+ start[ 8] := 38; start[ 9] := 38; start[ 10] := 38; start[ 11] := 38;
|
|
|
+ start[ 12] := 38; start[ 13] := 38; start[ 14] := 38; start[ 15] := 38;
|
|
|
+ start[ 16] := 38; start[ 17] := 38; start[ 18] := 38; start[ 19] := 38;
|
|
|
+ start[ 20] := 38; start[ 21] := 38; start[ 22] := 38; start[ 23] := 38;
|
|
|
+ start[ 24] := 38; start[ 25] := 38; start[ 26] := 38; start[ 27] := 38;
|
|
|
+ start[ 28] := 38; start[ 29] := 38; start[ 30] := 38; start[ 31] := 38;
|
|
|
+ start[ 32] := 38; start[ 33] := 38; start[ 34] := 10; start[ 35] := 27;
|
|
|
+ start[ 36] := 38; start[ 37] := 38; start[ 38] := 38; start[ 39] := 9;
|
|
|
+ start[ 40] := 19; start[ 41] := 20; start[ 42] := 35; start[ 43] := 33;
|
|
|
+ start[ 44] := 17; start[ 45] := 34; start[ 46] := 14; start[ 47] := 36;
|
|
|
start[ 48] := 12; start[ 49] := 12; start[ 50] := 12; start[ 51] := 12;
|
|
|
start[ 52] := 12; start[ 53] := 12; start[ 54] := 12; start[ 55] := 12;
|
|
|
start[ 56] := 12; start[ 57] := 12; start[ 58] := 16; start[ 59] := 15;
|
|
|
- start[ 60] := 27; start[ 61] := 18; start[ 62] := 30; start[ 63] := 37;
|
|
|
- start[ 64] := 37; start[ 65] := 1; start[ 66] := 1; start[ 67] := 1;
|
|
|
+ start[ 60] := 28; start[ 61] := 18; start[ 62] := 31; start[ 63] := 38;
|
|
|
+ start[ 64] := 38; start[ 65] := 1; start[ 66] := 1; start[ 67] := 1;
|
|
|
start[ 68] := 1; start[ 69] := 1; start[ 70] := 1; start[ 71] := 1;
|
|
|
start[ 72] := 1; start[ 73] := 1; start[ 74] := 1; start[ 75] := 1;
|
|
|
start[ 76] := 1; start[ 77] := 1; start[ 78] := 1; start[ 79] := 1;
|
|
|
start[ 80] := 1; start[ 81] := 1; start[ 82] := 1; start[ 83] := 1;
|
|
|
start[ 84] := 1; start[ 85] := 1; start[ 86] := 1; start[ 87] := 1;
|
|
|
start[ 88] := 1; start[ 89] := 1; start[ 90] := 1; start[ 91] := 21;
|
|
|
- start[ 92] := 37; start[ 93] := 22; start[ 94] := 25; start[ 95] := 37;
|
|
|
- start[ 96] := 37; start[ 97] := 1; start[ 98] := 1; start[ 99] := 1;
|
|
|
+ start[ 92] := 38; start[ 93] := 22; start[ 94] := 25; start[ 95] := 38;
|
|
|
+ start[ 96] := 38; start[ 97] := 1; start[ 98] := 1; start[ 99] := 1;
|
|
|
start[100] := 1; start[101] := 1; start[102] := 1; start[103] := 1;
|
|
|
start[104] := 1; start[105] := 1; start[106] := 1; start[107] := 1;
|
|
|
start[108] := 1; start[109] := 1; start[110] := 1; start[111] := 1;
|
|
|
start[112] := 1; start[113] := 1; start[114] := 1; start[115] := 1;
|
|
|
start[116] := 1; start[117] := 1; start[118] := 1; start[119] := 1;
|
|
|
- start[120] := 1; start[121] := 1; start[122] := 1; start[123] := 37;
|
|
|
- start[124] := 37; start[125] := 37; start[126] := 37; start[127] := 37;
|
|
|
- start[128] := 37; start[129] := 37; start[130] := 37; start[131] := 37;
|
|
|
- start[132] := 37; start[133] := 37; start[134] := 37; start[135] := 37;
|
|
|
- start[136] := 37; start[137] := 37; start[138] := 37; start[139] := 37;
|
|
|
- start[140] := 37; start[141] := 37; start[142] := 37; start[143] := 37;
|
|
|
- start[144] := 37; start[145] := 37; start[146] := 37; start[147] := 37;
|
|
|
- start[148] := 37; start[149] := 37; start[150] := 37; start[151] := 37;
|
|
|
- start[152] := 37; start[153] := 37; start[154] := 37; start[155] := 37;
|
|
|
- start[156] := 37; start[157] := 37; start[158] := 37; start[159] := 37;
|
|
|
- start[160] := 37; start[161] := 37; start[162] := 37; start[163] := 37;
|
|
|
- start[164] := 37; start[165] := 37; start[166] := 37; start[167] := 37;
|
|
|
- start[168] := 37; start[169] := 37; start[170] := 37; start[171] := 37;
|
|
|
- start[172] := 37; start[173] := 37; start[174] := 37; start[175] := 37;
|
|
|
- start[176] := 37; start[177] := 37; start[178] := 37; start[179] := 37;
|
|
|
- start[180] := 37; start[181] := 37; start[182] := 37; start[183] := 37;
|
|
|
- start[184] := 37; start[185] := 37; start[186] := 37; start[187] := 37;
|
|
|
- start[188] := 37; start[189] := 37; start[190] := 37; start[191] := 37;
|
|
|
- start[192] := 37; start[193] := 37; start[194] := 37; start[195] := 37;
|
|
|
- start[196] := 37; start[197] := 37; start[198] := 37; start[199] := 37;
|
|
|
- start[200] := 37; start[201] := 37; start[202] := 37; start[203] := 37;
|
|
|
- start[204] := 37; start[205] := 37; start[206] := 37; start[207] := 37;
|
|
|
- start[208] := 37; start[209] := 37; start[210] := 37; start[211] := 37;
|
|
|
- start[212] := 37; start[213] := 37; start[214] := 37; start[215] := 37;
|
|
|
- start[216] := 37; start[217] := 37; start[218] := 37; start[219] := 37;
|
|
|
- start[220] := 37; start[221] := 37; start[222] := 37; start[223] := 37;
|
|
|
- start[224] := 37; start[225] := 37; start[226] := 37; start[227] := 37;
|
|
|
- start[228] := 37; start[229] := 37; start[230] := 37; start[231] := 37;
|
|
|
- start[232] := 37; start[233] := 37; start[234] := 37; start[235] := 37;
|
|
|
- start[236] := 37; start[237] := 37; start[238] := 37; start[239] := 37;
|
|
|
- start[240] := 37; start[241] := 37; start[242] := 37; start[243] := 37;
|
|
|
- start[244] := 37; start[245] := 37; start[246] := 37; start[247] := 37;
|
|
|
- start[248] := 37; start[249] := 37; start[250] := 37; start[251] := 37;
|
|
|
- start[252] := 37; start[253] := 37; start[254] := 37; start[255] := 37;
|
|
|
+ start[120] := 1; start[121] := 1; start[122] := 1; start[123] := 38;
|
|
|
+ start[124] := 26; start[125] := 38; start[126] := 38; start[127] := 38;
|
|
|
+ start[128] := 38; start[129] := 38; start[130] := 38; start[131] := 38;
|
|
|
+ start[132] := 38; start[133] := 38; start[134] := 38; start[135] := 38;
|
|
|
+ start[136] := 38; start[137] := 38; start[138] := 38; start[139] := 38;
|
|
|
+ start[140] := 38; start[141] := 38; start[142] := 38; start[143] := 38;
|
|
|
+ start[144] := 38; start[145] := 38; start[146] := 38; start[147] := 38;
|
|
|
+ start[148] := 38; start[149] := 38; start[150] := 38; start[151] := 38;
|
|
|
+ start[152] := 38; start[153] := 38; start[154] := 38; start[155] := 38;
|
|
|
+ start[156] := 38; start[157] := 38; start[158] := 38; start[159] := 38;
|
|
|
+ start[160] := 38; start[161] := 38; start[162] := 38; start[163] := 38;
|
|
|
+ start[164] := 38; start[165] := 38; start[166] := 38; start[167] := 38;
|
|
|
+ start[168] := 38; start[169] := 38; start[170] := 38; start[171] := 38;
|
|
|
+ start[172] := 38; start[173] := 38; start[174] := 38; start[175] := 38;
|
|
|
+ start[176] := 38; start[177] := 38; start[178] := 38; start[179] := 38;
|
|
|
+ start[180] := 38; start[181] := 38; start[182] := 38; start[183] := 38;
|
|
|
+ start[184] := 38; start[185] := 38; start[186] := 38; start[187] := 38;
|
|
|
+ start[188] := 38; start[189] := 38; start[190] := 38; start[191] := 38;
|
|
|
+ start[192] := 38; start[193] := 38; start[194] := 38; start[195] := 38;
|
|
|
+ start[196] := 38; start[197] := 38; start[198] := 38; start[199] := 38;
|
|
|
+ start[200] := 38; start[201] := 38; start[202] := 38; start[203] := 38;
|
|
|
+ start[204] := 38; start[205] := 38; start[206] := 38; start[207] := 38;
|
|
|
+ start[208] := 38; start[209] := 38; start[210] := 38; start[211] := 38;
|
|
|
+ start[212] := 38; start[213] := 38; start[214] := 38; start[215] := 38;
|
|
|
+ start[216] := 38; start[217] := 38; start[218] := 38; start[219] := 38;
|
|
|
+ start[220] := 38; start[221] := 38; start[222] := 38; start[223] := 38;
|
|
|
+ start[224] := 38; start[225] := 38; start[226] := 38; start[227] := 38;
|
|
|
+ start[228] := 38; start[229] := 38; start[230] := 38; start[231] := 38;
|
|
|
+ start[232] := 38; start[233] := 38; start[234] := 38; start[235] := 38;
|
|
|
+ start[236] := 38; start[237] := 38; start[238] := 38; start[239] := 38;
|
|
|
+ start[240] := 38; start[241] := 38; start[242] := 38; start[243] := 38;
|
|
|
+ start[244] := 38; start[245] := 38; start[246] := 38; start[247] := 38;
|
|
|
+ start[248] := 38; start[249] := 38; start[250] := 38; start[251] := 38;
|
|
|
+ start[252] := 38; start[253] := 38; start[254] := 38; start[255] := 38;
|
|
|
Error := Err; lastCh := EOF;
|
|
|
END M2compS.
|