1.美图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191220230209514.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzgzNDM1,size_16,color_FFFFFF,t_70)
5. 编译过程一语法分析
任务:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位(语法范畴)
依循的原则:语法规则
描述工具:上下文无关文法
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191220230108887.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzgzNDM1,size_16,color_FFFFFF,t_70)
6.编译过程一中间代码产生
任务:对各类不同语法范畴按语言的语义进行初步翻译
依循的原则:语义规则
中间代码:三元式,四元式,树,*…
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191220230402243.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzgzNDM1,size_16,color_FFFFFF,t_70)
7.编译过程一优化爱课程
任务:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码
依循的原则:程序的等价变换规则
FOR K;=1 TO 100 DO
BEGIN
X:=I+1;
M;=I+10*K;
N;=J+ 10*K;
END
翻译成四元式
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191220230914358.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzgzNDM1,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019122023112141.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzgzNDM1,size_16,color_FFFFFF,t_70)
这里注意乘法的代价比加法要大太多
8.编译过程一目标代码产生
任务:把中间代码变换成特定机器上的目标代码
依赖于硬件系统结构和机器指令的含义
目标代码三种形式
- 绝对指令代码:可直接运行 如exe程序
- 可重新定位指令代码:需要连接装配,如vb中的obj文件,支持独立的模块化文件
- 汇编指令代码:需要进行汇编
8.1 可重新定位指令代码
支持独立的模块化文件,因为独立编译,所以不知道将来会怎么使用内存,各种模块组合形成不同的程序。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191220231640325.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzgzNDM1,size_16,color_FFFFFF,t_70)
每个模块地址之间使用相对地址。
9.编译程序的结构
- 编译程序总框
- 表格与表格管理
- 出错处理
- 遍
- 编译前端与后端
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191220232453737.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzgzNDM1,size_16,color_FFFFFF,t_70)
9.1 表格和表格管理
常见的表格
符号名表,常数表,标号表,入口名表,过程引用表…
格式
名字 | 信息
出错处理程序
口发现源程序中的错误,把有关错误信息报告给用户
语法错误
- 源程序中不符合语法(或词法)规则的错误
- 非法字符、括号不匹配、缺少;
语义错误
- 源程序中不符合语义规则的错误
- 说明错误、作用域错误、类型不一致.
9.2 遍(pass)
所谓"遍",就是对源程序或源程序的中间表示从头到尾扫描一次
9.3 编译前端与编译后端
![xc](https://img-blog.csdnimg.cn/20191220233946248.png)
编译前端
- 与源语言有关,如词法分析,语法分析,语义分析与
- 中间代码产生,与机器无关的优化
编译后端
- 与目标机有关,与目标机有关的优化,目标代码产生
9.4 案例java
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191220234204244.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzgzNDM1,size_16,color_FFFFFF,t_70)