新書推薦:
《
异域回声——晚近海外汉学之文史互动研究
》
售價:HK$
109.8
《
世界文明中的作物迁徙:聚焦亚洲、中东和南美洲被忽视的本土农业文明
》
售價:HK$
99.7
《
无端欢喜
》
售價:HK$
76.2
《
股票大作手操盘术
》
售價:HK$
53.8
《
何以中国·何谓唐代:东欧亚帝国的兴亡与转型
》
售價:HK$
87.4
《
一间只属于自己的房间 女性主义先锋伍尔夫代表作 女性精神独立与经济独立的象征,做自己,比任何事都更重要
》
售價:HK$
44.6
《
泉舆日志 幻想世界宝石生物图鉴
》
售價:HK$
134.2
《
养育女孩 : 官方升级版
》
售價:HK$
50.4
|
編輯推薦: |
本书是根据作者在多年教学实践过程中收集的读者反馈,为配合编译原理与技术课程的理论教学而编著的,是一本面向理论学习和实践的指导教材。主要内容包括两方面:(1)对主教材主要章的知识要点的梳理、习题解答思路解析以及参考答案,以此帮助读者理解编译的基本原理。(2)就编译涉及的主要方法的实现给予指导,书中将介绍算法设计思路,给出核心代码结构,以此帮助读者理解编译原理和实现技术,同时有助于提高读者的程序分析和设计能力。本书是一本学习指导书,既可以与《编译原理与技术(第2版)》教材配合使用,也可以单独使用。
|
內容簡介: |
《编译原理与技术(第2版)学习指导与习题解析》是与《编译原理与技术(第2版)》一书配套的学习指导教材,对应《编译原理与技术(第2版)》的主要章节,给出相应的知识要点总结、习题解答思路分析及参考答案,结合每一章介绍的原理和技术,给出相应的算法设计或上机实验题目、解决方案。
|
目錄:
|
目录
第1章编译概述1
1.1知识要点1
1.2习题解析及参考答案1第2章形式语言与自动机基础5
2.1知识要点5
2.2习题解析及参考答案5第3章词法分析36
3.1知识要点36
3.2习题解析及参考答案36第4章语法分析56
4.1知识要点56
4.2习题解析及参考答案56第5章语法制导翻译技术90
5.1知识要点90
5.2习题解析及参考答案90第6章语义分析132
6.1知识要点132
6.2习题解析及参考答案132第7章运行环境156
7.1知识要点156
7.2习题解析及参考答案156第8章中间代码生成174
8.1知识要点1748.2习题解析及参考答案174第9章目标代码生成194
9.1知识要点194
9.2习题解析及参考答案194第10章代码优化212
10.1知识要点212
10.2习题解析及参考答案212第11章模拟试卷226
11.1模拟试卷1及参考答案226
11.1.1模拟试卷1226
11.1.2模拟试卷1参考答案229
11.2模拟试卷2及参考答案236
11.2.1模拟试卷2236
11.2.2模拟试卷2参考答案238参考文献2451.1翻译和解释1
1.1.1程序设计语言1
1.1.2翻译程序2
1.2编译的阶段和任务4
1.2.1分析阶段4
1.2.2综合阶段7
1.2.3符号表管理10
1.2.4错误处理10
1.3和编译有关的其他概念11
1.3.1编译的前端和后端11
1.3.2遍的概念11
1.4编译程序的伙伴工具13
1.4.1预处理器14
1.4.2汇编程序14
1.4.3连接装配程序16
1.5编译原理的应用16
习题118第2章形式语言与自动机基础19
2.1语言和文法19
2.1.1字母表和符号串19
2.1.2语言20
2.1.3文法及其形式定义21
2.1.4推导和短语23
2.1.5分析树及二义性25
2.1.6文法变换27
2.2有限自动机31
2.2.1确定的有限自动机32
2.2.2非确定的有限自动机342.2.3具有转移的非确定的有限自动机36
2.2.4DFA的化简40
2.3正规文法与有限自动机的等价性42
2.4正规表达式与有限自动机的等价性45
2.5正规表达式与正规文法的等价性48
2.5.1正规定义式48
2.5.2表示的缩写49
2.5.3正规表达式转换为等价的正规文法50
习题251第3章词法分析53
3.1词法分析程序与语法分析程序的关系53
3.2词法分析程序的输入与输出54
3.2.1输入缓冲区54
3.2.2词法分析程序的输出56
3.3记号的描述和识别57
3.3.1词法与正规文法58
3.3.2记号的文法58
3.3.3状态转换图与记号的识别61
3.4词法分析程序的设计与实现62
3.4.1文法及状态转换图63
3.4.2词法分析程序的构造65
3.4.3词法分析程序的实现65
3.5LEX简介71
3.5.1LEX源程序的结构71
3.5.2LEX源程序举例74
习题376
程序设计177第4章语法分析78
4.1语法分析简介78
4.1.1语法分析程序的地位78
4.1.2常用的语法分析方法78
4.1.3语法错误的处理79
4.2自顶向下分析方法80
4.2.1递归下降分析81
4.2.2递归调用预测分析82
4.2.3非递归预测分析88
4.3自底向上分析方法95
4.3.1规范归约97
4.3.2移进归约方法的实现98
4.4LR分析方法100
4.4.1LR分析程序的模型及工作过程100
4.4.2SLR1分析表的构造104
4.4.3LR1分析表的构造112
4.4.4LALR1分析表的构造119
4.4.5LR分析方法对二义文法的应用124
4.4.6LR分析的错误处理与恢复129
4.5软件工具YACC131
4.5.1YACC源程序132
4.5.2YACC对二义文法的处理134
4.5.3用LEX建立YACC的词法分析程序136
习题4137
程序设计2141第5章语法制导翻译技术142
5.1语法制导定义及翻译方案143
5.1.1语法制导定义143
5.1.2依赖图146
5.1.3计算次序147
5.1.4S属性定义及L属性定义148
5.1.5翻译方案149
5.2S属性定义的自底向上翻译151
5.2.1为表达式构造语法树的语法制导
定义151
5.2.2S属性定义的自底向上翻译155
5.3L属性定义的自顶向下翻译158
5.3.1消除翻译方案中的左递归158
5.3.2预测翻译程序的设计162
5.4L属性定义的自底向上翻译165
5.4.1移走翻译方案中嵌入的语义规则166
5.4.2直接使用分析栈中的继承属性166
5.4.3变换继承属性的计算规则169
5.4.4改写语法制导定义为S属性定义172
5.5通用的语法制导翻译方法173
习题5176第6章语义分析180
6.1语义分析概述180
6.1.1语义分析的任务180
6.1.2语义分析程序的位置181
6.1.3错误处理181
6.2符号表182
6.2.1符号表的建立和访问时机182
6.2.2符号表内容184
6.2.3符号表操作187
6.2.4符号表组织189
6.3类型检查193
6.3.1类型表达式194
6.3.2类型等价197
6.4一个简单的类型检查程序204
6.4.1语言说明204
6.4.2符号表的建立205
6.4.3表达式的类型检查210
6.4.4语句的类型检查213
6.4.5类型转换214
6.5类型检查有关的其他主题216
6.5.1函数和运算符的重载216
6.5.2多态函数217
习题6220
程序设计3223第7章运行环境225
7.1程序运行时的存储组织225
7.1.1程序运行空间的划分226
7.1.2活动记录与控制栈227
7.1.3名字的作用域及名字绑定230
7.2存储分配策略231
7.2.1静态存储分配231
7.2.2栈式存储分配233
7.2.3堆式存储分配237
7.3非局部名字的访问239
7.3.1程序块239
7.3.2静态作用域规则下非局部名字的
访问241
7.3.3动态作用域规则下非局部名字的
访问248
7.4参数传递机制250
7.4.1传值调用250
7.4.2引用调用252
7.4.3复制恢复253
7.4.4传名调用255
习题7255第8章中间代码生成259
8.1中间代码形式259
8.1.1图形表示259
8.1.2三地址代码260
8.2赋值语句的翻译265
8.2.1仅涉及简单变量的赋值语句的
翻译265
8.2.2涉及数组元素的赋值语句268
8.2.3记录结构中域的访问273
8.3布尔表达式的翻译274
8.3.1翻译布尔表达式的方法274
8.3.2数值表示法275
8.3.3控制流表示法及回填技术276
8.4控制语句的翻译282
8.5goto语句的翻译287
8.6CASE语句的翻译289
8.7过程调用语句的翻译292
习题8294第9章目标代码生成297
9.1目标代码生成概述297
9.1.1代码生成程序的位置297
9.1.2代码生成程序设计的相关问题298
9.2基本块和流图300
9.3下次引用信息302
9.4一个简单的代码生成程序305
9.4.1目标机器描述305
9.4.2代码生成算法307
9.4.3其他常用语句的代码生成312
习题9315第10章代码优化317
10.1代码优化概述317
10.1.1代码优化程序的功能和位置317
10.1.2代码优化的主要种类317
10.2基本块优化318
10.2.1常数合并及常数传播318
10.2.2删除公共表达式320
10.2.3复制传播321
10.2.4削弱计算强度321
10.2.5改变计算次序321
10.3dag在基本块优化中的应用322
10.3.1基本块的dag表示322
10.3.2基本块的dag构造算法323
10.3.3dag的应用327
10.3.4dag构造算法的进一步讨论330
10.4循环优化333
10.4.1循环展开333
10.4.2代码外提334
10.4.3削弱计算强度334
10.4.4删除归纳变量335
10.5窥孔优化337
10.5.1删除冗余的传送指令337
10.5.2删除死代码337
10.5.3控制流优化338
10.5.4削弱计算强度及代数化简338
习题10339第11章面向对象的编译方法341
11.1面向对象语言的基本概念341
11.1.1类和对象341
11.1.2继承343
11.1.3信息封装346
11.1.4多态性347
11.2方法的编译350
11.2.1静态方法350
11.2.2动态方法351
11.3继承的编译354
11.3.1单一继承的编译354
11.3.2多继承的编译355
11.4程序运行环境358
习题11359第12章编译程序构造实践360
12.1编译程序的表示及实现方法360
12.1.1表示方法360
12.1.2实现语言360
12.1.3自展法361
12.1.4移植法362
12.2PL0语言及其编译程序介绍364
12.2.1PL0语言365
12.2.2PL0编译程序的结构368
12.2.3PL0编译程序的词法分析369
12.2.4PL0编译程序的语法分析371
12.2.5PL0编译程序的出错处理373
12.2.6PL0编译程序的执行环境及
代码生成375
12.2.7PL0程序编译和运行示例379
12.3GCC编译程序381
12.3.1GCC简介382
12.3.2GCC编译程序的结构与处理
流程383
12.3.3GCC的分析程序384
12.3.4GCC的中间语言及中间代码
生成385
12.3.5GCC的代码优化389
12.3.6GCC的代码生成391
12.4编译实践392
12.4.1PascalS语言说明392
12.4.2课程设计要求及说明398
12.4.3编译程序的测试400附录PL0编译程序源程序402参考文献416
|
內容試閱:
|
前言
本书是与作者在清华大学出版社出版的《编译原理与技术(第2版)》(以下简称主教材)一书相配套的学习指导和习题解答教材,也可以与当前各种编译原理教材配套使用,既可辅助和引导学生完成课程学习,也可作为研究生入学考试的参考书。编译原理与技术是计算机学科的一门核心课程,也是计算机系统软件中非常重要的一个分支。作为计算机类专业的学生,了解和掌握编译程序的基本构造原理和实现技术,学习和掌握编译程序的原理和技术,对今后的进一步学习、研究和工作奠定坚实的专业理论基础是十分必要的。由于编译程序的设计与实现涉及程序设计语言、形式语言与自动机理论、数据结构、计算机组成原理、操作系统以及软件工程学等诸多领域,因此需要综合运用这些知识来解决本课程所提出的一系列问题。另外,本课程所阐述的一些概念、原理、技术和方法也可应用于其他系统软件和应用软件的开发中。对于计算机专业的学生,编译原理与技术是比较难于理解和掌握的课程,其包含的算法和思想比较特殊,理论性较强,抽象度较高。学生们都期盼着有一本好的习题解答,能够更好地帮助他们学习和掌握课程内容。作者也多次收到读者的电子邮件,希望能够提供主教材习题的参考答案。作者讲授编译原理与技术这门课程已有二十余年,结合多年的教学经验和体会以及在教学过程中遇到的实际问题,对主教材设计的习题进行了详细的解析,本书前10章的名称与主教材保持一致,为使用主教材进行教学提供了支撑。同时,本书也对主教材中部分习题的描述进行了修正,以便读者可以单独使用本书进行学习。第11章提供了两套模拟试卷及参考答案。本书保持了主教材理论与实践相结合的特点,针对基础理论方面的习题,给出了涉及的知识要点和理论,分析了解题思路并给出了参考答案;针对编程实践类习题,给出了程序设计思路和要点,对于难度较大的编程题,还给出了程序伪码说明。主教材第11章的习题主要是希望读者编译、运行例题中所给的程序,根据程序的运行结果分析其执行过程,读者结合自己掌握的C程序设计相关知识很容易完成这些习题,因此本书就不再给出这些习题的具体说明了。限于作者水平,书中难免存在一些不足,敬请广大读者批评指正。
作者2018年1月
|
|