书籍详情

编译技术与应用(微课视频版 题库版)

编译技术与应用(微课视频版 题库版)

作者:杨金民,陈果,黎文伟

出版社:清华大学出版社

出版时间:2023-04-01

ISBN:9787302631057

定价:¥69.00

购买这本书可以去
内容简介
  本书以全新的视角透视编译技术,围绕编译中的词法分析、语法分析、语法制导的翻译、语义分析和中间代码生成、运行环境和目标代码生成、代码优化这6个核心问题展开,共分7章。本书重点针对编译器构造方法学展开分析和论述,以揭示编译技术的内涵,展示其优美性和艺术性。本书也探索技术演进背后的动因,追踪业界**技术及其发展趋势,帮助读者灵活应对IT技术发展与变迁所带来的挑战。本书内容新颖、通俗易懂,特别适合作为高等院校计算机及相关专业的教材,也可以作为工程技术培训的教材。本书也非常适合科研人员和工程技术人员阅读,从中感悟编译技术的内涵,体会其精妙之处。
作者简介
  杨金民,男,湖南宁乡人。1990年在国防科技大学本科毕业后,先后在空军飞机修理厂从事飞机修理工作,在电力公司任IT高级工程师。2004年在湖南大学获得计算机应用博士学位后留校任教,主讲数据库系统,编译技术,软件集成等课程。2005年被评为湖南省青年骨干教师培养对象;2007年在加拿大Victoria大学做博士后一年。2011年被推选为湖南大学“我心目中最敬爱的老师”候选人,2015年在美国Illinios做访问学者半年。现为湖南大学信息科学与构成学院教授。是HPCC19,IEEEMAW13、PACRIM11、DMIR10、PRDC05国际会议的程序委员会成员,China HPC专委会成员。先后发表论文30多篇,获得省部级科技进步奖四次,专利两项。
目录

第1章编译技术概述1

1.1计算模型和机器语言的特性2

1.2高级程序语言及其特性4

1.3编译方法及过程6

1.3.1源程序的构成特性6

1.3.2编译过程7

1.3.3编译器的结构特性12

1.4编译器构造方法学13

1.5编译前对源程序文本的预处理15

1.6程序调试17

1.7编译执行和解释执行18

1.8编译方式的演进20

1.9虚拟机22

1.10程序语言的发展历程23

1.11当前主流的编译器产品24

1.12编译知识的广泛应用25

1.13本章小结26

知识拓展: 别名的概述26

习题28

第2章词法分析29

2.1高级程序语言的词构成特性29

2.2词法的描述31

2.2.1正则语言和正则运算31

2.2.2C语言词法的正则描述33

2.2.3词法分析的实现框架34

2.2.4正则表达式的含义35

2.3基于状态转换图的词法分析36

2.3.1基于状态转换图的匹配判断36

2.3.2状态转换图的特征37

2.3.3基于状态转换图的通用词法分析器39

2.4正则表达式的状态转换图自动生成方法40

2.4.1正则表达式的NFA原生构造方法41

2.4.2基于NFA的匹配判断算法44

2.4.3基于NFA的DFA构造方法46

2.4.4正则表达式的最简NFA构造法49

2.4.5特殊正则表达式的最简NFA构造54

2.4.6NFA和DFA中状态属性值的确定方法56

2.4.7正则表达式之间的包含关系58

2.5正则表达式及其DFA在文本搜索中的应用61

2.6本章小结62

知识拓展: NFA和DFA构造中涉及的数据结构63

习题65

◆编译技术与应用(微课视频版·题库版)目录◆第3章语法分析67

3.1程序的树结构特性68

3.2语言的语法描述69

3.3词串的语法分析树及其构造策略73

3.4语法描述和词法描述的比较75

3.5自顶向下和最左推导的语法分析78

3.5.1自顶向下和最左推导的语法分析过程78

3.5.2左递归及其消除方法80

3.5.3左公因子及其提取方法83

3.5.4推导中的产生式选择84

3.5.5FIRST和FOLLOW函数值求解算法87

3.5.6LL(1)文法特性及其语法分析表93

3.5.7二义性文法的可改造性94

3.5.8基于LL(1)语法分析表和符号栈的语法分析器通用代码95

3.6自底向上的语法分析98

3.6.1自底向上的语法分析及有待解决的关键问题99

3.6.2文法的DFA构造方法100

3.6.3基于状态栈和文法DFA的LR语法分析104

3.6.4基于FOLLOW函数值的冲突解决方法107

3.6.5基于语法分析表的LR语法分析通用代码108

3.6.6基于FOLLOW精确化的冲突解决方法112

3.7LL语法分析和LR语法分析的对比116

3.8LR文法设计116

3.8.1DFA物理含义的挖掘和应用117

3.8.2尽量减少文法中的非终结符数量119

3.8.3非终结符语义的宽泛化121

3.8.4文法的二义性及其消除方法124

3.8.5LALR(1)型DFA的收益和代价124

3.8.6文法的上下文无关性126

3.9LR语法分析中错误的恢复127

3.10本章小结129

知识拓展: 语法分析表构造中涉及的数据结构130

习题132

第4章语法制导的翻译135

4.1LR分析中的语法制导翻译136

4.1.1LR分析中的语法制导翻译简介136

4.1.2LR分析中语法制导的翻译实现框架139

4.1.3词法分析器构造工具的实现142

4.2LL分析中语法制导的翻译149

4.2.1LL分析中语法制导的翻译简介149

4.2.2LL分析中语法制导的翻译实现框架150

4.3从LR型SDT得出LL型SDT156

4.4LR语法分析中对继承属性的处理158

4.5本章小结161

习题162

第5章语义分析与中间代码生成164

5.1语义分析和中间代码生成简介165

5.1.1程序的层级结构165

5.1.2类型的语义分析167

5.1.3变量的语义分析170

5.1.4函数的语义分析173

5.1.5中间语言简介174

5.1.6中间代码生成简介176

5.2类型和变量的语义分析框架179

5.3类型和变量定义的SDT设计180

5.3.1高级程序语言中的指针语义180

5.3.2类型和变量定义的文法设计182

5.3.3类型和变量定义的语义分析及其SDD设计183

5.3.4类型和变量定义的语义分析SDT设计185

5.4变量使用的SDT设计190

5.4.1变量地址的确定方法190

5.4.2描述变量使用的文法192

5.4.3变量使用的语义分析和中间代码生成SDD设计194

5.4.4变量使用的语义分析和中间代码生成SDT设计197

5.5运算的语义分析和中间代码生成201

5.6类型系统205

5.7分支语句的中间代码生成206

5.7.1分支语句的文法207

5.7.2分支语句的中间代码生成SDD设计209

5.7.3分支语句的中间代码生成SDT设计212

5.7.4分支语句中break和continue语句的处理217

5.8函数调用的语义分析和中间代码生成218

5.9本章小结219

习题220

第6章运行环境和目标代码生成222

6.1函数调用223

6.1.1局部变量的静态存储分配方案224

6.1.2局部变量的动态存储分配方案225

6.1.3相对寻址方式带来的好处228

6.1.4形参和数组的动态性229

6.2软件集成230

6.2.1源代码级的软件集成231

6.2.2二进制可执行文件级的软件集成233

6.2.3跨模块内存访问带来的问题及解决方法235

6.2.4静态链接与动态链接237

6.3软件调试238

6.3.1程序之间的交互238

6.3.2运行环境的构建239

6.3.3调试器与被调程序之间的协同交互241

6.3.4变量值的获取与关联243

6.4垃圾自动回收245

6.4.1基于引用记数的垃圾回收方法246

6.4.2基于定期识别和清扫的垃圾回收方法247

6.4.3基于程序分析的垃圾识别和清除249

6.5异常处理250

6.6面向对象中的多态252

6.6.1面向对象编程问题的揭示253

6.6.2基于代理的解耦和封装实现方案255

6.6.3基于多态的面向对象编程问题解决方案256

6.6.4接口特性259

6.6.5接口获取259

6.7本章小结260

习题262

第7章代码优化264

7.1中间代码的优化265

7.1.1基本块和流图265

7.1.2中间代码优化途径267

7.2目标代码优化基础270

7.2.1计算机特性270

7.2.2目标语言272

7.2.3目标代码生成与优化275

7.3寄存器分配276

7.3.1活变量标识算法276

7.3.2基于图着色的寄存器分配278

7.3.3变量溢出280

7.3.4内存数据的加载和刷新281

7.3.5寄存器腾空和变量溢出283

7.3.6同步函数和异步函数284

7.4基于机器其他特性的代码优化285

7.4.1基于指令流水线处理的代码优化285

7.4.2基于高速缓存的代码优化286

7.4.3基于多核处理器的代码优化287

7.4.4大数据处理和云计算中的优化288

7.5本章小结289

习题289

参考文献291


猜您喜欢

读书导航