图书介绍

编译程序设计原理 第2版PDF|Epub|txt|kindle电子书版本网盘下载

编译程序设计原理 第2版
  • 金成植,金英编著 著
  • 出版社: 北京:高等教育出版社
  • ISBN:7040207702
  • 出版时间:2007
  • 标注页数:474页
  • 文件大小:26MB
  • 文件页数:488页
  • 主题词:编译程序-程序设计-高等学校-教材

PDF下载


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

下载说明

编译程序设计原理 第2版PDF格式电子书版下载

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

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

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

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

图书目录

第1章 编译器概述1

1.1 为什么要学习编译技术1

1.2 编译器和解释器1

1.3 编译器的功能分解和组织结构3

1.4 编译器的伙伴4

1.5 编译器的复杂性5

1.6 编译器的设计与实现6

1.7 编译器的测试与维护7

第2章 一个微型编译器9

2.1 基础知识9

2.2 ToyL语言13

2.3 ToyL语言词法分析器13

2.4 ToyL语言语法分析器18

2.5 ToyL语言解释器19

2.6 ToyL语言编译器24

第3章 有穷自动机与词法分析29

3.1 词法分析基础29

3.1.1 词法分析器的功能29

3.1.2 单词识别31

3.1.3 词法分析的复杂性31

3.1.4 字符串32

3.1.5 保留字处理32

3.1.6 空格符、回车符、换行符33

3.1.7 括号类配对预检34

3.1.8 词法错误修正34

3.1.9 词法分析独立化的意义35

3.2 有穷自动机36

3.2.1 确定有穷自动机的定义36

3.2.2 确定有穷自动机的实现38

3.2.3 非确定有穷自动机40

3.2.4 NFA到DFA的转换40

3.2.5 确定有穷自动机的极小化43

3.2.6 自动机状态转换表的实现44

3.3 正则表达式46

3.3.1 正则符号串集46

3.3.2 正则表达式的定义47

3.3.3 正则表达式的局限性49

3.3.4 正则定义49

3.3.5 正则表达式到有穷自动机的转换50

3.4 词法分析器的构造54

3.4.1 用DFA人工构造词法分析器55

3.4.2 词法分析器的生成器Lex58

练习60

第4章 文法与语法分析63

4.1 语法分析63

4.1.1 语法分析器的输入63

4.1.2 语法分析的任务63

4.1.3 语法分析方法分类64

4.2 文法和文法分析64

4.2.1 上下文无关文法和语言64

4.2.2 最左推导和最右推导69

4.2.3 语法分析树与二义性70

4.2.4 文法分析算法72

4.2.5 自顶向下方法概述76

4.2.6 自底向上方法概述79

4.3 递归下降法——自顶向下分析80

4.3.1 递归下降法原理80

4.3.2 消除公共前缀85

4.3.3 代入86

4.3.4 消除左递归87

4.4 LL分析方法——自顶向下分析89

4.4.1 LL(1)文法89

4.4.2 LL(1)分析表91

4.4.3 LL(1)分析的驱动器93

4.4.4 LL(1)中的If-Then-Else问题94

4.4.5 LL(1)分析器的自动生成器LLGen96

4.4.6 LL(1)分析法与递归下降法的比较97

4.4.7 正则文法99

4.5 LR方法——自底向上分析101

4.5.1 句柄102

4.5.2 活前缀103

4.5.3 归约活前缀识别器——LR(0)自动机105

4.5.4 LR(0)文法及其分析算法115

4.5.5 SLR(1)文法及其分析算法118

4.5.6 LR(1)文法123

4.5.7 LALR(1)文法127

4.5.8 二义性文法的处理133

4.5.9 另一种Shift-Reduce分析技术:简单优先法134

4.5.10 LL(1)和LALR(1)方法比较137

4.6 LR分析器的生成器138

4.6.1 LALR分析器的生成器YACC138

4.6.2 LALR分析器的生成器LALRGen139

4.7 语法错误处理139

4.7.1 错误恢复和修复139

4.7.2 递归下降分析的错误恢复141

4.7.3 LL分析的错误恢复143

4.7.4 LR分析的错误恢复144

练习145

第5章 语义分析150

5.1 语义分析基础150

5.1.1 语义分析内容150

5.1.2 标识符信息的内部表示151

5.1.3 类型信息的内部表示155

5.1.4 运行时值的表示159

5.2 符号表160

5.2.1 符号表查找技术160

5.2.2 符号表的局部化164

5.2.3 二叉式局部符号表165

5.2.4 散列式全局符号表167

5.2.5 嵌套式全局符号表168

5.2.6 符号表界面函数169

5.3 类型分析170

5.3.1 类型的等价性和相容性170

5.3.2 类型分析的总控算法171

5.3.3 类型名分析172

5.3.4 枚举类型分析173

5.3.5 数组类型分析174

5.3.6 记录类型分析175

5.3.7 联合类型分析177

5.3.8 指针类型分析178

5.3.9 递归类型分析179

5.4 声明的语义分析180

5.4.1 声明的语法结构180

5.4.2 标号声明部分的语义分析181

5.4.3 常量声明部分的语义分析182

5.4.4 类型声明部分的语义分析184

5.4.5 变量声明部分的语义分析186

5.4.6 过程、函数声明的语义分析189

5.5 执行体的语义分析196

5.5.1 执行体的语义分析196

5.5.2 带标号语句和转向语句的语义分析197

5.5.3 赋值语句的语义分析199

5.5.4 条件语句的语义分析200

5.5.5 while循环语句的语义分析200

5.5.6 for循环语句的语义分析201

5.5.7 过程调用语句的语义分析201

5.5.8 表达式的语义分析204

5.5.9 变量的语义分析206

练习208

第6章 运行时的存储环境210

6.1 运行时的存储空间结构与分配210

6.1.1 运行时的存储空间基本结构210

6.1.2 静态区的存储分配210

6.1.3 栈区的存储分配211

6.1.4 堆区的存储分配212

6.1.5 堆区空间管理214

6.2 过程活动记录与栈区组织结构215

6.2.1 过程活动记录216

6.2.2 活动记录的填写218

6.2.3 栈区组织结构——AR链219

6.3 运行时的变量访问环境219

6.3.1 可访问活动记录220

6.3.2 局部Display表方法221

6.3.3 静态链方法222

6.3.4 全局Display表方法和寄存器方法224

6.3.5 无嵌套时的AR及访问环境226

6.4 分程序和动态数组空间226

6.4.1 无动态数组时的分程序空间227

6.4.2 动态数组空间230

练习236

第7章 面向语法的语义描述237

7.1 动作文法237

7.1.1 动作文法定义237

7.1.2 动作文法的递归实现239

7.1.3 动作文法的LL实现240

7.1.4 动作文法的LR实现241

7.2 动作文法应用246

7.2.1 用动作文法描述表达式计算246

7.2.2 用动作文法描述表达式抽象树的构造248

7.2.3 用动作文法描述语句抽象树的构造250

7.3 抽象动作文法及其应用252

7.3.1 抽象变量252

7.3.2 抽象动作文法253

7.3.3 栈式LL动作文法驱动器254

7.3.4 抽象动作文法到栈式LL动作文法的转换255

7.3.5 栈式LR动作文法驱动器256

7.3.6 抽象动作文法到栈式LR动作文法的转换259

7.4 属性文法260

7.4.1 属性文法定义260

7.4.2 属性语法树和属性依赖图263

7.4.3 计算顺序265

7.4.4 属性值的计算方法266

7.4.5 拷贝型属性文法268

7.5 属性文法在编译器设计中的应用269

7.5.1 类型树的属性文法描述269

7.5.2 表达式中间代码的属性文法描述272

7.5.3 变量中间代码的属性文法描述273

7.5.4 语句中间代码的属性文法描述276

7.5.5 正则表达式到自动机转换的属性文法描述278

7.6 S-属性文法及其属性计算279

7.6.1 S-属性文法279

7.6.2 S-属性文法的递归实现279

7.6.3 S-属性文法的LR实现281

7.7 L-属性文法及其属性计算282

7.7.1 L-属性文法282

7.7.2 L-属性文法的递归实现283

7.7.3 L-属性文法的LR(1)实现284

7.8 语义分析器的自动生成系统287

7.8.1 YACC287

7.8.2 LALRGen291

7.8.3 Accent系统294

练习297

第8章 中间代码生成299

8.1 中间代码299

8.1.1 中间代码的种类299

8.1.2 后缀式中间代码300

8.1.3 三地址中间代码301

8.1.4 抽象语法树和无环有向图303

8.1.5 多元式中间代码304

8.1.6 中间代码分量ARG结构305

8.2 表达式的中间代码生成309

8.2.1 表达式的语义信息309

8.2.2 表达式的中间代码309

8.2.3 变量的中间代码311

8.2.4 表达式的中间代码生成314

8.2.5 变量的中间代码生成318

8.2.6 布尔表达式的短路中间代码319

8.3 原子语句的中间代码生成321

8.3.1 输入/输出语句的中间代码生成321

8.3.2 goto语句和标号定位语句的中间代码生成322

8.3.3 return语句的中间代码生成322

8.3.4 赋值语句的中间代码生成323

8.3.5 函数(过程)调用的中间代码生成324

8.4 结构语句的中间代码生成333

8.4.1 条件语句的中间代码生成333

8.4.2 while语句的中间代码生成336

8.4.3 repeat语句的中间代码生成337

8.4.4 for语句的中间代码生成338

8.4.5 case语句的中间代码生成340

8.4.6 函数声明的中间代码生成343

练习345

第9章 中间代码优化347

9.1 引言347

9.1.1 优化的目标和要求347

9.1.2 优化的必要性347

9.1.3 优化的内容348

9.1.4 局部优化和全局优化350

9.1.5 基本块和程序流图350

9.2 常表达式优化352

9.2.1 常表达式的局部优化352

9.2.2 基于常量定值分析的常表达式全局优化353

9.2.3 常量定值分析353

9.3 公共表达式优化359

9.3.1 基于相似性的公共表达式局部优化359

9.3.2 基于值编码的公共表达式局部优化361

9.3.3 基于活跃代码分析的公共表达式全局优化365

9.3.4 活跃运算代码分析366

9.4 程序流图循环369

9.4.1 循环的基本概念369

9.4.2 支撑结点372

9.4.3 自然循环374

9.4.4 可归约程序流图376

9.4.5 基于文本的循环及其处理377

9.5 循环不变代码外提379

9.5.1 代码外提的基本概念379

9.5.2 循环不变代码的判定380

9.5.3 循环不变代码外提的条件381

9.5.4 基于文本循环和定值表的不变代码外提382

9.5.5 一种简单的外提优化方案386

9.5.6 别名分析387

9.5.7 过程与函数的副作用分析390

9.6 循环内归纳表达式的优化393

9.6.1 归纳变量393

9.6.2 归纳变量计算的优化算法原理395

练习397

第10章 目标代码生成400

10.1 目标代码400

10.1.1 虚拟机代码400

10.1.2 目标机代码400

10.1.3 窥孔优化403

10.2 临时变量403

10.2.1 临时变量的特点404

10.2.2 临时变量的存储空间404

10.2.3 临时变量的存储分配405

10.2.4 变量状态描述406

10.3 寄存器407

10.3.1 寄存器分类及其使用准则407

10.3.2 寄存器分配单位408

10.3.3 寄存器状态描述409

10.3.4 寄存器分配算法410

10.4 基于三地址中间代码的目标代码生成412

10.4.1 目标地址生成412

10.4.2 间接目标地址的转换413

10.4.3 表达式中间代码的目标代码生成414

10.4.4 赋值中间代码的目标代码生成421

10.4.5 其他寄存器分配法422

10.4.6 标号和goto语句中间代码的目标代码生成424

10.4.7 return中间代码的目标代码生成426

10.4.8 变量中间代码的目标代码生成426

10.4.9 函数调用中间代码的目标代码生成428

10.5 基于AST的代码生成435

10.5.1 三地址中间代码到AST的转换435

10.5.2 标记需用寄存器个数436

10.5.3 从带寄存器个数标记的AST生成代码437

10.6 基于DAG的代码生成438

10.6.1 从AST到DAG的转换438

10.6.2 DAG排序和虚寄存器440

10.6.3 从带序号和虚寄存器标记的DAG生成代码442

10.7 代码生成器的自动生成443

10.7.1 代码生成器的自动化443

10.7.2 基于指令模板匹配的代码生成技术444

10.7.3 基于语法分析的代码生成技术446

练习448

第11章 对象式语言的实现451

11.1 引言451

11.2 SOOL语法451

11.2.1 程序451

11.2.2 分程序452

11.2.3 类声明452

11.2.4 类型453

11.2.5 变量声明453

11.2.6 函数声明和方法声明453

11.2.7 语句454

11.2.8 变量454

11.2.9 表达式454

11.2.10 程序示例455

11.3 SOOL语义457

11.3.1 声明的作用域457

11.3.2 Class声明的语义457

11.3.3 语句的语义458

11.4 SOOL语义分析459

11.4.1 标识符的符号表项459

11.4.2 符号表结构460

11.4.3 符号表的局部化462

11.5 SOOL目标代码462

11.5.1 对象空间463

11.5.2 当前对象——self463

11.5.3 活动记录464

11.5.4 成员变量的目标地址465

11.5.5 表达式的目标代码465

11.5.6 Offset原理466

11.5.7 类的多态性467

11.5.8 目标代码区468

11.5.9 方法的动态绑定468

11.5.10 快速动态绑定目标代码471

主要参考文献473

热门推荐