图书介绍

编译器构造 C语言描述PDF|Epub|txt|kindle电子书版本网盘下载

编译器构造 C语言描述
  • (美)Charles N. Fischer,(美)Richard J. LeBlanc,Jr.著;郑启龙,姚震译 著
  • 出版社: 北京:机械工业出版社
  • ISBN:7111164741
  • 出版时间:2005
  • 标注页数:531页
  • 文件大小:27MB
  • 文件页数:548页
  • 主题词:编译码器-C语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

编译器构造 C语言描述PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

出版者的话1

专家指导委员会1

译者序1

前言1

第1章 绪论1

1.1 概述和历史1

目录1

1.2 编译器可以做什么2

1.3 编译器结构5

1.4 程序设计语言的语法和语义8

1.5 编译器设计与程序设计语言设计10

1.6 编译器分类11

1.7 影响编译器设计的因素12

练习13

2.1 Micro编译器结构15

2.2 Micro词法分析器15

第2章 一个简单编译器15

2.3 Micro语法19

2.4 递归下降语法分析21

2.5 翻译Micro25

2.5.1 目标语言25

2.5.2 临时变量25

2.5.3 动作符号25

2.5.4 语义信息25

2.5.5 Micro动作符号26

练习31

第3章 词法分析——理论和实践33

3.1 概述33

3.2 正则表达式34

3.3 有限自动机和词法分析器35

3.4 使用词法分析器生成器38

3.4.1 ScanGen38

3.4.2 Lex43

3.5.1 保留字45

3.5 实现时考虑的问题45

3.5.2 编译器指示与源程序行列表47

3.5.3 符号表中的标识符条目47

3.5.4 词法分析器的终止48

3.5.5 多字符的超前搜索48

3.5.6 词法错误恢复49

3.6 将正则表达式转换为有限自动机51

3.6.1 构造确定的有限自动机52

3.6.2 优化有限自动机54

练习55

第4章 文法和语法分析59

4.1 上下文无关文法:概念与记号59

4.2 上下文无关文法中的错误61

4.3 转换扩展BNF文法62

4.4 语法分析器与识别器63

4.5 文法分析算法64

练习69

5.1 LL(1)Predict函数71

第5章 LL(1)文法及分析器71

5.2 LL(1)分析表73

5.3 从LL(1)分析表构造递归下降分析器74

5.4 LL(1)分析器驱动程序77

5.5 LL(1)动作符号77

5.6 文法的LL(1)化78

5.7 LL(1)分析中的If-Then-Else问题81

5.8 LLGen—LL(1)语法分析器生成器82

5.9 LL(1)分析器的性质85

5.10 LL(k)分析85

练习87

第6章 LR分析89

6.1 移进-归约分析器89

6.2 LR分析器91

6.2.1 LR(0)分析92

6.2.2 如何判定LR(0)分析程序工作的正确性96

6.3 LR(1)分析98

6.3.1 LR(1)分析的正确性101

6.4 SLR(1)分析102

6.4.1 SLR(1)分析的正确性103

6.4.2 SLR(1)技术的局限性104

6.5 LALR(1)分析105

6.5.1 构造LALR(1)分析器108

6.5.2 LALR(1)分析的正确性112

6.6 在移进-归约分析器中调用语义例程113

6.7 使用语法分析器生成器114

6.7.1 LALRGen语法分析器生成器114

6.7.2 Yacc116

6.7.3 可控二义性的使用和误用117

6.8 优化分析表120

6.9 实用的LR(1)分析器123

6.10 LR分析的性质125

6.11 LL(1)和LALR(1)分析方法的比较125

6.12.1 扩展的超前搜索技术128

6.12.2 优先级技术128

6.12 其他的移进-归约技术128

6.12.3 一般的上下文无关分析器130

练习132

第7章 语义处理137

7.1 语法制导翻译137

7.1.1 使用分析的语法树表示137

7.1.2 编译器组织的候选形式138

7.1.3 一遍编译中的分析、检查和翻译142

7.2.2 LR分析器和动作符号143

7.2 语义处理技术143

7.2.1 LL分析器和动作符号143

7.2.3 语义记录表示144

7.2.4 实现动作控制的语义栈146

7.2.5 分析器控制的语义栈149

7.3 中间表示和代码生成155

7.3.1 比较中间表示和直接代码生成155

7.3.2 中间表示的形式155

练习157

7.3.3 一个元组语言157

第8章 符号表161

8.1 符号表接口161

8.2 基本实现技术162

8.2.1 二叉搜索树162

8.2.2 哈希表163

8.2.3 串空间数组164

8.3 块结构符号表165

8.4 块结构符号表的扩展169

8.4.1 域和记录169

8.4.2 导出规则170

8.4.3 导入规则174

8.4.4 可更改的搜索规则175

8.5 隐式声明177

8.6 重载177

8.7 前向引用178

练习180

8.8 小结180

第9章 运行时存储组织183

9.1 静态分配183

9.2 栈分配183

9.2.1 显示表185

9.2.2 块级与过程级活动记录187

9.3.1 无空间释放188

9.3.2 显式释放188

9.3 堆分配188

9.3.3 隐式释放189

9.3.4 管理堆空间190

9.4 内存中的程序布局191

9.5 静态链簇和动态链簇193

9.6 形式过程195

9.6.1 静态链簇196

9.6.2 显示表197

9.6.3 一些看法198

练习199

第10章 处理声明203

10.1 声明处理的基本原则203

10.1.1 符号表中的属性203

10.1.2 类型描述符结构204

10.1.3 语义栈中的列表结构205

10.2 简单声明的动作例程207

10.2.1 变量声明207

10.2.2 类型定义、声明和引用209

10.2.3 记录类型212

10.2.4 静态数组214

10.3 高级特性的动作例程216

10.3.1 变量和常量声明216

10.3.2 枚举类型218

10.3.3 子类型220

10.3.4 数组类型221

10.3.5 变体记录227

10.3.6 访问类型232

10.3.7 包233

10.3.8 attributes和semantics_record结构236

练习239

第11章 处理表达式和数据结构引用241

11.1 概述241

11.2 简单名字、表达式和数据结构的动作例程242

11.2.1 处理简单标识符和文字常量242

11.2.2 处理表达式243

11.2.3 简单的记录和数组引用246

11.2.4 记录和数组示例249

11.2.5 串250

11.3 高级特性的动作例程250

11.3.1 多维数组的组织和引用250

11.3.2 含动态对象的记录258

11.3.3 变体记录261

11.3.4 访问类型的引用262

11.3.5 Ada中其他名字的使用263

11.3.6 记录和数组聚合265

11.3.7 重载解析266

练习269

第12章 翻译控制结构271

12.1 if语句271

12.2 循环274

12.2.1 while循环274

12.2.2 for循环275

12.3 编译exit语句280

12.4 case语句282

12.5 编译goto语句287

12.6 异常处理290

12.7 短路计算布尔表达式294

12.7.1 单地址短路计算299

练习305

13.1 简单子程序309

13.1.1 声明无参子程序309

第13章 翻译过程和函数309

13.1.2 调用无参过程311

13.2 向子程序传递参数312

13.2.1 值、结果和值-结果参数313

13.2.2 引用和只读参数314

13.2.3 处理参数声明的语义例程314

13.3 处理子程序调用和参数表316

13.4.1 保存和恢复寄存器317

13.4 子程序调用317

13.4.2 子程序的入口和出口318

13.5 标号参数321

13.6 名字参数323

练习324

第14章 属性文法和多遍翻译327

14.1 属性文法327

14.1.1 简单赋值形式和动作符号329

14.1.2 树遍历的属性计算程序331

14.1.3 直接属性计算程序335

14.1.4 属性文法示例340

14.2 树结构的中间表示342

14.2.1 抽象语法树接口343

14.2.2 语法树抽象接口344

14.2.3 实现树348

练习349

第15章 代码生成和局部代码优化351

15.1 概述351

15.2 寄存器和临时变量管理352

15.2.1 临时变量的分类353

15.2.2 分配和释放临时变量353

15.3 简单的代码生成器354

15.4 解释性代码生成356

15.4.1 优化地址计算357

15.4.2 避免冗余计算359

15.4.3 寄存器追踪361

15.5 窥孔优化367

15.6 从树结构生成代码368

15.7 从dag生成代码371

15.7.1 别名376

15.8 代码生成器的生成器377

15.8.1 基于文法的代码生成器380

15.8.2 在代码生成器中使用语义属性382

15.8.3 生成窥孔优化器385

15.8.4 基于树重写的代码生成器的生成器387

练习387

第16章 全局优化393

16.1 概述——目标与限制393

16.1.1 理想的优化编译器结构394

16.1.2 优化展望397

16.2 优化子程序调用397

16.2.1 子程序调用的内联展开397

16.2.2 优化对封闭子例程的调用399

16.2.3 过程间数据流分析402

16.3.1 外提循环不变式406

16.3 循环优化406

16.3.2 循环中强度削弱409

16.4 全局数据流分析411

16.4.1 单路径流分析411

16.4.2 全路径流分析415

16.4.3 数据流问题的分类416

16.4.4 其他重要的数据流问题416

16.4.5 使用数据流信息的全局优化418

16.4.6 求解数据流方程422

16.5 集成优化技术430

练习431

第17章 现实世界中的语法分析437

17.1 压缩表437

17.1.1 压缩LL(1)分析表439

17.2 语法错误的恢复与修复440

17.2.1 即时错误检测442

17.2.2 递归下降分析器中的错误恢复443

17.2.3 LL(1)分析器中的错误恢复445

17.2.4 FMQ LL(1)错误修复算法446

17.2.5 在FMQ修复算法中添加删除操作449

17.2.6 FMQ算法的扩展450

17.2.7 利用LLGen进行错误修复454

17.2.8 LR错误恢复455

17.2.9 Yacc中的错误恢复455

17.2.10 自动生成的LR修复技术456

17.2.12 其他LR错误修复技术462

17.2.11 利用LALRGen进行错误修复462

练习463

附录A Ada/CS语言定义467

附录B ScanGen487

附录C LLGen用户手册493

附录D LALRGen用户手册499

附录E LLGen和LALRGen错误修复特性507

附录F 编译器开发实用工具511

参考文献517

索引523

热门推荐