因为近期数学建模、数据挖掘类比赛搞得编译原理之前听的都忘了,最近学的都没学会,所以观看编译原理(哈工大)视频学习,因为经常会容易忘,所以把要点什么的都截取了一下,以防万一我后续复习使用。
在此声明,此为本人观看视频整理知识点所使用,图片内容均源自编译原理(哈工大陈鄞老师)所讲内容。
什么是编译?
- 机器语言:可以被计算机直接理解的(都是0、1)
- 汇编语言:引入了助记符,更加直观,
- 但是依赖特定的机器(不利于非专业人士使用),
- 编写效率低
- 高级语言:类似于数学定义或自然语言的简介形式,
- 接近人类的表达习惯、
- 不依赖于特定机器
- 编写效率高
预处理器:
- 把存储在不同文件中的源程序聚合在一起
- 把成为宏的缩写语句转换为原始语句
可重定位:在内存中存放的起始位置L不是固定的
起始位置+相对位置=绝对地址
加载器:
- 修改可重定位地址
- 将修改后的指令和数据放到内存的适当位置
链接器:
- 将多个可重定位的机器代码文件(包括库文件)连接到一起
- 解决外部内存地址问题
编译系统的结构:
(多个部分可能合到一起进行)
词法分析:
D表示声明语句
T声明类型
IDS表示标志符序列
|表示或关系
语义分析:
主要任务:
- 收集标识符的属性信息
- 语义检查
常用的中间表示形式:
目标代码:
指机器所能识别的机器指令代码或汇编指令代码。