Understanding and Writing Compilers by Richard Bornat ISBN 0 333 21732 2 published by Macmillan Errata from Geoff Collyer. General comments: stack manipulation, especially procedure entry and exit, assumes it is okay to reference beyond top of stack, which is not true in the presence of interrupts which use the same stack. Should adjust T first, move to -1(T) second (as on PDP-11 UNIX with hardware SP and either kernel stack and hardware interrupts or user stack and signals (software interrupts)). fig 2.5: minute is a name, not a number fig 3.12: missing " in Error() call after case ifsymbol p.68: footnote 1 is missing a period p.91: page heading & number are missing; footnote 1 contains the typo `sytactic' rather than `syntactic' fig 7.4: SKIPGT should be SKIPLE fig 7.17: label missing p.140: `bounds of of the vector' has one too many `of's in 2nd paragraph fig 9.5: error checking code is too late, should be before ADD fig 9.7: JSUB 2, should be JSUB L, fig 9.18: missing . in nodep^left fig 10.4: optimised order: y := 3 should be y := 4 fig 10.12: ``DO 1 K=1,'' is missing 50 p.170: .PP When the same optimisations are performed with the *the* fig 12.3: uses != instead of the correct \= fig 12.10: disagrees with p. 208; roles of p1 & p3 should be swapped (verify) fig 13.5 remove ``,'' in ``ADDn,'' fig 13.9 ``RETNi ,0(L)'' should be ``RETNi ,0(T)'' fig 13.15 `declpart^node' should be `nodep.declpart'? p.227 ``F and T registers'' should be ``F and E registers'' ch. 14 - alternately do GC my way (see attachment) fig 14.9 omit 2nd ``counter''? are start & mem supposed to be the same? fig 14.11 ``a.tail :='' will produce a cycle; should be ``b.tail :=''? fig 15.4 first ``T->P'' should be ``F->P'' p.262 in 10., 0 <= i <= n should be 1 <= i <= n fig 15.10 S1, S2, S3 in Input: should be E2, S1, S2 fig 15.2 ``1. n'' should be ``1..n'' p.224 2nd complete paragraph: sentences can also start with + or - terminals p.281 footnote is missing ``1'' fig 16.13 `default' needs `:' after it fig 16.17b ``both alpha and gamma'' should be ``both alpha and beta''; in (iv.b), FIRST* symbols of delta may follow the LAST* symbols of both gamma *and* alpha fig 16.29 tree for B shows last node of 4 on its 1st line pointing at 5; should be B. Tree for E is missing loop from 2nd (t,i) to (a,(t,+),NULL) fig 16.30 :=+ should be +:= p.313 how can the input of fig 17.7 use the matrix of fig 17.6? [in] != [a-g]; i is identifiers and n is numbers? this is not made explicit anywhere p.344 2nd word (therefore) needs a capital fig 18.21 won't accept fig 18.22's input; add ``E->@V''? fig 18.23 don't understand Formal production p.374 last line: ``... of it *it* quickly'' - too many `it's p.380 is a wonderful denunciation of ld -s & strip