图书中心

计算机专业首页>图书中心>计算机类

编译原理(第4版)
  • 书     名:编译原理(第4版)
  • 出版时间:2024-09-07
  • 编 著 者:李劲华
  • 版       次:4-1
  • I  S  B N:978-7-5635-7276-2
  • 定       价:¥59.80元

内容简介线

本书系统地介绍计算机高级语言编译程序的基本构造,包括词法分析、语法分析、语法制导翻译的语义分析与中间代码生成、符号表与运行时存储空间的组织、代码优化以及目标代码生成,并对比主流计算机编程语言的构造方法和技术。重点选择在计算机科学技术、人工智能等使用的编译构造的基础理论,如形式语言、有限自动机和属性文法。突出构造编译程序的技术,讲解编译程序的各类算法、编译程序的自动构造工具,如词法分析生成器Lex和语法分析生成器Yacc,同时以课后阅读形式提供最新技术进展。
教材结构完整、逻辑严谨、表述清晰、易于理解,配有数字化资源以及练习和实验参考答案,适合应用型高校作为编译课程的教材和参考书。

目录介绍线

第1章概论 1
1.1为什么学习编译 1
1.2什么叫编译程序 2
1.3编译过程概述 3
1.3.1词法分析 3
1.3.2语法分析 4
1.3.3语义分析和中间代码生成 5
1.3.4代码优化 5
1.3.5目标代码生成 6
1.4编译程序的构成 7
1.4.1基本功能模块和辅助模块 7
1.4.2符号表的组织与管理 8
1.4.3错误诊断和报告 8
1.5其他与编译有关的概念和技术 9
1.5.1遍的概念 9
1.5.2编译的前端和后端 9
1.5.3编译程序的分类 9
1.5.4编译技术和软件工具 10
1.6如何开发编译程序 11
1.6.1编译程序的自展技术 11
1.6.2编译程序的移植技术 12
1.6.3编译程序的自动生成技术 13
1.7编译系统及其他相关程序 13
第2章词法分析 16
2.1词法分析器的设计 16
2.1.1词法分析器的功能与输出 16
2.1.2词法分析器与符号表 18
2.1.3词法分析器的两种实现模式 18
2.1.4词法错误的处理 19
2.1.5输入的预处理 19
2.1.6超前搜索和最长匹配 20
2.2词法分析器的一种实现方法 21
2.2.1状态转换图 21
2.2.2基于状态转换图的词法分析器的实现 23
2.3单词的表示形式与正规表达式 26
2.3.1符号、符号串与符号串集合 27
2.3.2正规表达式与正规集 28
2.3.3扩展的正规表达式 29
2.4单词的识别与有限自动机 30
2.4.1确定的有限自动机 31
2.4.2不确定的有限自动机 33
2.4.3从NFA到DFA的等价变换 34
2.4.4确定的有限自动机的最小化 37
2.4.5从正规表达式到有限自动机 40
2.4.6有限自动机在计算机中的表示 43
2.5词法分析自动生成器Lex 44
2.5.1Lex概述 45
2.5.2Lex的语言与实现 45
第3章程序语言的文法描述 50
3.1文法及语言的形式定义 51
3.1.1文法的形式定义 52
3.1.2推导与归约 53
3.1.3文法产生的语言 54
3.1.4语言的验证 55
3.1.5语言的文法表达 56
3.2文法的性质和其他表示 58
3.2.1分析树与语法树 58
3.2.2文法的二义性 60
3.2.3BNF与EBNF 63
3.3文法的分类 65
3.3.10型文法——短语文法 65
3.3.21型文法——上下文有关文法 65
3.3.32型文法——上下文无关文法 66
3.3.43型文法——正规文法 67
3.4语法分析概述 68
3.4.1自顶向下的语法分析 69
3.4.2自底向上的语法分析 70
3.4.3实际文法的使用限制和表示 70
第4章自顶向下的语法分析 75
4.1文法的等价变换 75
4.1.1自顶向下语法分析的问题 75
4.1.2文法等价的概念 77
4.1.3增广文法 77
4.1.4提取左公共因子 78
4.1.5消除左递归 78
4.1.6对上下文无关文法的期望 80
4.2LL(1)文法及其分析 81
4.2.1首符号集 81
4.2.2?后继符号集 83
4.2.3择符号集 86
4.2.4LL(1)文法 87
4.2.5LL(1)文法的分析 89
4.3递归下降分析技术 90
4.3.1递归下降分析器的设计 90
4.3.2从EBNF构造递归下降分析器 94
4.3.3递归下降分析的特点 95
4.4预测分析技术 95
4.4.1预测分析程序的工作过程 95
4.4.2预测分析表的构造 96
4.5LL(1)分析中的错误处理 100
第5章自底向上的语法分析 104
5.1自底向上语法分析概述 104
5.1.1自底向上语法分析器的体系结构 104
5.1.2规范归约和算符优先归约 105
5.1.3短语、句柄和最左素短语 107
5.2LR分析方法 108
5.2.1LR分析概述 109
5.2.2LR(0)分析表的构造 112
5.2.3SLR分析表的构造 118
5.2.4规范LR分析表的构造 124
5.2.5LALR分析表的构造 128
5.2.6LR分析方法小结 130
5.3算符优先分析方法 136
5.3.1算符优先文法 137
5.3.2算符优先关系的构造 138
5.3.3算符优先分析算法 140
5.3.4算符优先函数及其构造 142
5.4LALR分析器的生成工具YACC 143
5.4.1YACC概述 143
5.4.2YACC源程序 144
5.4.3YACC解决二义性和冲突的方法 146
5.4.4YACC对语法分析中的错误处理 147
第6章符号表的组织和管理 151
6.1符号表的作用 151
6.2符号表的主要属性 153
6.3符号表的组织结构 155
6.3.1符号表的整体组织结构 156
6.3.2关键码域的组织 157
6.3.3不等长域的组织 158
6.3.4符号表的操作与符号表项的组织 159
6.4名字的作用范围 162
6.4.1名字的声明 162
6.4.2块结构与符号表的分层次管理 163
6.4.3静态作用域和动态作用域 165
第7章运行时环境 167
7.1程序运行的基本概念 167
7.1.1过程及其活动 167
7.1.2活动记录 169
7.1.3调用序列和返回序列 169
7.1.4活动树 170
7.1.5环境和名字的绑定 170
7.2运行时存储空间的组织和管理 171
7.2.1运行时存储空间的划分 171
7.2.2存储分配策略 172
7.3静态运行时环境 173
7.4栈式运行时环境 175
7.4.1局部数据的组织和访问 175
7.4.2无过程嵌套的栈式运行时环境 177
7.4.3有过程嵌套的栈式运行时环境 178
7.5堆式运行时环境 183
7.5.1堆式动态存储分配的实现 184
7.5.2堆的自动管理 185
7.6面向对象语言的运行时环境 188
7.6.1面向对象语言的动态存储管理 188
7.6.2Java运行时环境 189
7.7参数传递机制 191
7.7.1按值调用 191
7.7.2引用调用 191
7.7.3值-结果调用 192
7.7.4换名调用 193
第8章属性文法和语义分析 199
8.1语义分析概况 199
8.2属性与属性文法 201
8.2.1属性的引入 201
8.2.2属性文法的定义 202
8.2.3属性文法的扩展与简化 207
8.3属性的计算 209
8.3.1属性依赖图和计算顺序 209
8.3.2综合属性和继承属性及其计算 212
8.3.3语法分析的同时计算属性 217
8.4数据类型与类型检查 224
8.4.1类型表达式与类型构造器 225
8.4.2类型等价 227
8.4.3类型检查 230
8.4.4类型转换 231
8.4.5类型检查的其他主题 233
第9章语法制导的中间代码翻译 237
9.1中间语言 238
9.1.1后缀式 239
9.1.2图形表示 241
9.1.3字节代码 243
9.1.4三地址代码及其四元式实现 244
9.2声明语句的翻译 247
9.2.1过程中的声明 247
9.2.2保留声明的作用域信息 248
9.2.3记录中的域名 251
9.3赋值语句的翻译 252
9.3.1简单算术表达式及赋值语句 252
9.3.2数组元素的引用 254
9.3.3记录和指针的引用 259
9.3.4类型转换 260
9.4基本控制结构的翻译 261
9.4.1布尔表达式的翻译 261
9.4.2控制流语句的多遍翻译模式 264
9.4.3回填技术基础 266
9.4.4控制流语句的单遍翻译模式 269
9.5转向语句的翻译 272
9.5.1标号语句与goto语句的翻译 273
9.5.2出口语句的翻译 273
9.5.3开关语句的翻译 274
9.5.4过程调用的翻译 276
第10章目标代码生成 279
10.1代码生成器的设计的基本问题 279
10.1.1目标程序 280
10.1.2指令选择 280
10.1.3寄存器分配 280
10.1.4计算顺序的选择 281
10.2虚拟计算机模型 281
10.3语法制导的目标代码生成 282
10.4基本块和待用信息 285
10.4.1基本块及其构造 285
10.4.2流图 287
10.4.3待用信息 288
10.5一个简单的代码生成器 289
10.5.1寄存器和地址的描述 290
10.5.2寄存器的分配原则与选择算法 291
10.5.3代码生成算法 291
10.5.4其他三地址语句的目标代码 293
10.6代码生成技术小结 294
10.7基于寄存器的虚拟机和栈式虚拟机 295
第11章代码优化 298
11.1代码优化的概念 298
11.2代码优化的基本技术 300
11.2.1删除公共子表达式 302
11.2.2复写传播 302
11.2.3删除无用代码 303
11.2.4代码外提 304
11.2.5强度削弱和删除归纳变量 305
11.3局部优化 306
11.3.1基本块的变换 306
11.3.2基本块的DAG实现 307
11.3.3基于DAG的局部优化 310
11.4机器代码优化——窥孔技术 311
11.4.1冗余存取的删除 312
11.4.2不可达代码的删除 312
11.4.3控制流优化 313
11.4.4代数化简与强度削弱 314
11.4.5特殊指令的使用 314
11.5代码优化的其他技术简介 314
参考文献 319