《编译原理》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:吕映芝等编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:1998
  • ISBN:7302027323
  • 页数:351 页
图书介绍:

前言 1

第1章 编译程序概论 1

1.1 什么是编译程序 1

1.2 编译过程概述 2

1.3 编译程序的结构 6

1.4 编译阶段的组合 7

1.5 编译技术和软件工具 7

第2章 PL/O编译程序的实现 9

2.1 PL/O语言描述 9

2.1.1 PL/O语言的语法描述图 9

2.1.2 PL/O语言文法的EBNF表示 11

2.2 PL/O编译程序的结构 12

2.3 PL/O编译程序的词法分析 14

2.4 PL/O编译程序的语法分析 16

2.5 PL/O编译程序的目标代码结构和代码生成 19

2.6 PL/O编译程序的语法错误处理 21

2.7 PL/O编译程序的目标代码解释执行时的存储分配 24

2.8 练习 26

第3章 文法和语言 29

3.1 文法的直观概念 29

3.2 符号和符号串 30

3.3 文法和语言的形式定义 31

3.4 文法的类型 35

3.5 上下文无关文法及其语法树 37

3.6 句型的分析 39

3.6.1 自上而下的分析方法 40

3.6.2 自下而上的分析方法 40

3.6.3 句型分析的有关问题 41

3.7.2 上下文无关文法中的ε规则 43

3.7 有关文法实用中的一些说明 43

3.7.1 有关文法的实用限制 43

3.8 练习 44

第4章 词法分析 47

4.1 词法分析程序的设计 47

4.1.1 词法分析程序与词法分析程序的接口方式 47

4.1.2 词法分析程序的输出 47

4.1.3 将词法分析工作分离的考虑 48

4.2 单词的描述工具 49

4.2.1 正规文法 49

4.2.2 正规式 49

4.2.3 正规文法到正规式 51

4.3 有穷自动机 52

4.3.1 确定的有穷自动机(DFA) 52

4.3.3 NFA?DFA的转换 54

4.3.2 不确定的有穷自动机(NFA) 54

4.3.4 确定有穷自动机的化简 57

4.4 正规式和有穷自动机的等价性 59

4.5 正规文法和有穷自动机间的转换 62

4.6 词法分析程序的自动构造工具 63

4.6.1 LEX语言 64

4.7 练习 66

第5章 自顶向下语法分析方法 69

5.1 确定的自顶向下分析思想 69

5.2 LL(1)文法的判别 73

5.3 某些非LL(1)文法到LL(1)文法的等价变换 78

5.4 不确定的自顶向下分析思想 85

5.5.1 递归子程序法 87

5.5.2 预测分析方法 87

5.5 确定的自顶向下分析方法 87

5.6 练习 90

第6章 自底向上优先分析法 94

6.1 自底向上优先分析法概述 95

6.2 简单优先分析法 96

6.2.1 优先关系 96

6.2.2 简单优先文法的定义 97

6.2.3 简单优先分析法 98

6.3 算符优先分析法 98

6.3.1 直观算符优先分析法 99

6.3.2 算符优先文法的定义 100

6.3.3 算符优先关系表的构造 102

6.3.4 算符优先分析算法 109

6.3.5 优先函数 111

6.3.6 算符优先分析法的局限性 115

6.4 练习 116

第7章 LR分析法 117

7.1 LR分析概述 117

7.2 LR(0)分析 118

7.2.1 可归前缀和子前缀 119

7.2.2 识别活前缀的有限自动机 121

7.2.3 活前缀及其可归前缀的一般计算方法 122

7.2.4 CR(0)项目集规范族的构造 125

7.3 SLR(1)分析 132

7.4 LR(1)分析 139

7.4.1 LR(1)项目集族的构造 140

7.4.2 LR(1)分析表的构造 141

7.5 LALR(1)分析 143

7.6 二义性文法在LR分析中的应用 149

7.7 练习 151

第8章 语法制导翻译和中间代码生成 155

8.1 属性文法 155

8.2 语法制导翻译概论 157

8.3 中间代码的形式 159

8.3.1 逆波兰记号 159

8.3.2 三元式和树形表示 160

8.3.3 四元式 161

8.4 简单赋值语句的翻译 162

8.5 布尔表达式的翻译 163

8.5.1 布尔表达式的翻译方法 164

8.5.2 控制语句中布尔表达式的翻译 165

8.6 控制结构的翻译 169

8.6.1 条件转移 169

8.6.2 开关语句 171

8.6.3 for循环语句 173

8.6.4 出口语句 175

8.6.5 goto语句 176

8.6.6 过程调用的四元式产生 177

8.7 说明语句的翻译 178

8.7.1 简单说明句的翻译 179

8.7.2 过程中的说明 179

8.8 数组和结构的翻译 180

8.8.1 数组说明和数组元素的引用 180

8.8.2 结构(记录)说明和引用的翻译 186

8.9练习 188

第9章 符号表 190

9.1 符号表的作用和地位 190

9.2 符号的主要属性及作用 191

9.3.1 符号表的总体组织 196

9.3 符号表的组织 196

9.3.2 符号表项的排列 199

9.3.3 关键字域的组织 201

9.3.4 其它域的组织 202

9.3.5 下推链域的组织 209

9.4 符号表的管理 210

9.4.1 符号表的初始化 210

9.4.2 符号的登录 211

9.4.3 符号的查找 212

9.4.4 符号表中分程序结构层次的管理 213

9.5 练习 216

第10章 目标程序运行时的存储组织 217

10.1 数据空间的三种不同使用方法和管理方法 217

10.1.1 静态存储分配 218

10.1.4 堆式动态存储分配 219

10.1.2 动态存储分配 219

10.1.3 栈式动态存储分配 219

10.2 栈式存储分配的实现 220

10.2.1 简单的栈式存储分配的实现 220

10.2.2 嵌套过程语言的栈式实现 222

10.2.3 分程序结构的存储管理 226

10.3 参数传递 230

10.3.1 传值 231

10.3.2 传地址 232

10.3.3 过程参数 232

10.4 过程调用、过程进入和过程返回 233

10.5 练习 234

11.1.1 优化技术简介 236

11.1 优化技术简介 236

第11章 代码优化 236

11.2 局部优化 239

11.2.1 基本块的划分 239

11.2.2 基本块的变换 239

11.2.3 基本块的DAG表示 240

11.2.4 DAG的应用 243

11.2.5 DAG构造算法讨论 245

11.3 控制流分析和循环优化 247

11.3.1 程序流图与循环 247

11.3.2 循环 248

11.3.3 循环的查找 248

11.3.4 可归约流图 253

11.3.5 循环优化 253

11.4 数据流的分析与全局优化 257

11.4.1 一些主要的概念 258

11.4.2 数据流方程的一般形式 258

11.4.3 到达一定值数据流方程 259

11.4.4 可用表达式及其数据流方程 263

11.4.5 活跃变量数据流方程 265

11.4.6 复写传播 266

11.5 练习 267

第12章 代码生成 270

12.1 代码生成概述 270

12.2 一个计算机模型 270

12.3 一个简单的代码生成器 271

12.3.1 寄存器分配的原则 271

12.3.2 待用信息链表法 271

12.3.3 代码生成算法 273

12.4.1 中间语言的选择 275

12.4 代码生成研究现状 275

12.4.2 代码生成的自动化研究 277

12.5 练习 278

第13章 编译程序实现的途径 279

13.1 编译程序的书写语言与T型图 279

13.2编译程序的自展技术 279

13.3 交叉编译与编译程序的移植 281

13.4 编译程序的构造工具 282

13.4.1 基于LALR(1)的语法分析程序的生成器YACC 282

13.4.2 基于LL(2)文法的编译器的构造工具(SD EBNF_LL(2)) 283

13.4.3 词法分析程序的生成器LEX 286

13.5 练习 287

附录A PL/O编译程序文本 288

B.1 LEX概述 306

附录B 词法分析程序生成器LEX的使用方法 306

B.2 LEX源程序的格式 307

B.3 LEX用的正规式 307

B.4 LEX源程序中的动作 310

B.5 识别规则的二义性 312

B.6 LEX源程序中的辅助定义部分 312

B.7 怎样在UNIX系统中使用LEX 314

B.8 LEX源程序例子 314

B.9 再谈上下文相关性的处理 315

B.10 LEX源程序格式总结 317

附录C 语法分析程序自动产生器YACC的使用方法 319

C.1 YACC概述 319

C.2 YACC源程序的一般格式 320

C.3 YACC源程序说明部分的写法 320

C.3.1 头文件表 320

C.3.4 全局变量定义 321

C.3.2 宏定义 321

C.3.3 数据类型定义 321

C.3.5 语法开始符定义 322

C.3.6 语义值类型定义 322

C.3.7 终结符定义 323

C.3.8 运算符优先级及结合性定义 323

C.4 YACC源程序中语法规则部分的写法 325

C.4.1语法规则的书写格式 325

C.4.2 语义动作 326

C.4.3 YACC解决二义性和冲突的方法 327

C.4.4 语法分析中的错误处理 328

C.5.2 错误信息报告程序 329

C.5.3 词法分析程序 329

C.5.1 主程序 329

C.5 程序段部分 329

C.5.4 其它程序段 331

C.6 YACC源程序例子说明 331

C.6.1 YACC的源程序例1 332

C.6.2 YACC的源程序例 2 334

附录D 编译原理实验要求 339

附录E 编译原理辅助教学软件功能介绍和使用说明 340

E.1 功能介绍 340

E.1.1 THPL0CAI的功能 340

E.1.2 TH-CCAIS的功能 340

E.2 使用说明 341

E.2.1 THPL0CAI使用说明 341

E.2.2 TH-CCAIS使用说明 342

E.2.3 其它补充说明 350

参考文献 351