图书介绍

编译原理及实践PDF|Epub|txt|kindle电子书版本网盘下载

编译原理及实践
  • (美)劳顿(Kenneth C.Louden)著;冯博琴等译 著
  • 出版社: 北京:机械工业出版社
  • ISBN:7111077032
  • 出版时间:2000
  • 标注页数:427页
  • 文件大小:19MB
  • 文件页数:438页
  • 主题词:

PDF下载


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

下载说明

编译原理及实践PDF格式电子书版下载

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

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

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

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

图书目录

前言页1

译者序1

前言1

第1章 概论1

1.1 为什么要用编译器2

1.2 与编译器相关的程序3

1.3 翻译步骤5

1.4 编译器中的主要数据结构8

1.5 编译器结构中的其他问题10

1.6 自举与移植12

1.7 TINY样本语言与编译器14

1.7.2 TINY编译器15

1.7.1 TINY语言15

1.7.3 TM机17

1.8 C-Minus:编译器项目的一种语言18

练习19

注意与参考20

第2章 词法分析21

2.1 扫描处理21

2.2 正则表达式23

2.2.1 正则表达式的定义23

2.2.2 正则表达式的扩展27

2.2.3 程序设计语言记号的正则表达式29

2.3 有穷自动机32

2.3.1 确定性有穷自动机的定义32

2.3.2 先行、回溯和非确定性自动机36

2.3.3 用代码实现有穷自动机41

2.4 从正则表达式到DFA45

2.4.1 从正则表达式到NFA45

2.4.2 从NFA到DFA48

2.4.3 利用子集构造模拟NFA50

2.4.4 将DFA中的状态数最小化51

2.5 TINY扫描程序的实现52

2.5.1 为样本语言TINY实现一个扫描程序53

2.5.2 保留字与标识符56

2.5.3 为标识符分配空间57

2.6 利用Lex自动生成扫描程序57

2.6.1 正则表达式的Lex约定58

2.6.2 Lex输入文件的格式59

2.6.3 使用Lex的TINY的扫描程序64

练习65

编程练习67

注意与参考67

第3章 上下文无关文法及分析69

3.1 分析过程69

3.2 上下文无关方法70

3.2.1 与正则表达式比较70

3.2.2 上下文无关文法规则的说明71

3.2.3 推导及由文法定义的语言72

3.3 分析树与抽象语法树77

3.3.1 分析树77

3.3.2 抽象语法树79

3.4 二义性83

3.4.1 二义性文法83

3.4.2 优先权和结合性85

3.4.3 悬挂else问题87

3.4.4 无关紧要的二义性89

3.5 扩展的表示法:EBNF和语法图89

3.5.1 EBNF表示法89

3.5.2 语法图91

3.6 上下文无关语言的形式特性93

3.6.1 上下文无关语言的形式定义93

3.6.2 文法规则和等式94

3.6.3 乔姆斯基层次和作为上下文无关规则的语法局限95

3.7 TINY语言的语法97

3.7.1 TINY的上下文无关文法97

3.7.2 TINY编译器的语法树结构98

练习101

注意与参考104

第4章 自顶向下的分析105

4.1 使用递归下降分析算法进行自顶向下的分析105

4.1.1 递归下降分析的基本方法105

4.1.2 重复和选择:使用EBNF107

4.1.3 其他决定问题112

4.2 LL(1)分析113

4.2.1 LL(1)分析的基本方法113

4.2.2 LL(1)分析与算法114

4.2.3 消除左递归和提取左因子117

4.2.4 在LL(1)分析中构造语法树124

4.3 First集合和Follow集合125

4.3.1 First集合125

4.3.2 Follow集合130

4.3.3 构造LL(1)分析表134

4.3.4 再向前:LL(k)分析程序135

4.4 TINY语言的递归下降分析程序136

4.5 自顶向下分析程序中的错误校正137

4.5.1 在递归下降分析程序中的错误校正138

4.5.2 在LL(1)分析程序中的错误校正140

4.5.3 在TINY分析程序中的错误校正141

练习143

编程练习146

注意与参考148

第5章 自底向上的分析150

5.1 自底向上分析概览151

5.2.1 LR(0)项153

5.2 LR(0)项的有穷自动机与LR(0)分析153

5.2.2 项目的有穷自动机154

5.2.3 LR(0)分析算法157

5.3 SLR(1)分析160

5.3.1 SLR(1)分析算法160

5.3.2 用于分析冲突的消除二义性规则163

5.3.3 SLR(1)分析能力的局限性164

5.3.4 SLR(k)文法165

5.4 一般的LR(1)和LALR(1)分析166

5.4.1 LR(1)项的有穷自动机166

5.4.2 LR(1)分析算法169

5.4.3 LALR(1)分析171

5.5 Yacc:一个LALR(1)分析程序的生成器173

5.5.1 Yacc基础173

5.5.2 Yacc选项176

5.5.3 分析冲突与消除二义性的规则180

5.5.4 描述Yacc分析程序的执行183

5.5.5 Yacc中的任意值类型184

5.5.6 Yacc中嵌入的动作185

5.6 使用Yacc生成TINY分析程序186

5.7 自底向上分析程序中的错误校正188

5.7.1 自底向上分析中的错误检测188

5.7.2 应急方式错误校正188

5.7.3 Yacc中的错误校正189

5.7.4 TINY中的错误校正192

练习192

编程练习195

注意与参考197

第6章 语义分析198

6.1 属性和属性文法199

6.1.1 属性文法200

6.1.2 属性文法的简化和扩充206

6.2 属性计算算法207

6.2.1 相关图和赋值顺序208

6.2.2 合成和继承属性212

6.2.3 作为参数和返回值的属性219

6.2.4 使用扩展数据结构存储属性值221

6.2.5 语法分析时属性的计算223

6.2.6 语法中属性计算的相关性226

6.3 符号表227

6.3.1 符号表的结构228

6.3.2 说明230

6.3.3 作用域规则和块结构232

6.3.4 同层说明的相互作用236

6.3.5 使用符号表的属性文法的一个扩充例子237

6.4 数据类型和类型检查241

6.4.1 类型表达式和类型构造器242

6.4.2 类型名、类型说明和递归类型246

6.4.3 类型等价248

6.4.4 类型推论和类型检查253

6.4.5 类型检查的其他主题255

6.5 TINY语言的语义分析257

6.5.1 TINY的符号表258

6.5.2 TINY语义分析程序259

练习260

编程练习264

注意与参考264

第7章 运行时环境266

7.1 程序执行时的存储器组织266

7.2 完全静态运行时环境269

7.3 基于栈的运行时环境271

7.3.1 没有局部过程的基于栈的环境271

7.3.2 带有局部过程的基于栈的环境281

7.3.3 带有过程参数的基于栈的环境284

7.4 动态存储器286

7.4.1 完全动态运行时环境286

7.4.2 面向对象的语言中的动态存储器287

7.4.3 堆管理289

7.5 参数传递机制292

7.4.4 堆的自动管理292

7.5.1 值传递293

7.5.2 引用传递294

7.5.3 值结果传递295

7.5.4 名字传递295

7.6 TINY语言的运行时环境296

练习297

编程练习303

注意与参考304

第8章 代码生成305

8.1 中间代码和用于代码生成的数据结构305

8.1.1 三地址码306

8.1.2 用于实现三地址码的数据结构308

8.1.3 P-代码310

8.2 基本的代码生成技术312

8.2.1 作为合成属性的中间代码或目标代码312

8.2.2 实际的代码生成314

8.2.3 从中间代码生成目标代码317

8.3 数据结构引用的代码生成319

8.3.1 地址计算319

8.3.2 数组引用320

8.3.3 栈记录结构和指针引用325

8.4 控制语句和逻辑表达式的代码生成328

8.4.1 if和while语句的代码生成328

8.4.2 标号的生成和回填330

8.4.3 逻辑表达式的代码生成330

8.4.4 if和while语句的代码生成过程样例331

8.5.1 过程和函数的中间代码334

8.5 过程和函数调用的代码生成334

8.5.2 函数定义和调用的代码生成过程336

8.6 商用编译器中的代码生成:两个案例研究339

8.6.1 对于80×86的Borland3.0版C编译器339

8.6.2 Sun SparcStation的Sun2.0C编译器343

8.7 TM:简单的目标机器346

8.7.1 Tiny Machine的基本结构347

8.7.2 TM模拟器349

8.8 TINY语言的代码生成器351

8.8.1 TINY代码生成器的TM接口351

8.8.2 TINY代码生成器352

8.8.3 用TINY编译器产生和使用TM代码文件354

8.8.4 TINY编译器生成的TM代码文件示例355

8.9 代码优化技术考察357

8.9.1 代码优化的主要来源358

8.9.2 优化分类360

8.9.3 优化的数据结构和实现技术362

8.10 TINY代码生成器的简单优化366

8.10.1 将临时变量放入寄存器366

8.10.2 在寄存器中保存变量367

8.10.3 优化测试表达式367

练习368

编程练习371

注意与参考372

附录A 编译器设计方案373

附录B 小型编译器列表381

附录C Tiny Machine模拟器列表417

热门推荐