绪论
目录
- 1. 什么是编译
- 编译器在语言处理系统中位置
- 2. 编译系统的结构
- 3. 词法分析/扫描(Scanning)
- 4. 语法分析(parsing)
- 5. 语义分析
- 6. 中间代码生成概述
- 常用的中间代码表示形式
- 常用的三地址指令
- 三地址指令的表示
- 三地址指令的四元式表示
- 中间代码生成的例子
- 7. 编译器后端概述
- 目标代码生成
- 编译器的结构
- 总结
1. 什么是编译
编译: 将高级语言
翻译成汇编语言
或机器语言
(目标语言)的过程
(源语言)
(目标语言)
编译器在语言处理系统中位置
预处理器(Preprocessor):
- 把存储在不同文件中的源程序
聚合
在一起- 把被称为
宏
的缩写语句转换为原始语句
可重定位(Relocation):
- 在机器代码中存储的是相对地址
起始位置 + 相对地址 = 绝对地址
链接器:
- 将多个可重定位的机器代码文件(包括库文件)连接到一起
- 解决外部内存地址问题
加载器:
- 修改可重定位地址
- 将修改后的指令和数据放到内存中适当的位置
2. 编译系统的结构
3. 词法分析/扫描(Scanning)
4. 语法分析(parsing)
5. 语义分析
- 收集标识符的属性信息
- 种属(Kind)
- 类型(Type)
- 存储位置, 长度
- 指
- 作用域
- 参数和返回值信息
- 参数个数, 参数类型, 参数传递方式, 返回值类型, ......
- 语义检查
- 变量或过程未经声明就使用
- 变量或过程名重复声明
- 运算分量类型不匹配
- 操作符与操作数之间的类型不匹配
- 数组下标不是整数
- 对非数组变量使用数组访问操作符
- 对非过程名使用过程调用操作符
- 过程调用的参数类型或数目不匹配
- 函数的返回类型有误
6. 中间代码生成概述
常用的中间代码表示形式
常用的三地址指令
三地址指令的表示
三地址指令的四元式表示
中间代码生成的例子
j
: jump
7. 编译器后端概述
目标代码生成
编译器的结构
总结
- 词法分析: 识别每个单词的类型, 给出
token: < 种别码, 属性值 >
- 语法分析: 根据文法规则, 构建语法分析树
- 语义分析: 手机标识符的属性和构建符号表
- 中间代码生成: 三地址指令的四元式表示
x = y op z ===> (op, y, z, x)