出版社:清华大学出版社
年代:2016
定价:39.0
本书结合开源的C编译器UCC,通过对1万多行编译器源代码的深入分析,从语言、文法和递归等基本概念入手,介绍如何基于C89标准文法,通过词法分析、语法分析、语义检查、中间代码生成及优化、和汇编代码生成等阶段,构造完整的C编译器。
第1章基础知识/1
1.1语言、文法与递归1
1.2一个较复杂的文法4
1.3由文法到分析器7
1.3.1表达式7
1.3.2声明15
1.3.3语句21
1.4UCC编译器预览28
1.4.1UCC的使用28
1.4.2UCC驱动器31
1.5结合C语言来学汇编35
1.5.1汇编语言简介35
1.5.2整数运算42
1.5.3浮点数的算术运算48
1.5.4浮点数之间的比较操作51
1.5.5指针、数组和结构体53
1.6C语言的变量名、数组名和函数名55
1.7C语言的变参函数58
1.8本章习题65
第2章UCC编译器的基本模块/66
2.1从Makefile走起66
2.2词法分析69
2.3UCC编译器的内存管理74
2.4C语言的类型系统81
2.5UCC编译器的符号表管理91
2.6本章习题100
第3章语法分析/101
3.1C语言的表达式101〖1〗C编译器剖析目录[3]〖3〗3.1.1条件表达式和二元表达式101
3.1.2一元表达式、后缀表达式和基本表达式111
3.2C语言的语句122
3.3C语言的外部声明131
3.3.1声明和函数定义131
3.3.2与声明有关的几个非终结符142
3.3.3声明说明符和声明符147
3.4本章习题166
第4章语义检查/167
4.1语义检查简介167
4.2表达式的语义检查168
4.2.1表达式的语义检查简介168
4.2.2数组索引的语义检查173
4.2.3基本表达式的语义检查179
4.2.4函数调用的语义检查184
4.2.5成员选择运算符的语义检查198
4.2.6相容类型201
4.2.7一元表达式的语义检查209
4.2.8二元表达式、赋值表达式和条件表达式的语义检查216
4.3语句的语义检查226
4.4声明的语义检查231
4.4.1类型结构的构建231
4.4.2结构体的类型结构245
4.4.3结构体和数组的初始化255
4.4.4内部连接和外部连接267
4.4.5外部声明的语义检查270
4.5本章习题274
第5章中间代码生成及优化/276
5.1中间代码生成简介276
5.2表达式的翻译283
5.2.1布尔表达式的翻译283
5.2.2公共子表达式293
5.2.3通过“偏移”访问数组元素和结构体成员301
5.2.4后缀表达式的翻译305
5.2.5赋值表达式的翻译310
5.2.6一元表达式及其他表达式的翻译317
5.3语句的翻译319
5.3.1if语句和复合语句的翻译319
5.3.2switch语句的翻译324
5.4UCC编译器的优化334
5.4.1删除无用的临时变量和优化跳转目标334
5.4.2基本块的合并339
5.5本章习题342
第6章汇编代码生成/344
6.1汇编代码生成简介344
6.2寄存器的管理351
6.3中间代码的翻译358
6.3.1由中间代码产生汇编指令的主要流程358
6.3.2为算术运算产生汇编代码367
6.3.3为跳转指令产生汇编代码371
6.3.4为函数调用与返回产生汇编代码375
6.3.5为类型转换产生汇编代码382
6.3.6为取地址产生汇编指令387
6.4本章习题390
参考文献/391后记/3921.1软件工程的发展历程1
1.1.1软件危机1
1.1.2软件危机出现的原因3
1.1.3软件工程的发展4
1.2软件工程的概念5
1.2.1软件工程的定义5
1.2.2软件工程的目标6
1.2.3软件工程的实施原则8
1.2.4软件工程的基本原理9
1.3软件与软件过程10
1.3.1软件的概念11
1.3.2软件的分类12
1.3.3软件生命周期13
1.3.4软件过程15
1.4软件过程模型16
1.4.1瀑布模型16
1.4.2原型模型17
1.4.3增量模型18
1.4.4螺旋模型19
1.4.5喷泉模型20
1.4.6敏捷过程模型20
1.4.74GT过程模型22
1.4.8基于构件的开发模型23
1.4.9Rational统一建模过程24
1.4.10微软解决框架过程模型25
1.5软件开发方法26
1.5.1结构化开发方法27
1.5.2面向对象开发方法271.6案例描述28
1.6.1简历信息自动获取和查询系统28
1.6.2试卷自动生成系统29
1.7本章小结30
习题31
第2章软件需求工程/33
2.1软件需求的基本概念33
2.1.1需求分析的任务33
2.1.2需求分析的原则34
2.1.3需求分析的内容35
2.2需求工程的过程36
2.2.1需求工程中的参与人员36
2.2.2可行性研究37
2.2.3需求工程过程中的活动39
2.2.4需求工程的管理40
2.3需求获取技术41
2.4结构化需求分析和建模43
2.4.1结构化需求分析概述44
2.4.2面向数据的数据建模44
2.4.3面向数据流的功能建模46
2.4.4面向状态转换的行为建模50
2.4.5数据字典51
2.4.6加工逻辑53
2.5案例——“简历自动获取和查询系统”的需求建模54
2.5.1数据建模——ER图描述54
2.5.2功能建模——数据流图55
2.5.3行为建模——状态转换图56
2.5.4数据字典57
2.5.5加工逻辑——PDL语言的描述57
2.6需求评审58
2.6.1软件需求规格说明文档58
2.6.2需求评审标准及需求验证61
2.6.3需求变更管理63
2.7本章小结64
习题64
第3章软件设计基础/66
3.1软件设计概述66
3.1.1软件设计与软件需求66
3.1.2软件设计的任务67
3.1.3软件设计的原则69
3.2软件体系结构设计70
3.2.1体系结构设计概述70
3.2.2以数据为中心的数据仓库模型70
3.2.3客户端/服务器模式的分布式结构71
3.2.4层次模型73
3.2.5管道与过滤器模型74
3.3模块化设计75
3.3.1软件模块化与分解75
3.3.2抽象76
3.3.3信息隐藏76
3.3.4模块独立性77
3.3.5启发式规则79
3.4界面设计82
3.4.1界面设计的任务82
3.4.2界面设计的原则83
3.4.3界面设计的特性84
3.4.4MVC模型84
3.5软件设计评审85
3.5.1软件设计规格说明文档85
3.5.2软件设计评审标准89
3.5.3软件设计验证90
3.6本章小结91
习题92
第4章结构化设计方法/93
4.1结构化设计方法概述93
4.2面向数据流的设计方法94
4.2.1层次图和结构图94
4.2.2变换分析法96
4.2.3事务分析法100
4.2.4混合分析法101
4.3面向数据的设计方法102
4.3.1Jackson图102
4.3.2Jackson系统开发方法103
4.4案例——“简历自动获取和查询系统”的数据流设计方法106
4.4.1用变换分析法进行设计106
4.4.2用事务分析法进行设计107
4.4.3两种方法的比较108
4.5结构化详细设计的工具109
4.5.1程序流程图109
4.5.2盒图(NS图)110
4.5.3问题分析图(PAD图)111
4.5.4判定树113
4.5.5判定表113
4.5.6详细设计工具的比较114
4.6本章小结115
习题116
第5章软件实现/118
5.1程序设计语言118
5.1.1程序设计语言的分类118
5.1.2程序设计语言的特性119
5.1.3选择程序设计语言120
5.2程序设计风格122
5.2.1程序编排和组织的准则122
5.2.2程序设计的效率126
5.3代码复用127
5.4代码评审129
5.5本章小结132
习题133
第6章软件测试/136
6.1软件测试基础136
6.1.1软件测试概念136
6.1.2软件测试过程模型137
6.1.3软件测试原则139
6.1.4软件测试在软件开发各阶段的工作流程141
6.1.5软件测试信息流143
6.1.6软件测试技术分类143
6.2白盒测试145
6.2.1逻辑覆盖145
6.2.2循环测试148
6.2.3路径测试149
6.3黑盒测试152
6.3.1等价类划分152
6.3.2边界值分析154
6.3.3错误推测法154
6.3.4因果图法155
6.4白盒测试和黑盒测试的比较157
6.5软件测试策略158
6.5.1单元测试158
6.5.2集成测试161
6.5.3确认测试164
6.5.4系统测试165
6.6调试167
6.6.1软件调试过程167
6.6.2软件调试方法168
6.7软件测试报告169
6.7.1软件测试说明169
6.7.2软件测试报告170
6.8本章小结171
习题172
第7章UML统一建模语言/174
7.1UML的发展174
7.1.1UML的产生174
7.1.2UML的构成175
7.1.3UML的特点176
7.2面向对象的基本概念176
7.3UML视图182
7.4UML的图和模型元素183
7.4.1用例图183
7.4.2类图185
7.4.3包图186
7.4.4状态图187
7.4.5活动图187
7.4.6顺序图189
7.4.7协作图190
7.4.8构件图191
7.4.9配置图192
7.5UML的关系192
7.5.1关联关系193
7.5.2泛化关系196
7.5.3依赖关系199
7.5.4实现关系200
7.6UML的通用机制200
7.6.1修饰201
7.6.2注释201
7.6.3规格说明201
7.6.4扩展机制202
7.7基于UML的软件过程203
7.8本章小结205
习题206
第8章面向对象分析/207
8.1面向对象分析概述207
8.1.1传统软件过程中的不足207
8.1.2面向对象的特点208
8.1.3面向对象分析的基本过程209
8.1.4面向对象分析的3类模型209
8.1.5静态模型的5个层次210
8.2建立功能模型(用例模型)211
8.2.1识别参与者212
8.2.2识别用例212
8.2.3识别用例间关系214
8.2.4用例描述文档215
8.3建立静态模型(对象模型)216
8.3.1识别类与对象216
8.3.2划分主题218
8.3.3确定结构219
8.3.4确定属性220
8.3.5确定服务221
8.3.6类图描述文档221
8.3.7包图描述文档222
8.4建立动态模型223
8.4.1建立顺序图及其描述文档223
8.4.2建立状态图及其描述文档225
8.4.3建立协作图及其描述文档226
8.4.4建立活动图及其描述文档227
8.5本章小结229
习题229
第9章面向对象设计/231
9.1面向对象设计概述231
9.1.1面向对象分析与设计的关系231
9.1.2面向对象设计原则232
9.2精化类及类间关系233
9.2.1设计类的属性233
9.2.2设计类的方法234
9.2.3设计类间泛化关系235
9.2.4设计关联类236
9.3数据设计237
9.3.1基于关系数据库的数据设计237
9.3.2基于其他方式的数据设计239
9.4人机交互设计240
9.5建立实现模型241
9.5.1构件图及其描述文档241
9.5.2配置图及其描述文档243
9.6设计模式简介244
9.6.1概述244
9.6.2Singleton模式245
9.6.3Abstract Factory模式247
9.6.4Mediator模式249
9.6.5Adapter模式251
9.6.6Iterator模式253
9.6.7State模式256
9.7面向对象的测试258
9.7.1面向对象测试概述258
9.7.2面向对象的单元测试259
9.8本章小结261
习题262
第10章软件维护/265
10.1软件维护概述265
10.1.1软件维护的任务265
10.1.2软件维护的特点266
10.1.3软件维护的分类266
10.2软件维护过程267
10.2.1软件维护方式268
10.2.2软件维护管理的基本内容269
10.2.3维护中存在的问题273
10.2.4维护活动记录274
10.3软件的可维护性275
10.3.1可维护性因素275
10.3.2提高软件的可维护性276
10.4逆向工程278
10.5本章小结280
习题281
第11章软件项目管理/282
11.1软件项目管理概述282
11.1.1软件项目管理的特点和内容282
11.1.2软件项目管理目标283
11.1.3软件项目管理的4P观点284
11.2软件项目规模度量285
11.2.1代码行技术286
11.2.2功能点计算287
11.2.3代码行与功能点间的转换290
11.3软件项目估算291
11.3.1代码行和功能点的其他估算模型291
11.3.2专家估算模型291
11.3.3Putnam模型292
11.3.4COCOMO模型292
11.3.5项目估算模型的小结295
11.4项目进度管理295
11.4.1项目进度控制295
11.4.2甘特图296
11.4.3工程网络图297
11.5项目风险管理298
11.5.1软件风险概念299
11.5.2风险管理过程299
11.6项目质量管理302
11.6.1软件质量因素303
11.6.2软件质量保证活动307
11.6.3软件质量保证计划308
11.7软件配置管理309
11.7.1软件配置项310
11.7.2配置管理过程310
11.7.3软件配置管理计划313
11.8项目人员组织管理315
11.8.1团队组织315
11.8.2团队组织方式315
11.9软件能力成熟度模型317
11.9.1基本概念317
11.9.2软件能力成熟度模型等级319
11.9.3关键过程域319
11.10本章小结320
习题321
参考文献/3231.6案例描述28
1.6.1简历信息自动获取和查询系统28
1.6.2试卷自动生成系统29
1.7本章小结30
习题31
第2章软件需求工程/33
2.1软件需求的基本概念33
2.1.1需求分析的任务33
2.1.2需求分析的原则34
2.1.3需求分析的内容35
2.2需求工程的过程36
2.2.1需求工程中的参与人员36
2.2.2可行性研究37
2.2.3需求工程过程中的活动39
2.2.4需求工程的管理40
2.3需求获取技术41
2.4结构化需求分析和建模43
2.4.1结构化需求分析概述44
2.4.2面向数据的数据建模44
2.4.3面向数据流的功能建模46
2.4.4面向状态转换的行为建模50
2.4.5数据字典51
2.4.6加工逻辑53
2.5案例——“简历自动获取和查询系统”的需求建模54
2.5.1数据建模——ER图描述54
2.5.2功能建模——数据流图55
2.5.3行为建模——状态转换图56
2.5.4数据字典57
2.5.5加工逻辑——PDL语言的描述57
2.6需求评审58
2.6.1软件需求规格说明文档58
2.6.2需求评审标准及需求验证61
2.6.3需求变更管理63
2.7本章小结64
习题64第3章软件设计基础/66
3.1软件设计概述66
3.1.1软件设计与软件需求66
3.1.2软件设计的任务67
3.1.3软件设计的原则69
3.2软件体系结构设计70
3.2.1体系结构设计概述70
3.2.2以数据为中心的数据仓库模型70
3.2.3客户端/服务器模式的分布式结构71
3.2.4层次模型73
3.2.5管道与过滤器模型74
3.3模块化设计75
3.3.1软件模块化与分解75
3.3.2抽象76
3.3.3信息隐藏76
3.3.4模块独立性77
3.3.5启发式规则79
3.4界面设计82
3.4.1界面设计的任务82
3.4.2界面设计的原则83
3.4.3界面设计的特性84
3.4.4MVC模型84
3.5软件设计评审85
3.5.1软件设计规格说明文档85
3.5.2软件设计评审标准90
3.5.3软件设计验证91
3.6本章小结92
习题93
第4章结构化设计方法/94
习题117
第5章软件实现/119
习题134
第6章软件测试/137
习题173
第7章UML统一建模语言/175
习题207
第8章面向对象分析/208
习题230
第9章面向对象设计/232
习题263
第10章软件维护/266
习题282
第11章软件项目管理/283
习题322
参考文献/324
“编译原理”课程是一门理论性与实践性非常强的课程,应遵循从具体到抽象的认知规律。本书以一个开源的C编译器(UCC)为案例,在源代码分析的过程中,展开对编译原理相关知识的学习和讨论。全书共分6章:第1章介绍文法和递归等知识点,并采用结合C语言的方式来讨论汇编代码;第2章讨论UCC编译器的词法分析、内存管理、符号表管理和类型系统等基本模块;第3章介绍UCC编译器的语法分析,采用的是手工打造分析器的技术路线;第4章介绍语义检查,通过本章的学习,有助于C程序员站在编译器的角度来深入理解C语言的语义规则;第5章分析UCC编译器的中间代码生成及优化;第6章介绍如何生成32位的x86汇编代码。本书不仅是很好的编译原理和编译器设计教材,也可作为读者深入学习C程序设计的参考用书。
(1)用C语言实现C编译器。
(2)代码简洁易懂,结构清晰。
(3)遵循ANSI C89标准。
(4)本书以一个开源的C编译器(UCC)为案例,在源代码分析的过程中,展开对编译原理相关知识的学习和讨论。
(5)很好的编译原理和编译器设计教材,也是深入学习C程序设计的参考用书。
书籍详细信息 | |||
书名 | C编译器剖析站内查询相似图书 | ||
9787302426103 如需购买下载《C编译器剖析》pdf扫描版电子书或查询更多相关信息,请直接复制isbn,搜索即可全网搜索该ISBN | |||
出版地 | 北京 | 出版单位 | 清华大学出版社 |
版次 | 1版 | 印次 | 1 |
定价(元) | 39.0 | 语种 | 简体中文 |
尺寸 | 26 × 19 | 装帧 | 平装 |
页数 | 印数 | 2000 |
C编译器剖析是清华大学出版社于2016.出版的中图分类号为 TP312 的主题关于 C语言-编译器-程序设计 的书籍。
(日) 青木峰郎, 著
(美) 费希尔 (Fischer,C.N.) 等, 著
(美) 弗雷泽 (Fraser,C.W.) 等, 著
(美) 克里斯多夫·W.弗雷泽, (美) 戴维·R.汉森, 著
王俊博, 张宇, 编著
(美) 库珀 (Cooper,K.D.) , (美) 托克森 (Torczon,L.) , 著
裘巍, 编著
谌志群, 王荣波, 黄孝喜, 主编
(美) 赖斯 (Reis,A.J.D.) , 著