Errata for Compilers: Principles, Techniques, and Tools, Second Edition

    This errata sheet applies to all printings. For printings prior to Spring, 2008, please see The First Errata Sheet.

    Found an error not listed in the table below or in the First Errata Sheet? Please send email to ullman at gmail dt com.

    LocationProblemReported ByDate Reported
    p. 3, l. 9 below the figure The intended meaning was that assembly code is easier to debug than machine code. Sukhbir Singh 7/4/09
    p. 6, l. -3 Comma needed after "60". Lyle Goldman 10/17/09
    p. 13, l. -9 Comma needed after "C". Lyle Goldman 9/5/09
    p. 18, l. -16 "removes" should be "remove". Lyle Goldman 9/5/09
    p. 28, l. 2 No comma after "variable". Lyle Goldman 9/5/09
    p. 36, l. -4 "and" needed before "profilers". Lyle Goldman 9/5/09
    p. 52, l. 6 1001 should be 1001. Lyle Goldman 10/17/09
    p. 73, l. 17 "while loop" should be "the while-loop". Lyle Goldman 10/17/09
    p. 81, l. 14 Comma needed after "lexer". Lyle Goldman 10/17/09
    p. 90, l. 13 Semicolon missing at end of line. Michael Leuschel 2/12/08
    p. 90, Fig. 2.38, l. -2, -1 The "}" at the end of the second-to-last line of the figure belongs at the end of the last line. Michael Dudley 1/6/08
    p. 91, l. 18 The production should have type id ; on the right. Lyle Goldman 10/17/09
    p. 95, l. -2 "a operator" should be "an operator". Han Lin 12/29/08
    p. 104, l. 13-14 Both commas on l. 13 should be omitted, and the words "is evaluated" should be added after "right operand" on l. 14. Lyle Goldman 10/17/09
    p. 106, l. -11 "construct" should be "constructs". Lyle Goldman 10/17/09
    p. 124, l. 6 "of" needed before "lexical". Shibamouli Lahiri 1/16/16
    p,. 144, l. -2 delete "a". Shibamouli Lahiri 1/16/16
    p. 161, l. -5 "two" should be "up to two". Michael Dour 10/23/12
    p. 193, l. 21 insert "a" before "challenge". Shibamouli Lahiri 1/16/16
    p. 198, l. 5 Period needed at the end of the sentence. Shibamouli Lahiri 1/16/16
    p. 208, l. 7 if stmt should be if expr. Qi Ji 4/22/12
    p. 227, l. -5 Delete "the" after "its". Nish Sinnadurai 10/24/08
    p. 230, Fig. 4.22 In the row for E ', the productions should all have E ' rather than E on the left side. Lei Ju 9/5/08
    p. 230, first line below Fig, 4.22 The erroneous input on that line would actually cause a synch action immediately, popping the E off the stack and ending the parse. Thus, to match the more interesting behavior of Fig. 4.23, we change the ")" to "+" on l. 1 below Fig. 4.22, and also in the first line below the header in Fig. 4.23. Lei Ju 9/15/08
    p. 251, Fig. 4.36, l. -2 "break" should be in boldface. Michael Leuschel 2/12/08
    p. 254, l. -4 "Fig. 4.31" should be "Fig. 4.37". Daniel Mentz 3/6/08
    p. 263, middle, first item in set I0 S on the left should be S'. Michael Dudley 2/12/08
    p. 281, l. 2 E needed in front of →(E). Arto Kaarna 3/31/08
    p. 282, Fig. 4.50, Itemset I4 Add SiS. Mike Polyakov 7/28/08
    p. 283, Fig. 4.52 The actions for lines (4) and (5) should be swapped. That is, the reduction occurs after line (4). Ciro D'Aniello 2/27/08
    p. 285, first line below Fig. 4.53 "right" should be "left". Lei Ju 9/15/08
    p. 286, Fig. 4.54, last two lines The Symbols on the stack should be E+E on the penultimate line and just E on the last line. Daniel Mentz 3/6/08
    p. 288, Example 4.69, l. 4 Delete one "with the". Kevin Schultz 7/28/08
    p. 289, l. -9 "token" should be "tokens". Kevin Schultz 7/28/08
    p. 299, l. 14 "below" should be "to the right". Heiner Marxen 10/28/09
    p. 350, l. 10 S should be A. Michael Dour 6/20/13
    p. 352, l. 14 "top - 5" should be "top - 6". Daniel Mentz 3/11/08
    p. 359, caption of Fig. 6.3 "Dag" should be "DAG". Arto Kaarna 1/23/08
    p. 360, Fig. 6.4 A production similar to the first two for the operator * is needed. Ciro D'Aniello 2/27/08
    p. 367, 3 lines below Fig. 6.10 "by" should be "be". Shobit Beltangdy 5/10/12
    p. 372, 4 lines above Sect. 6.3.2 "dag" should be "DAG". Arto Kaarna 3/31/08
    p. 393, last line of box "In words" should be "In simpler words". Saeed Mehrabi 1/7/09
    p. 406, l. -4 "Example 6.21" should be "Example 6.22". Carl Alphonce 4/15/11
    p. 409, Exercise 6.6.4 x == 1 should be x = 1 in each of the three parts. Daniel Lucredio 1/29/10
    p. 545, l. 19 We must add a third step: Remove R from the address descriptors of variables other than x. Hao Dang 12/12/09
    p. 556, Fig. 8.18, the unnamed block at the far right ST a, R2 should be ST d, R2. Hans Ji 7/26/08
    p. 571, item 4, l. 3 r-j should be r-j+1. Hao Dang 12/12/09
    p. 594, Fig. 9.9. In box B5, t7 and t10 should be t2 and t4, respectively. Kevin Schultz 5/9/08
    p. 604 first line below figure An additional pair of parentheses is needed around gen1 ∪ (x - kill1). Hideyuki Kawabata 11/29/12
    p. 609, Example 9.13, l. 4-5 B2 does not define i or j, since they are used before definition (assuming no aliases). Michael Leuschel 2/12/08
    p. 617, Exercise 9.2.10, l. 3 genB should be useB. Gyun Woo 3/22/08
    p. 654, items 8(b) and 8(c) These items should be combined as:

    8(b) For all blocks B such that x+y is in latest[B] intersect used[B].out:

    1. Add t=x+y at the beginning of B.
    2. Replace every original x+y by t.
    Richard Yoo 2/3/10
    p. 663, l. 10 Node 8 has two unvisited successors. Tony Pan 1/22/13
    p. 689, l. -9 "line (4)" should be "line (3)". Gyun Woo 10/24/08
    p. 696, l. 2 "of" needed after "function". Jarryd Phillip Beck 6/26/11
    p. 697, l. -10 B5 should be B3. Max Perepelitsyn 8/18/15
    p. 739, 15 remove one "also" Jack Wadden 2/12/12
    p. 745, Fig. 10.23, l. 7, 15, and 17 There are three ADD R3, R3, R4 instructions that should all be ADD R3, R3, R5. Edson Borin 9/28/11
    p. 751, l. -11 n1 -> n2 should be n2 -> n1. Roger Liao 4/3/10
    p. 752, Fig. 10.27 Left box for c needs to be shaded. Roger Liao 4/3/10
    p. 757, attempt 5 of Fig. 10.30 The range of d is (6,6), not (5,5). Frank Chen 3/14/14
    p. 788, l. 4 "row" should be "column", since row-major order is stipulated. Gyun Woo 10/27/08
    p. 792, items 2, 3, 4 above Example 11.8 B really has 2d rows, and b and 0 are of length 2d. Ge Gan 10/24/08
    p. 795, l. 2 Z[1,7] should be Z[7,1]. Jungwon Kim 1/12/09
    p. 807, l. -5 The first i should be 1. Gyun Woo 11/4/08
    p. 816, middle, inequalities (2a) and (2b) "+ b" is missing from the left side of (a) and "+ b'" is missing from the left side of (b). William Deng 7/25/08
    p. 819, l. 1-2 "read and write accesses" should be "two write accesses". Gyun Woo 1/9/08
    p. 836, item 5, line 2 "-1" should be "1". Gyun Woo 11/4/08
    p. 848, Scaling example, third line of code on the left 2N should be 2*N. 3/06/08
    p. 849, Permuation example, second line on the right i++ should be q++. 3/06/08
    p. 861, l. -8 Remove the comma after "local". Gyun Woo 2/18/08
    p. 865, l. -2 "code in (b)" should be "code in (c)". Gyun Woo 2/20/08
    p. 899, l. -15 Reference [6] should be [10]. Shih-Wei Liao 2/27/08
    p. 911, l. -14 The reference to Example 12.5 should be to Fig. 12.6. Max Perepelitsyn 8/18/15