编译原理笔记1-引论
编译原理笔记1-引论
1.1 基本概念
一、发展
机器语言 —— 汇编语言 —— 高级语言 —— 工具语言
二、翻译程序
把某一种语言程序(称为源语言程序)等价地转换成另一种语言程序(称目标语言程序)的程序
三、编译程序
把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言)的程序
编译程序的分类:
- 诊断编译程序&优化编译程序
- 交叉编译程序&可变目标编译程序
四、解释程序
把源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身
五、执行高级语言程序的步骤
高级语言程序 —— 编译 —— 低级语言目标程序 —— 目标程序 —— 执行
1.2 编译过程
一、程序的编译过程
- 词法分析
- 语法分析
- 中间代码产生
- 优化
- 目标代码生成
并非每个编译过程都有以上全过程
词法分析
输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号
**依据的原则:**构词规则
**描述工具:**正规式和有限自动机
语法分析
在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位
**依据的原则:**语法规则
**描述工具:**上下文无关文法
中间代码产生
对各类不同的语法范畴按语言的语义进行初步翻译
**依据的原则:**语义规则
**中间代码:**三元式、四元式、树形结构等
优化
对于当前阶段的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码
**依据的原则:**程序的等价变换规则
目标代码产生
把中间代码变换成特定机器上的目标代码
依赖于硬件系统结构和机器指令的含义
目标代码的三种形式:
- **绝对指令代码:**可以直接运行
- **可重新定位指令代码:**需要连接装配
- **汇编指令代码:**需要进行汇编
二、编译程序的逻辑结构
三、表格与表格管理
常见的表格:符号名表、常数表、标号表、入口名表、过程引用表
四、出错管理
**出错处理程序:**发现源程序中的错误,把有关的错误信息报告给用户
语法错误、语义错误
五、遍
所谓遍:对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序
每遍由从外存上获得前一遍的工作结果开始,完成工作后,把结果存在外存上。每遍工作完成后所占用的存贮空间大部分被释放
六、编译前端和后端
编译前端:与源语言有关,词法分析,语法分析,语义分析,中间代码产生,与机器无关的优化
编译后端:与目标机有关,与目标机有关的优化,目标代码的产生
1.3 高级语言程序简介
一、参数传递
- **传地址:**实参计算出结果,把地址送形参
- **传值:**把实参的值计算出来送形参
- **传名:**相当于进行代换
二、存贮管理
- **静态存贮分配:**编译时就安排好目标程序运行时的全部数据空间,并能确定每个数据项目的单元地址
- **动态存贮分配:**如果允许递归、可变数据结构,必须动态分配
- 栈式:整个程序的数据空间安排在一个栈中
- 堆式:允许自由地申请和退还空间(new和delete操作)






