Page |
Error |
||||||||||||||
30 |
The lexical analyzer should recognize the
following keywords and symbols, in addition to integer literals and
identifiers: class do else false for if new return true while + - * / [ ] { } ( ) . , ; == != < > <= >= = && || ! |
||||||||||||||
29 |
Comment delminters should be // and not \\.
\\ Single line comment!! identifier should be // Single line comment identifier and \\ Comment 1 \\ Comment 2 identifier Should be // Comment1 // Comment2 identifier |
||||||||||||||
33 |
The while loop in Figure 2.21 is missing a
statement. Correction is below in red: while (t.kind != sjavaConstants.EOF) { System.out.println("Token : " + t + " : "); System.out.println(sjavaConstants.tokenImage[t.kind]); t = tm.getNetToken(); } |
||||||||||||||
54 |
Bottom of the page, replace (2) S → C. Add {} to First(S) with (2) S → Cf. Add {} to First(S) And, replace (2) S → C. Add {f} to First(S) with (2) S → Cf. Add {f} to First(S) |
||||||||||||||
55 |
Top of the page, replace (2) S → C. Add {f,g} to First(S) (no change) with (2) S → Cf. Add {f,g} to First(S) (no change) |
||||||||||||||
55 |
The two First set tables at the top of the page
should have 'g' added to the First set of S', as follows:
|
||||||||||||||
56 |
In the algorithm to calculate Follow Sets of All
Non-terminals in a Context-free Grammar G: Step 3, substep ii should be (changes in red) ii. If the rule is of the form A → α A1 Β, where α and Β are (possibly empty) strongs of terminals and non-terminals, and First(Β) does contain ε, add all elements of First(Β) except ε to Follow(A1), and add all elements of Follow(A) to Follow(A1) |
||||||||||||||
59 |
Figure 4.7. Add S' to the set of
Non-Terminals, Start symbol should be S' In the Parse table, Row C, column ) should be C -> epsilon |
||||||||||||||
86 |
Figure 5.2. Replace num
with id in the header of the second column |
||||||||||||||
104 |
Figure 5.15. Row 14, column = should be
blank, instead of r(3) |
||||||||||||||
125 |
Figure 6.12: the line: class ASTIntegerLitera extends ASTExpression { should be class ASTIntegerLiteral extends ASTExpression { |
||||||||||||||
229 |
At the bottom of the page, the Actual
Assembly for MEM[FP-12] should be (changes in red): sw $FP, 0($ESP) % Store frame pointer on the top of the expressin stack addi $ESP, $ESP, -4 % Update the expression stack pointer addi $t1, $zero, 12 % Load the constant value 12 into the register $t1 sw $t1, 0($ESP) % Store $t1 on the top of the expression stack addi $ESP, $ESP, -4 % update the expression stack pointer lw $t1, 8($ESP) % load the first operand into temporary $t1 lw $t2, 4($ESP) % load the second operand into temparary $t2 sub $t1, $t1, $t2 % do the subtraction, storing result in $t1 sw $t1, 8($ESP) % store the result on the expression stack add $ESP, $ESP, 4 % update the expression stack pointer lw $t1, 4($ESP) % Pop the address to dereference off the top of % the expression stack lw $t1, 0($t1) % Dereference the pointer sw $t1, 4($ESP) % Push the result back on the expression stack |
||||||||||||||
230 |
The code on page 230 is correct, but the
comments are misleading. The corrected version follows (changes
in red) lw $t1 4($ESP) % Pop the second argument off the expression stack sw $t1 0($SP) % Store second argument on the call stack lw $t1 8($ESP) % Pop first argument off the expression stack sw $t1 -4($SP) % Store first argument on the call stack addi $SP, $SP, -8 % Update call stack pointer addi $ESP, $ESP, 8 % Update expression stack pointer jal foo % Make the function call addi $SP, $SP, 8 % Update call stack pointer sw $result,0($ESP) % Store result of function on expression stack addi $ESP, $ESP, -4 % Update expression stack pointer |
||||||||||||||
235 |
At the bottom of the page, the code for a Move
register tile, replace addi $rt, $ACC, 0 with addi $r1, $ACC, 0 |
||||||||||||||
236 |
Arguements to functions and procedures
should be pushed onto the call stack in reverse order, so that the
first
arguement is at location (FP+WORDSIZE) when the function is called.
Also, the SP should be modified before arguments are calcuated, so that function calls like foo(bar(x),bar(y)) don't cause problems. Thus,
the code for tiling a function/procedure call using an accumulator on
page 236 should be (changes in red): addi $SP, $SP, -<4n> % Update call stack pointer <Code for first argument> sw $ACC, 4($SP) % Store first argument on the call stack <Code for second argument> sw $ACC, 8($SP) % Store second argument on the call stack ... <Code for nth argument> sw $ACC, 4n($SP) % Store nth argument on the call stack jal foo % Make the function call addi $SP, $SP, <4n> % Update call stack pointer addi $ACC, $result,0 % Store result of function in accumulator |
||||||||||||||
287 |
Figure 11.5: The return type of the
constructor should be the ClassType for Integer, not void. The
corrected diagram can be found here |
||||||||||||||
319 |
The list of reserved words for simpleJava
should be class do else false if for new return true while (The reseverd word new was left out in the original text) |