Date | Location | Correction |
2002-06-14 | Page 9, line -5 | Replace by "Letter stands for a lowercase or uppercase letter." |
2002-06-14 | Page 16, middle | Replace "(such as Lisp and Smalltalk)" by "(such as Smalltalk)". |
2002-06-14 | Page 35, Example 2.11 | Delete paragraph (b). |
2002-06-14 | Page 54, Exercise 2.10 | Delete this exercise. |
2002-02-08 | Page 84, Example 4.8 | Replace "the cat likes me" by "the cat sees me". |
2001-02-16 | Page 93, 2nd bullet point | After the 1st sentence insert "The function of parseN is to parse the longest possible phrase of class N starting with currentTerminal." |
2001-02-16 | Page 93, after 2nd bullet point | Insert new bullet point "On entry to method parseS, currentTerminal must contain the first input terminal. On exit from parseS, currentTerminal should contain a 'terminal' representing the end of the input." |
2002-06-14 | Page 103, Example 4.14 | Replace "starting from production rule (4.11)" by "starting from production rule (4.12)". |
2001-02-16 | Page 104, 1st bullet point | This condition for an LL(1) grammar should be "If the grammar contains X|Y and neither X nor Y can derive the empty string, starters[X] must be disjoint from starters[Y]. If the grammar contains X|Y and (say) Y can derive the empty string, starters[X] must be disjoint from the union of starters[Y] and the set of tokens that can follow X|Y in this context." |
2002-06-14 | Page 112, Expression ASTs | Add the following classes:public class IntegerExpression extends Expression { public IntegerLiteral IL; ... } public class VnameExpression extends Expression { public Vname V; ... } |
2002-06-14 | Page 121, method ScanSeparator | The '!' case should be indented as followed:case '!': { takeIt(); while (isGraphic(currentChar)) takeIt(); take('\n'); } break; |
2001-04-27 | Page 123, line -9 | Replace "this.kind = k;" by "this.kind = (byte)k;". |
2001-04-27 | Page 124, line 10 | Replace "}" by "};". |
2002-06-14 | Page 126, after (4.29) | Replace "Substitution for V-name in (4.26a) and (4.28a)" by "Substitution for V-name in (4.26a) and (4.27a)". |
2001-02-16 | Page 139, Section 5.1.2, line 5 | Replace "locally declared" by "globally declared". |
2001-02-16 | Page 151, constructor for class Type | Delete "static". Replace all three occurrences of "sort" by "kind". |
2001-02-16 | Page 164, line 5 | Replace "Exercises 5.4 and 5.5" by "Exercises 5.3 and 5.4". |
2001-02-16 | Page 166, lines -9 and -8 | Replace by "(5) proc put (c: Char) ~ ...;" and "(6) proc get (var c: Char) ~ ...;". |
2001-04-03 | Page 217, Example 6.24 | In line 8 of the program, replace "i//b" by "i/b". |
2001-05-14 | Page 236, paragraph 2 | Replace "instance method named move" by "instance method named area". |
2002-06-14 | Page 331, paragraphs 2-3 | Replace these paragraphs by "Recursive interpretation is less common. A classic description of a Lisp interpreter (expressed in Lisp itself) may be found in McCarthy et al. (1965)." |
2002-06-14 | Page 359, Answer 1.4 | Replace the first paragraph by "Mini-Triangle expressions: (a), (c), (d), (e). (Mini-Triangle has no functions.)". |
2002-03-01 | Page 400 | On line 11, replace "eol()" by "\ eol()". On line -5, replace "eof()" by "\ eof()". |
The authors gratefully acknowledge the help of readers who have reported errors.
If you find an error, please report it to the authors: David Watt or Deryck Brown.