当前位置:首页 > 工业技术
编译原理与技术

编译原理与技术PDF格式文档图书下载

工业技术

  • 购买点数:14
  • 作 者:李文生编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2016
  • ISBN:9787302441410
  • 标注页数:416 页
  • PDF页数:433 页
图书介绍:本教材系统介绍编译程序的设计原理和基本实现技术,主要内容包括词法分析、语法分析、语义分析、中间代码生成、代码生成和代码优化等,此外,还重点讲解用于实现语义分析和中间代码生成的语法制导翻译技术,以及程序运行时存储空间的组织与管理。在介绍基本理论和方法的同时,注重实际应用,介绍LEX和YACC的使用方法,剖析PL/0语言的编译程序,配合理论教学,设计了一些实践题目,旨在培训学生的工程实践能力。

查看更多关于编译原理与技术的内容

图书介绍

第1章 编译概述 1

1.1 翻译和解释 1

1.1.1 程序设计语言 1

1.1.2 翻译程序 2

1.2 编译的阶段和任务 4

1.2.1 分析阶段 4

1.2.2 综合阶段 7

1.2.3 符号表管理 10

1.2.4 错误处理 10

1.3 和编译有关的其他概念 11

1.3.1 编译的前端和后端 11

1.3.2 “遍”的概念 11

1.4 编译程序的伙伴工具 13

1.4.1 预处理器 14

1.4.2 汇编程序 14

1.4.3 连接装配程序 16

1.5 编译原理的应用 16

习题1 18

第2章 形式语言与自动机基础 19

2.1 语言和文法 19

2.1.1 字母表和符号串 19

2.1.2 语言 20

2.1.3 文法及其形式定义 21

2.1.4 推导和短语 23

2.1.5 分析树及二义性 25

2.1.6 文法变换 27

2.2 有限自动机 31

2.2.1 确定的有限自动机 32

2.2.2 非确定的有限自动机 34

2.2.3 具有ε-转移的非确定的有限自动机 36

2.2.4 DFA的化简 40

2.3 正规文法与有限自动机的等价性 42

2.4 正规表达式与有限自动机的等价性 45

2.5 正规表达式与正规文法的等价性 48

2.5.1 正规定义式 48

2.5.2 表示的缩写 49

2.5.3 正规表达式转换为等价的正规文法 50

习题2 51

第3章 词法分析 53

3.1 词法分析程序与语法分析程序的关系 53

3.2 词法分析程序的输入与输出 54

3.2.1 输入缓冲区 54

3.2.2 词法分析程序的输出 56

3.3 记号的描述和识别 57

3.3.1 词法与正规文法 58

3.3.2 记号的文法 58

3.3.3 状态转换图与记号的识别 61

3.4 词法分析程序的设计与实现 62

3.4.1 文法及状态转换图 63

3.4.2 词法分析程序的构造 65

3.4.3 词法分析程序的实现 65

3.5 LEX简介 71

3.5.1 LEX源程序的结构 71

3.5.2 LEX源程序举例 74

习题3 76

程序设计1 77

第4章 语法分析 78

4.1 语法分析简介 78

4.1.1 语法分析程序的地位 78

4.1.2 常用的语法分析方法 78

4.1.3 语法错误的处理 79

4.2 自顶向下分析方法 80

4.2.1 递归下降分析 81

4.2.2 递归调用预测分析 82

4.2.3 非递归预测分析 88

4.3 自底向上分析方法 95

4.3.1 规范归约 97

4.3.2 “移进-归约”方法的实现 98

4.4 LR分析方法 100

4.4.1 LR分析程序的模型及工作过程 100

4.4.2 SLR(1)分析表的构造 104

4.4.3 LR(1)分析表的构造 112

4.4.4 LALR(1)分析表的构造 119

4.4.5 LR分析方法对二义文法的应用 124

4.4.6 LR分析的错误处理与恢复 129

4.5 软件工具YACC 131

4.5.1 YACC源程序 132

4.5.2 YACC对二义文法的处理 134

4.5.3 用LEX建立YACC的词法分析程序 136

习题4 137

程序设计2 141

第5章 语法制导翻译技术 142

5.1 语法制导定义及翻译方案 143

5.1.1 语法制导定义 143

5.1.2 依赖图 146

5.1.3 计算次序 147

5.1.4 S属性定义及L属性定义 148

5.1.5 翻译方案 149

5.2 S属性定义的自底向上翻译 151

5.2.1 为表达式构造语法树的语法制导定义 151

5.2.2 S属性定义的自底向上翻译 155

5.3 L属性定义的自顶向下翻译 158

5.3.1 消除翻译方案中的左递归 158

5.3.2 预测翻译程序的设计 162

5.4 L属性定义的自底向上翻译 165

5.4.1 移走翻译方案中嵌入的语义规则 166

5.4.2 直接使用分析栈中的继承属性 166

5.4.3 变换继承属性的计算规则 169

5.4.4 改写语法制导定义为S属性定义 172

5.5 通用的语法制导翻译方法 173

习题5 176

第6章 语义分析 180

6.1 语义分析概述 180

6.1.1 语义分析的任务 180

6.1.2 语义分析程序的位置 181

6.1.3 错误处理 181

6.2 符号表 182

6.2.1 符号表的建立和访问时机 182

6.2.2 符号表内容 184

6.2.3 符号表操作 187

6.2.4 符号表组织 189

6.3 类型检查 193

6.3.1 类型表达式 194

6.3.2 类型等价 197

6.4 一个简单的类型检查程序 204

6.4.1 语言说明 204

6.4.2 符号表的建立 205

6.4.3 表达式的类型检查 210

6.4.4 语句的类型检查 213

6.4.5 类型转换 214

6.5 类型检查有关的其他主题 216

6.5.1 函数和运算符的重载 216

6.5.2 多态函数 217

习题6 220

程序设计3 223

第7章 运行环境 225

7.1 程序运行时的存储组织 225

7.1.1 程序运行空间的划分 226

7.1.2 活动记录与控制栈 227

7.1.3 名字的作用域及名字绑定 230

7.2 存储分配策略 231

7.2.1 静态存储分配 231

7.2.2 栈式存储分配 233

7.2.3 堆式存储分配 237

7.3 非局部名字的访问 239

7.3.1 程序块 239

7.3.2 静态作用域规则下非局部名字的访问 241

7.3.3 动态作用域规则下非局部名字的访问 248

7.4 参数传递机制 250

7.4.1 传值调用 250

7.4.2 引用调用 252

7.4.3 复制恢复 253

7.4.4 传名调用 255

习题7 255

第8章 中间代码生成 259

8.1 中间代码形式 259

8.1.1 图形表示 259

8.1.2 三地址代码 260

8.2 赋值语句的翻译 265

8.2.1 仅涉及简单变量的赋值语句的翻译 265

8.2.2 涉及数组元素的赋值语句 268

8.2.3 记录结构中域的访问 273

8.3 布尔表达式的翻译 274

8.3.1 翻译布尔表达式的方法 274

8.3.2 数值表示法 275

8.3.3 控制流表示法及回填技术 276

8.4 控制语句的翻译 282

8.5 goto语句的翻译 287

8.6 CASE语句的翻译 289

8.7 过程调用语句的翻译 292

习题8 294

第9章 目标代码生成 297

9.1 目标代码生成概述 297

9.1.1 代码生成程序的位置 297

9.1.2 代码生成程序设计的相关问题 298

9.2 基本块和流图 300

9.3 下次引用信息 302

9.4 一个简单的代码生成程序 305

9.4.1 目标机器描述 305

9.4.2 代码生成算法 307

9.4.3 其他常用语句的代码生成 312

习题9 315

第10章 代码优化 317

10.1 代码优化概述 317

10.1.1 代码优化程序的功能和位置 317

10.1.2 代码优化的主要种类 317

10.2 基本块优化 318

10.2.1 常数合并及常数传播 318

10.2.2 删除公共表达式 320

10.2.3 复制传播 321

10.2.4 削弱计算强度 321

10.2.5 改变计算次序 321

10.3 dag在基本块优化中的应用 322

10.3.1 基本块的dag表示 322

10.3.2 基本块的dag构造算法 323

10.3.3 dag的应用 327

10.3.4 dag构造算法的进一步讨论 330

10.4 循环优化 333

10.4.1 循环展开 333

10.4.2 代码外提 334

10.4.3 削弱计算强度 334

10.4.4 删除归纳变量 335

10.5 窥孔优化 337

10.5.1 删除冗余的传送指令 337

10.5.2 删除死代码 337

10.5.3 控制流优化 338

10.5.4 削弱计算强度及代数化简 338

习题10 339

第11章 面向对象的编译方法 341

11.1 面向对象语言的基本概念 341

11.1.1 类和对象 341

11.1.2 继承 343

11.1.3 信息封装 346

11.1.4 多态性 347

11.2 方法的编译 350

11.2.1 静态方法 350

11.2.2 动态方法 351

11.3 继承的编译 354

11.3.1 单一继承的编译 354

11.3.2 多继承的编译 355

11.4 程序运行环境 358

习题11 359

第12章 编译程序构造实践 360

12.1 编译程序的表示及实现方法 360

12.1.1 表示方法 360

12.1.2 实现语言 360

12.1.3 自展法 361

12.1.4 移植法 362

12.2 PL/0语言及其编译程序介绍 364

12.2.1 PL/0语言 365

12.2.2 PL/0编译程序的结构 368

12.2.3 PL/0编译程序的词法分析 369

12.2.4 PL/0编译程序的语法分析 371

12.2.5 PL/0编译程序的出错处理 373

12.2.6 PL/0编译程序的执行环境及代码生成 375

12.2.7 PL/0程序编译和运行示例 379

12.3 GCC编译程序 381

12.3.1 GCC简介 382

12.3.2 GCC编译程序的结构与处理流程 383

12.3.3 GCC的分析程序 384

12.3.4 GCC的中间语言及中间代码生成 385

12.3.5 GCC的代码优化 389

12.3.6 GCC的代码生成 391

12.4 编译实践 392

12.4.1 Pascal-S语言说明 392

12.4.2 课程设计要求及说明 398

12.4.3 编译程序的测试 400

附录 PL/0编译程序源程序 402

参考文献 416

查看更多关于编译原理与技术的内容

返回顶部