编译原理导论
1.什么是编译程序
- 翻译程序:将一种语言程序等价的转换成另一种语言程序
- 编译程序:将一种高级语言等价的转换为另一种低级语言程序
- 编译程序分类
- 诊断编译程序-帮助程序员调错
- 优化编译程序
- 交叉编译程序
- 可变目标编译程序
- 解释程序:将源程序作为输入,不产生目标程序,而是边解释边执行
编译程序和解释程序的区别:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序不再参与目标程序的执行过程,而在解释方式下,解释程序和源程序要参与到程序的运行过程中,运行控制权在解释程序。
2.计算思维
- 抽象(Abstract)
- 自动化(Automation)
- 有限自动机
- 预测分析程序
- 算符优先分析
- …
- 分解(Decomposition)
- 递归(Recursion)
- 权衡/折衷(Tradeoff)
3.编译过程
词法分析–扫描
任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出单词符号,确定单词的类型,将识别出的单词转换成统一的机内表示——词法单元(token)形式
token:<种别码,属性值>
依循的原则:构词规则
描述工具:有限自动机
语法分析
任务:在词法分析基础上,根据语法规则把单词符号串分解成各类语法单位,根据语法规则为输入句子构建语法分析树
依循的原则:语法规则
描述工具:上下文无关文法
语义分析
- 任务:收集标识符的属性信息
- 种属
- 类型
- 整型、实型、字体型、布尔型、指针型。。。
- 存储位置、长度
- 变量值
- 作用域
- 参数和返回值信息
- 语义检查
- 变量或过程未经声明。。。
- 任务:收集标识符的属性信息
中间代码产生
任务:对各类语法单位按语言的语义进行初步翻译
依循的原则:语义规则
描述工具:属性文法
中间代码:三元式、四元式,树,…
优化
- 任务:对前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码
- 依循的原则:程序的等价变换规则
目标代码产生
- 任务:把中间代码变换成特定机器上的目标代码
- 依赖于硬件系统结构和机器指令的含义
- 目标代码的三种形式
- 汇编指令代码:需要进行汇编
- 绝对指令代码:可直接运行
- 可重定位指令代码:需要链接-(相对地址)