Bugs
Bugs
Unfortunatly there are some bugs in the English edition
of Wilhelm/Maurer: Compiler Design
Errata to the English edition of Wilhelm/Maurer: Compiler Design
State Jan. 10, 1997
These should all be corrected in the 2nd printing, Nov. 1996.
Thanks to all careful readers, in particular Helmut Partsch,
Hanne Nielson, Mooly Sagiv, and Bob Paige's students.
Chapter 2
---------
p. 19, l 4:
"i + 5" -> "i + 4"
p. 22, table 2.6, caption:
"SP_1" -> "SP-1"
p. 23, table 2.8: Cond. column should be "(i)"
p. 24, l 9: Delete "5" in "ind i 5"
p. 25, - 3 : "lbc" -> "ldc".
p. 26, code_Id-schema: dpl- and ind-instructions should have type 'a'
2.6.2: "fictitious address" is not a good translation, something
like "adjusted address" is better.
Chapter 3
-----------------
p 64(m): "$opr" ---> "$op r"
p 79 l 3 after example 3.9: "the last example" ---> "Example 3.7"
p 89 figure 3.5: FP should point to the cell with "old state GP"
and not the one with "old state FP"
The function error in the definition of the instructions is meant to stop
the program execution.
p 92 table 3.7: the parameter of false, ujmp and ldl in the first column
should be an italic l
p 92 l-1: "j-false" ---> "false"
p 93, l -2: First occurrence of "SP" -> "sp"
p 93 table 3.8: "ST[S-j]" ---> "ST[SP-j]"
p 94 l-5: "pushfree [v_1,...,v_g]" ---> "pushfree [v'_1,...,v'_g]"
(would be less confusing - similar change p 94 l 12, 13)
p 104 m: ":((head x)(append (tail x) y))" ---> "(head x) : (append (tail x) y)"
(cf. the type given to :)
p 105, Table 3.16, Def. of cons:
Should have one more legal tag, CLOSURE.
p 106: replace all occurrences of greek rho with greek beta on this page
p 107, Fig. 3.13, caption: "n:from(n+1)" -> "from 1"
p 108: "ujump l_3" -> "ujump l_9"
p. 110, 7: "if n = 0 then y else f ( n - 1 ) y" ->
"if x = 0 then y else f ( x - 1 ) y"
Chapter 4
-----------------------------
Def. 4.4
Composition of substitutions is wrongly defined (as almost everywhere).
The following change should correct the problem:
Take \Theta and \Psi as in the book and define the result of composing
\Psi after \Theta as:
({u_1/s_1 \Psi, ... , u_m /s_m \Psi} - { u_1/u_1, ... , u_m/u_m}) u
({v_1/t_1, ... , v_k/t_k} - { v/t | v \in {u_1, ... , u_m} }).
p 156, Table 4.18:
init should also initialize
TP := 0;
HP := 0;
and "CSP" -> "SP"
p 162:
l 8: "n + 5 + r" -> "n + 4 + r"
code_C: "pushenv r" -> "pushenv r + l"
p 163: btinit:
The case statement should have an empty component labeled "single:"
The casecomponent labeled "last" should end with an additional
"restoreargs args".
p 157, Example:
Better labels for the code would be "p_1" for "p_0" and "s_2" for "l".
Then q_i would be the label for the code for the i-th alternative for q.
Chapter 5
-----------------------------
p 196:
Object Initialization: ... Code is generated to store a pointer
to the method-table section MT_C^i at the offset BMT_C(i).
p 205:
l 4: "BO" --> "BS"
middle and -l 5: "BC" --> "BF"
Chapter 7
-----------------------------
p. 249, ex. 7.9: The char. class should be "di = 0-9"
p. 260 in the first Example
"DI [0--9]" -> "DI [0-9]"
p. 263
Question 10, l 2:
should read "'manually' for exercise 8 using the procedure of Section 7.4.3
Chapter 9
------------------------------
Section 9.3
Only one type of single quote should surround the arithmetic operators in
the examples, namely '.
p. 417 l 4: "not E.=jcond" ---> "not E.jcond"
p. 425,
Figure 9.15
The two nodes concerned should be labeled n and n.i.
The new edge, above n.i, should go from right to left.
l-4: "n", 1st occurrence -> "n.i"
l -2: The i'th component Dt\up(X_i) in the functionality should be omitted.
l-1: "(n" -> "(1"
p. 426
Defs. 9.10, 9.11: Subscript "n" -> "n_p" everywhere
p. 427 Caption of the figure: "Dp(0)[...] and R\uparrow(p)[...]" --->
"Dp(2)[...], R\uparrow(2)[...] and R\downarrow_1(2)[...]"
p. 427 Example 9.19
"R \downarrow_i (2) [...]" -> "R \downarrow_1 (2) [...]"
p. 428
l 4: "(Dt\uparrow )" -> "(Dt\uparrow_t)"
p. 429
Figure 9.18: "Dt\downarrow" -> "Dt\uparrow"
p. 438
l-9: "upwards visit" <-> "downwards visit"
p. 439
l 18 (last line of Def. 9.15):"visit sequence" -> "sequence of visits"
p. 440
Last line of Example 9.25: last BIN should have subscript 0
p. 441
l-5: "node" -> "nodes"
p. 442
l-5: "visit" -> "visit sequence"
l-2: "2l" -> l2"
p. 443 The text for the figure: "Bin_toDec" ---> "Bin_to_Dec"
l 7: "eval({l_n})" -> "eval(l_n)"
l-10: Should read "This is because one does not look for an arbitrary order
..., but one has to find total orders ..."
l-2: "relations" -> "relations R'_X"
p. 444
l 15: should read "total orders T'_X as evaluation orders"
Def. 9.17: delete "the relations \{R_X\}_{X \in V_N} are all acyclic, and"
p. 447
l 20: should read "attributes of the terminal symbols must be delivered
punctually by the scanner"
p. 449
l-3: "occurrence generated" -> "occurrences"
Chapter 12
---------------------------------
p. 563, Fig. 12.8
Instruction R1 := R1 + M[b] is missing. It should be the third instruction from the end.
===============================================================================
The following bugs have survived the corrections for the second printing:
Chapter 2
------------
p. 27, ldd: "STORE[STORE][Sp-3]+q]" -> "STORE[STORE[Sp-3]+q]"
p. 50, MOVS: "STORE[SP+1] := ..." -> "STORE[SP+i] := ..."
Chapter 8
----------
p. 279, l -4:
"(\gamma , \vareps )" -> "(\gamma q, \vareps )"
p. 289, Example 8.14:
The combination function should be or (\bigvee),
"(false, if no nonterminal occurs)" should be moved to the right column.
p. 346, l 4:
"Definition" -> "Example"
If you think you found a bug in the book which is not
in the list mail us
mail it.
Sebastian Winkel
sewi@cs.uni-sb.de