新書推薦:
《
掌故家的心事
》
售價:NT$
390.0
《
孤独传:一种现代情感的历史
》
售價:NT$
390.0
《
家、金钱和孩子
》
售價:NT$
295.0
《
量价关系——透视股票涨跌脉络
》
售價:NT$
340.0
《
二十四节气生活美学
》
售價:NT$
340.0
《
西班牙内战:秩序崩溃与激荡的世界格局:1936-1939
》
售價:NT$
990.0
《
基于鲲鹏的分布式图分析算法实战
》
售價:NT$
495.0
《
夺回大脑 如何靠自己走出强迫
》
售價:NT$
299.0
|
編輯推薦: |
1)用C语言实现C编译器。
(2)代码简洁易懂,结构清晰。
(3)遵循ANSI C89标准。
(4)本书以一个开源的C编译器(UCC)为案例,在源代码分析的过程中,展开对编译原理相关知识的学习和讨论。
(5)很好的编译原理和编译器设计教材,也是深入学习C程序设计的参考用书。
|
內容簡介: |
编译原理课程是一门理论性与实践性非常强的课程,应遵循从具体到抽象的认知规律。本书以一个开源的C编译器(UCC)为案例,在源代码分析的过程中,展开对编译原理相关知识的学习和讨论。全书共分6章: 第1章介绍文法和递归等知识点,并采用结合C语言的方式来讨论汇编代码;第2章讨论UCC编译器的词法分析、内存管理、符号表管理和类型系统等基本模块;第3章介绍UCC编译器的语法分析,采用的是手工打造分析器的技术路线;第4章介绍语义检查,通过本章的学习,有助于C程序员站在编译器的角度来深入理解C语言的语义规则;第5章分析UCC编译器的中间代码生成及优化;第6章介绍如何生成32位的x86汇编代码。
本书不仅是很好的编译原理和编译器设计教材,也可作为读者深入学习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
4.1结构化设计方法概述94
4.2面向数据流的设计方法95
4.2.1层次图和结构图95
4.2.2变换分析法97
4.2.3事务分析法101
4.2.4混合分析法102
4.3面向数据的设计方法103
4.3.1Jackson图103
4.3.2Jackson系统开发方法104
4.4案例简历自动获取和查询系统的数据流设计方法107
4.4.1用变换分析法进行设计107
4.4.2用事务分析法进行设计108
4.4.3两种方法的比较109
4.5结构化详细设计的工具110
4.5.1程序流程图110
4.5.2盒图(NS图)111
4.5.3问题分析图(PAD图)112
4.5.4判定树114
4.5.5判定表114
4.5.6详细设计工具的比较115
4.6本章小结116
习题117
第5章软件实现119
5.1程序设计语言119
5.1.1程序设计语言的分类119
5.1.2程序设计语言的特性120
5.1.3选择程序设计语言121
5.2程序设计风格123
5.2.1程序编排和组织的准则123
5.2.2程序设计的效率127
5.3代码复用128
5.4代码评审130
5.5本章小结133
习题134
第6章软件测试137
6.1软件测试基础137
6.1.1软件测试概念137
6.1.2软件测试过程模型138
6.1.3软件测试原则140
6.1.4软件测试在软件开发各阶段的工作流程142
6.1.5软件测试信息流144
6.1.6软件测试技术分类144
6.2白盒测试146
6.2.1逻辑覆盖146
6.2.2循环测试149
6.2.3路径测试150
6.3黑盒测试153
6.3.1等价类划分153
6.3.2边界值分析155
6.3.3错误推测法155
6.3.4因果图法156
6.4白盒测试和黑盒测试的比较158
6.5软件测设策略159
6.5.1单元测试159
6.5.2集成测试162
6.5.3确认测试165
6.5.4系统测试166
6.6调试168
6.6.1软件调试过程168
6.6.2软件调试方法169
6.7软件测试报告170
6.7.1软件测试说明170
6.7.2软件测试报告171
6.8本章小结172
习题173
第7章UML统一建模语言175
7.1UML的发展175
7.1.1UML的产生175
7.1.2UML的构成176
7.1.3UML的特点177
7.2面向对象的基本概念177
7.3UML视图183
7.4UML的图和模型元素184
7.4.1用例图184
7.4.2类图186
7.4.3包图187
7.4.4状态图188
7.4.5活动图188
7.4.6顺序图190
7.4.7协作图191
7.4.8构件图192
7.4.9配置图193
7.5UML的关系193
7.5.1关联关系194
7.5.2泛化关系197
7.5.3依赖关系200
7.5.4实现关系201
7.6UML的通用机制201
7.6.1修饰202
7.6.2注释202
7.6.3规格说明202
7.6.4扩展机制203
7.7基于UML的软件过程204
7.8本章小结206
习题207
第8章面向对象分析208
8.1面向对象分析概述208
8.1.1传统软件过程中的不足208
8.1.2面向对象的特点209
8.1.3面向对象分析的基本过程210
8.1.4面向对象分析的3类模型210
8.1.5静态模型的5个层次211
8.2建立功能模型(用例模型)212
8.2.1识别参与者213
8.2.2识别用例213
8.2.3识别用例间关系215
8.2.4用例描述文档216
8.3建立静态模型(对象模型)217
8.3.1识别类与对象217
8.3.2划分主题219
8.3.3确定结构220
8.3.4确定属性221
8.3.5确定服务222
8.3.6类图描述文档222
8.3.7包图描述文档223
8.4建立动态模型224
8.4.1建立顺序图及其描述文档224
8.4.2建立状态图及其描述文档226
8.4.3建立协作图及其描述文档227
8.4.4建立活动图及其描述文档228
8.5本章小结230
习题230
第9章面向对象设计232
9.1面向对象设计概述232
9.1.1面向对象分析与设计的关系232
9.1.2面向对象设计原则233
9.2精化类及类间关系234
9.2.1设计类的属性234
9.2.2设计类的方法235
9.2.3设计类间泛化关系236
9.2.4设计关联类237
9.3数据设计238
9.3.1基于关系数据库的数据设计238
9.3.2基于其他方式的数据设计240
9.4人机交互设计241
9.5建立实现模型242
9.5.1构件图及其描述文档242
9.5.2配置图及其描述文档244
9.6设计模式简介245
9.6.1概述245
9.6.2Singleton模式246
9.6.3Abstract Factory模式248
9.6.4Mediator模式250
9.6.5Adapter模式252
9.6.6Iterator模式254
9.6.7State模式257
9.7面向对象的测试259
9.7.1面向对象测试概述259
9.7.2面向对象的单元测试260
9.8本章小结262
习题263
第10章软件维护266
10.1软件维护概述266
10.1.1软件维护的任务266
10.1.2软件维护的特点267
10.1.3软件维护的分类267
10.2软件维护过程268
10.2.1软件维护方式269
10.2.2软件维护管理的基本内容270
10.2.3维护中存在的问题274
10.2.4维护活动记录275
10.3软件的可维护性276
10.3.1可维护性因素276
10.3.2提高软件的可维护性277
10.4逆向工程279
10.5本章小结281
习题282
第11章软件项目管理283
11.1软件项目管理概述283
11.1.1软件项目管理的特点和内容283
11.1.2软件项目管理目标284
11.1.3软件项目管理的4P观点285
11.2软件项目规模度量286
11.2.1代码行技术287
11.2.2功能点计算288
11.2.3代码行与功能点间的转换291
11.3软件项目估算292
11.3.1代码行和功能点的其他估算模型292
11.3.2专家估算模型292
11.3.3Putnam模型293
11.3.4COCOMO模型293
11.3.5项目估算模型的小结296
11.4项目进度管理296
11.4.1项目进度控制296
11.4.2甘特图297
11.4.3工程网络图298
11.5项目风险管理299
11.5.1软件风险概念300
11.5.2风险管理过程300
11.6项目质量管理303
11.6.1软件质量因素304
11.6.2软件质量保证活动308
11.6.3软件质量保证计划309
11.7软件配置管理310
11.7.1软件配置项311
11.7.2配置管理过程311
11.7.3软件配置管理计划314
11.8项目人员组织管理316
11.8.1团队组织316
11.8.2团队组织方式316
11.9软件能力成熟度模型318
11.9.1基本概念318
11.9.2软件能力成熟度模型等级320
11.9.3关键过程域320
11.10本章小结321
习题322
参考文献324
|
|