1.翻译程序:
把某一种语言程序(称为源语言程序)等价地转换成另一种语言程序(称为目标语言程序)的程序。
2.编译程序:
把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序。又分为:诊断编译程序 ,优化编译程序,交叉编译程序 ,可变目标编译程序。
![](https://img-blog.csdnimg.cn/b763e8f0f7dc48c5a2eab167fa582078.png)
3.解释程序:
把源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。
![](https://img-blog.csdnimg.cn/edfa88b2029d49ee9966f67c59f9ca38.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAczE4NzY0Njk2NTk5,size_13,color_FFFFFF,t_70,g_se,x_16)
二、编译过程:
词法分析、语法分析、中间代码生成、代码优化(可省略)、目标代码生成。
1.词法分析:
分析过程:
依据定义的构词规则(事先定义某个符号/字符串是什么)对输入程序的输入字符串进行扫描分解,并得出相应的符号含义(如特定字符、变量、运算符号等)。
Eg:
这里有一个“int a=1;” 的语句,词法分析就是要将这个字符串进行分析,比如他要识别出“int” 是什么,“a”是什么,“=”、“1”、“;”等这些我们输入的单词符号是什么,而他识别的依据就是我们人事先定义好的“单词对应表”(暂且如此称呼),如我将“int”定义为保留字,“=”为赋值运算符则程序运行之后输入int,=等符号程序就可以识别出来。
词法分析所用描述工具:
正规式、(确定DFA/不确定NFA)有限自动机。
2.语法分析:
分析过程:
在词法分析的基础上依据定义的语言的语法规则将输入的的单词符号串分解、组合成符合定义的语法规则的各类语句单位。(加入了让自己的理解,有点拗口,好好理解理解)。
Eg:
比如这里有一个“a=a+1;”的语句,在输入之后词法分析已经分析出了“=”,“a”等单词符号对应的“单词对应表”,这时语法分析过程就去根据定义的语法规则将单词串分解、组合。如将“a=”这个语句分析为一个赋值语句,“a+1”分析为一个算术表达式。
词法分析所用描述工具:
上下文无关文法。
3.中间代码生成
生成过程任务:
依据语义规则对各类不同语法范畴按语言的语义进行初步翻译,使语言产生与“定义语法表”和“表达式”的对应关系。(生成的结构与定义的"语法表"中的法则一一对应,如优先级、符号含义、常量等的运算规则。)
中间代码的形式:
三元式,四元式,逆波兰式,树形结构等。
eg:
![](https://img-blog.csdnimg.cn/7c308ea34e0440f689c5b979d1554741.png)
4.代码优化
优化过程:
利用程序的等价变换规则,通过对前阶段中间代码的语句进行修改与加工变换,以期在最后阶段产生更高效的目标代码。
5.目标代码生成
目标任务:
依赖于硬件系统结构和机器指令的含义,把中间代码变换成特定机器上的目标代码。
目标代码三种形式:
绝对指令代码:
可直接运行。
可重新定位指令代码:
需要连接装配。
汇编指令代码:
需要进行汇编。
三、编译程序结构
1.编译程序总框
![](https://img-blog.csdnimg.cn/adc0f1fbb52648789bbc02555471dfe8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAczE4NzY0Njk2NTk5,size_16,color_FFFFFF,t_70,g_se,x_16)
2.表格与表格管理
表格的概念:
表格在程序定义中以名-值对的形式存在,格式为:名字-信息。
常见的表格:
符号名表,常数表,标号表,入口名表,过程引用表。
3.出错处理
任务:
发现源程序中的错误,把有关错误信息报告给用户。
常见错误:
语法错误、语义错误。
4.遍(pass)
含义:
所谓"遍", 就是对源程序或源程序的中间表示从头到尾扫描,并做相关的处理,生成新的中间形式或目标代码。 阶段与遍是不同的概念。一遍可以由若干阶段组成(扫描一部分就暂停一段时间),一个阶段也可以分若干遍来完成(某一部分重复扫描几次)。
5.端
![](https://img-blog.csdnimg.cn/8b9b5b30cee14144b52f8eb4fc39f118.png)
前端:
主要与源语言有关,包括词法分析、语法分析、语义分析和中间代码生成、符号表的建立,以及相应的错误处理和符号表操作,与机器无关的优化等。
后端:
主要与目标机器有关,包括代码优化、目标代码生成,以及相应的错误处理和符号表操作。
把编译程序分为前段和后端的优缺点:
优点:减少对内存容量的要求,程序逻辑结构清晰; 优化更充分,有利于移植。
缺点: 编译程序运行的效率低
四、编译程序与程序设计环境
(编译器与环境部分不做过多介绍)
1.程序设计环境
编辑程序
编译程序
连接程序
调试工具
2.集成化的程序设计环境
Visual Studio 等。
五、编译程序生成
1.以汇编语言和机器语言为工具优缺点
优点
:
可以针对具体的机器,充分发挥计算机的系统功能。生成的程序效率高。
缺点
:
程序难读、难写、易出错、难维护、生产的效率低。
2. 高级语言为工具书写优缺点
优点
:
程序易读、易理解、容易维护、生产的效率高。
缺点
:
难以充分发挥计算机的系统功能,生成的程序效率低。
3. 实现编译程序的主要方法有哪些
主要有转换法、移植法、自展法、自动生成法
4.编译程序自动产生法
编译程序-编译程序,编译程序书写系统
EG:
![](https://img-blog.csdnimg.cn/172eb50063fd439ebe1abaffdb66f726.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAczE4NzY0Njk2NTk5,size_20,color_FFFFFF,t_70,g_se,x_16)
小结:
第一部分的总论与一些概念介绍写完了,接下来就要具体介绍编译过程了,第一次写这种知识型文章,并且自身也在学习中,可能有些错误,望大家多多指教。
由于要解释某些含义,文中有地方引用了其他作者的定义的概念,如不喜可联系我删除。最后,谢谢大家观看。