Modern Compiler Implementation in C

©1998 by Andrew W. Appel

Errors in the first edition, 1999 printing:

This printing may be identified by the line "Reprinted with corrections, 1999" on page iv.

Page 13. 11th line from bottom, missing semicolon before close brace; should be:
struct table {string id; int value; Table_ tail;};

Page 54. After the sentence, "The resulting productions will not pose a problem for a predictive parser" add:
Although the grammar is still ambiguous -- the parsing table has two entries for the same slot -- we can resolve the ambiguity by using the "else S" action.

Page 55. 13th line from bottom: TIMES should not be in Tprime_follow.

Page 65. First line of left-hand box: change ampersand (&) to $.

Page 78. Lines 11-12 should read,
3. Discard input symbols (if necessary) until a lookahead is reached that has a non-error action in the current state.

Page 99. The Tiger program shown is actually illegal, since g is declared to return no value but its body returns the value f().

Page 115.
6th line after figure, "UNIT" should be "Void".
Last line, delete the word struct.

Page 138. Table 6.4. The MIPS column of the table uses registers r2, r4, r5 for passing parameters. The use of r2 for the "zeroth parameter" is consistent with the MIPS convention of passing the static link in r2; the argument x1, by this point in the compilation, is really the static link.

Page 179. 10th line from bottom, change "whether two expressions commute" to "whether a statement commutes with an expression".

Page 222. Table 10.5 in the 4th iteration, the out set for statement 3 is c, when it should be b.

Page 242. Assignment statements on line 19 should say,
t:=M[bloc]; M[aloc]:=t.

Page 244. Figure 11.7, captions (a) and (b) are missing.

Page 246. Last sentence, swap "afterward" and "beforehand".

Page 249. Delete last bullet item entirely ("When u is coalesced ...").

Page 255. Line 8, change all three occurrences of "nodeMoves" to "moveList".
Insert new line, "EnableMoves(v)".

Page 277. Algorithm 13.5, after second line, insert:
mark x

Page 372. 8th line from bottom, delete the word "not".

Page 434. 11th line from bottom, change "block 1 and block 2" to "block 1 and block 3".

Page 435. FIGURE 19.3 (b), the assignment c1 <- c1 + b2 should be c1 <- c2 + b2

Page 440. Line 2: "that are not dominated by" should be "that are not strictly dominated by"
Line 22: "if n does not dominate w" should be "if n does not dominate w, or if n = w"

Page 441. Algorithm 19.6, line 10 should read,
if a not in Aphi[Y]
Algorithm 19.6, line 14 should read,
Aphi[Y] <- Aphi[Y] u {a}.

Page 453. Line 2, first occurrence of i should be i1

Page 456. Line 6, change "10" to "1".

Page 495. Exercise 20.2g, "Run Algorithm itermod" should be "Run Algorithm 20.9".

Page 525. 4th line from bottom, change both occurrences of "integer" to "int".