《编译原理与技术》勘误表
2010-10-9
1、第9页倒数第9行中的“row speed”改成“raw speed”。
2、第14页表2.1中第4行的关系运算符“==”改成“=”,以便与2.2.4节、2.5节的一致。(对应的课件为 “第2章 词法分析1.ppt”) 若不修改表2.1,则需要:
1)修改第20页的例2.6中relop的正规定义,改成relop ? < | <= | == | <> | > | >=; 2)修改第21页图2.2如下图所示。
2 return(relop, LE)
= 1 < 开始 0 = > = 7 other 9 8 ?
return(relop, GE) return(relop, GT)
5 > other = 3 4 6 ?
return(relop, NE) return(relop, LT) return(relop, EQ)
图2.2 关系算符的转换图
3)修改第22页图2.3中的状态编号,将9~11依次改为10~12 4)修改第22页图2.4中的状态编号,将12~19依次改为13~20 5)修改第23页图2.5中的状态编号,将20~22依次改为21~23 6)修改第37页图2.23,将其中的 \ {yylval = EQ; return (RELOP);} 改成 \==\ {yylval = EQ; return (RELOP);} (对应的课件为 “第2章 词法分析2.ppt”)
3、第58页表3.2中第2行第2列“E $”右对齐。
4、第98页图4.8中的2个“real”均改成“char”。
5、第104页4.3.3节中第1、7行的“addtype”改成“addType”,以与98页中的一致。
6、第105页第13行的“{boolean, integer}”改成“{boolean, integer}”。
7、第108页倒数第5行,“intaddress;”改成“int address;”,即int和address之间增加空格。
8、第109页第2段下方的类型cell的声明改成
typedef struct cell {
int info;
struct cell ?next; }cell;
即在typedef和struct之间增加空格,将“struct_cell”中的下划线改成空格。
9、第109页图4.12(a)和(b)中的integer改成int。
10、第116页第1行“readarray( );”改成“readArray( );”。
11、第128页第9行“readarray;”改成“readArray;”,第11行“quicksort”改成“quickSort”。
12、第137页第3段开头“过分频繁地释放”改成“重复释放”。
13、第151页表6.1中第2列“语义规则”改成“语义动作”,以便与第4章的名称一致。
14、第161页中
(4) E ? L
{if (L.offset == null ) E.place = L.place /? L是简单变量 ?/ else begin
E.place= newTemp();
emit(E.place, ‘=’, L.place, ‘[’, L.offset, ‘]’); end}
{if (L.offset == null ) E.place = L.place; /? L是简单变量 ?/ else {
E.place= newTemp( );
emit(E.place, ‘=’, L.place, ‘[’, L.offset, ‘]’); }}
改成
(4) E ? L
15、第163页图6.11中,所有的斜体“integer”改成粗体“integer”,所有的斜体“real”改成粗体“real”,所有的粗体“begin”改成“{”,所有的粗体“end”改成“}”。
16、第172页“习题”上方倒数第5行,改成“emit(‘call’, id.place, n); }”,即在花括号左边增加分号。
17、第176页6.12题目中的while语句改成:
while (e2 ) {
stmt; e3; }
即将“do begin”和“end”分别换成“{”和“}”,在“e3”后增加分号。 18、第177页第10行的“fori”改成“for i”,即在for和i之间增加空格。第6~12行的program、var、begin、for、to、do、end均加粗。即:
program forloop (input, output);
var i, initial, final: integer; begin read (initial, final);
for i := initial to final do
writeln (i)
end.
19、第203页习题7.5第2行中“把第10行…”改成“把第8行…”。