《程序设计语言编译原理》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:陈火旺等编
  • 出 版 社:北京:国防工业出版社
  • 出版年份:1984
  • ISBN:7118004162
  • 页数:309 页
图书介绍:

目 录 1

引论 1

0.1什么叫编译程序 1

0.2编译过程概述 1

0.3编译程序的结构 4

0.3.1编译程序总框 4

0.3.2表格与表格管理 5

0.3.3遍 7

0.4编译程序的生成 7

0.5学习构造编译程序 8

第一章高级程序语言概述 10

1.1程序语言的定义 10

1.1.1语言的词法和语法结构 10

1.1.2语义 11

1.2初等类型数据 12

1.2.1标识符和名字 13

1.2.2名字的属性和说明 13

1.3 数据结构 14

1.3.1数组 14

1.3.2记录结构 16

1.3.3字符串、表格和栈 17

1.4 表达式 17

1.5语句 19

1.5.1赋值句 19

1.5.2控制语句 20

1.5.3说明句 20

1.5.4简单句和复合句 20

1.6 程序段 20

1.6.1 FORTRAN 20

1.6.3 PASCAL 21

1.6.2 ALGOL 21

1.7 参数传递 22

1.7.1参数 22

1.7.2传地址 22

1.7.3传值 23

*1.7.4传名 24

1.8存储管理 24

1.8.1静态存储分配 24

1.8.2动态存储分配 24

1.8.3栈式动态存储分配 25

*1.8.4堆式动态存储分配 26

1.9 历史回顾 27

2.1.1词法分析器的功能和 29

输出形式 29

2.1对于词法分析器的要求 29

第二章词法分析 29

2.1.2词法分析器作为一个 30

独立子程序 30

2.2词法分析器的设计 30

2.2.1输入、预处理 31

2.2.2单词符号的识别: 32

超前搜索 32

2.2.3状态转换图 33

2.2.4 状态转换图的实现 36

*2.3正规表达式与有限自动机 38

2.3.1正规式与正规集 38

2.3.2确定有限自动机(DFA) 39

2.3.3非确定有限自动机(NFA) 41

2.3.4正规式与有限自动机的 41

等价性 41

2.3.5确定有限自动机的化简 45

*2.4词法分析器的自动产生 46

2.4.1语言LEX的一般描述 47

2.4.2超前搜索 49

2.4.3 LEX的实现 50

第三章程序语言的语法描述与 55

分析 55

3.1上下文无关文法 55

3.1.1文法与语言 55

3.1.2语法树与二义性 58

3.1.3形式语言鸟瞰 60

3.2 语法分析——自下而上 62

分析 62

3.2.1归约与分析树 63

3.2.2规范归约简述 65

3.2.3符号栈的使用与分析树的 67

表示 67

3.3算符优先分析法 68

3.3.1直观算符优先分析法 70

3.3.2算符优先文法和优先表构造 73

3.3.3算符优先分析算法的设计 76

3.3.4优先函数 78

3.4 语法分析——自上而下 80

分析 80

3.5递归下降分析法 82

3.5.1左递归的消除 83

3.5.2消除回溯、提左因子和递归 84

下降分析器 84

3.5.3文法的另一种表示法和转换图 86

3.5.4预测分析程序 88

3.5.5状态表 92

自动构造 98

4.1 LR分析器 98

*第四章语法分析程序的 98

4.1.1LR文法 101

4.1.2一些非LR结构 102

4.2 LR(0)项目集族和LR 103

(0)分析表的构造 103

4.2.1 LR(0)项目集规范族的构造 105

4.2.2有效项目 107

4.2.3 LR(0)分析表的构造 108

4.3SLR分析表的构造 109

4.4 规范LR分析表的构造 113

4.5 LALR分析表的构造 116

4.6二义文法的应用 123

4.7分析表的自动产生 126

4.7.1终结符和产生式的优先级 126

4.7.2结合规则 127

4.8 LR分析表的实际安排 128

第五章语法制导翻译和中间 132

代码产生 132

5.1语法制导翻译概说 132

5.2逆波兰表示法 135

5.2.1后缀式的计值 135

5.2.2后缀式的推广 136

5.2.3语法制导生成后缀式 137

5.3 三元式和树 137

5.3.1间接三元式 139

5.3.2树 139

5.4 四元式 140

5.5 简单算术表达式和赋值 141

句到四元式的翻译 141

5.6 布尔表达式到四元式的 144

翻译 144

5.6.1作为条件控制的布尔式翻译 145

5.7.1标号和转移语句 148

5.7控制语句的翻译 148

5.7.2条件语句 149

5.7.3循环语句 152

5.7.4分叉语句 154

5.8 数组元素引用 156

5.8.1数组元素引用的中间代码 157

5.8.2赋值句中数组元素的翻译 158

5.8.3按列为序存放数组元素 160

的情形 160

5.9过程调用 162

5.9.1过程调用的四元式产生 162

5.9.2过程调用和数组元素相混淆 163

的处理 163

5.10说明语句的翻译 163

*5.11记录结构 165

5.11.1记录说明的翻译 166

5.11.2记录结构的引用 167

5.12输入/输出语句的翻译 168

5.12.1 I/O语句的实现 168

5.12.2 I/O语句的翻译 170

5.12.3格式语句的处理 171

5.13 自上而下分析制导 172

翻译概说 172

第六章符号表 178

6.1 符号表的组织和使用 178

6.2整理与查找 180

6.2.1线性表 180

6.2.2对折查找与二叉树 181

6.2.3杂凑技术 183

6.3 名字的作用范围 185

6.3.1 FORTRAN的符号表组织 185

6.3.2 ALGOL的符号表组织 186

6.4符号表的内容 189

第七章运行时存储空间组织 193

7.1 静态存储管理——FORTRAN 193

存储分配 193

7.1.1数据区 194

7.1.2公用语句的处理 196

7.1.3等价语句的处理 197

7.1.4地址分配 200

7.1.5临时变量的地址分配 202

7.2一个简单的栈式存储分配 204

的实现 204

7.2.1 C的活动记录 205

7.2.2C的过程调用,过程进入, 205

数组空间分配和过程返回 205

7.3 嵌套过程语言的栈式实现 206

和活动记录 207

7.3.1 嵌套层次显示表DISPLAY 207

7.3.2过程调用,过程进入 208

7.3.3参数传递 209

7.4 ALGOL的实现 210

7.4.1分程序结构 211

7.4.2分程序的进入和退出 212

7.4.3过程调用,进入和返回 214

7.4.4参数子程序 215

7.5 分程序结构语言存储分配 216

拾遗 216

第八章错误的诊察和校正 219

8.1出错处理概述 219

8.1.1语法错误 220

8.1.2 语义错误 220

8.1.3错误处理 221

8.2词法分析阶段的错误诊察 222

8.1.4出错处理系统与编译程序 222

各阶段的联系 222

8.3 语法分析(自下而上)阶段 223

的错误诊察 223

8.3.1算符优先分析法的错误处理 223

*8.3.2 LR分析算法的错误处理 226

*8.4 自上而下分析的错误诊察 228

8.5语义错误诊察 231

8.5.1遏止株连信息 231

8.5.2遏止重复信息 231

第九章代码优化 233

9.1 优化概述 233

9.2 局部优化 236

其应用 237

9.3.1基本块的DAG表示 237

9.3 基本块的DAG表示及 237

9.3.2 DAG的应用 240

9.3.3 DAG构造算法讨论 242

9.4控制流程分析和循环 244

查找算法 244

9.4.1程序流图与循环 245

9.4.2必经结点集 246

9.4.3查找循环算法 248

9.4.4可归约流图 250

9.4.5深度为主查找及其算法 251

9.5 到达-定值与引用-定值链 253

9.5.1到达-定值数据流方程 253

9.5.2到达-定值数据流方程 255

的求解 255

9.5.3引用-定值链(ud链) 257

9.5.4 ud链的应用 257

9.6.1代码外提 258

9.6 循环优化 258

9.6.2强度削弱 261

9.6.3删除归纳变量 263

*第十章数据流分析 271

10.1 活跃变量与定值-引用链 271

(du链) 271

10.1.1活跃变量的数据流方程 271

10.1.2活跃变量数据流方程 272

的求解 272

10.1.3定值-引用链(du链) 273

10.1.4活跃变量与du链的应用 275

10.2 删除全局公共子表达式 275

10.2.1可用表达式及其数据流方程 275

的算法 278

10.2.3删除全局公共子表达式 278

10.2.2可用表达式数据流 278

方程的求解 278

10.3 复写传播 279

10.4 非常忙表达式和代码提升 281

10.4.1非常忙表达式数据流方程 283

10.4.2代码提升 284

10.5 四类数据流方程小结 285

10.6 实施各种优化的综合考虑 286

11.1一个计算机模型 293

第十一章代码生成 293

11.2一个简单代码生成器 294

11.2.1待用信息 294

11.2.2寄存器描述和地址描述 295

11.2.3代码生成算法 295

11.3寄存器分配 298

*11.4 DAG的目标代码 301

*11.5树的目标代码 303