The scheduling example at the top of page
19 incorrectly computes the starting cycle for the fifth operation.
The constraint on register r2 is an anti-dependence (a write after read),
so the underlying machine should be able to issue the loadAI immediately
after the mult.
The mult should read its arguments in cycle 8, while
the loadAI will write its result only after the value arrives from
memory, in the third cycle after it is issued. Thus, no conflict
arises from issuing the loadAI in cycle 9.
This error was undetected in EaC1e (on page 20) and
carried forward into the second edition.
Chapter 2, page 42
In Review Question 2, the first example of the PL/I string should
clearly end with a period so that it matches the version immediately
Chapter Notes for Chapter 2
The scanner shown in Figure 2.15 and the motivating
example are from Tom Reps 1998 paper "'Maximal-munch' tokenization
in linear time," ACM TOPLAS, 20(2), March 1998, pages 259-273.
Chapter 4, Figure 4.4, page 182
The caption should read "A Grammar for Signed Binary Numbers" rather
than "An Attribute Grammar ..."
Chapter 5, Figure 5.15, page 267:
The assignment to *p in procedure A should
simply assign a value to p. The "*" should be deleted.
Chapter 10, page 561 the forward reference for
Operator Strength Reduction should be to Section 10.7.2, not Section 10.4.
Chapter 12, page 673
The text says that the epilog code must cover downward
exposed uses; it should read "downward exposed definitions."