1.什么是编译
计算机程序涉及语言与编译
- 机器语言(计算机可以理解的语言)
- 汇编语言(引入助记符号)
- 高级语言(类似于数学定义和自然语言的简洁形式)
编译器在语言处理系统中的位置
2.编译系统的结构
- 使用英汉翻译类比编译系统功能
- 中间表示很重要
-
编译器的结构
3.词法分析概述
- 词法分析:从左到右扫描源程序,识别出每个有正确含义的单词(token)
- token表示: <种别码、属性值>
-
属性值起到区分作用
-
例子:
-
❓词法分析器是如何自动将代码转换为token序列
-
4.语法分析概述
- 语法分析器从词法分析器输出的token序列种识别出各类短语,并 构造语法分析树
-
语法分析树描述了句子的语法结构
-
赋值语句的分析树
-
变量声明语句的分析树
-
D(declaration)、IDS(identify sequence)、T(Type)
-
❓如何根据语法规则为输入句子构造分析树
-
-
5.语义分析概述
-
主要任务——
-
收集标识符的属性信息
-
种属(Kind)
-
类型(Type)
-
存储位置
-
长度
-
值
-
作用域
-
参数和返回信息
符号表是用来存放标识符的属性信息的数据结构
-
-
语义检查
- 变量或过程未经声明就使用
- 变量或过程名重复声明
- 运算分量类型不匹配
- 操作符与操作数之间的类型不匹配
- 数组下标不是整数
- 对 非数组变量 使用数组访问操作符
- 对 非过程名 使用过程调用操作符
- 过程调用的参数类型或数目不匹配
- 函数返回类型有误
-
6. 中间代码生成及编译器后端
-
三地址码
-
由 类似于汇编语言的指令序列组成 ,每个指令 最多有三个操作数
-
常用的三地址指令
- -
三地址指令表示
-
四元式
-
三地址指令序列唯一确定了运算完成的顺序
-
-
中间代码生成例子
-
-
语法结构树(语法树)——与之前说的 语法分析树 不是同一个
-
目标代码生成