作者注:
这是一篇大学生写的编译原理系列,文章并非提供令人望而却步的长篇论述,意在用简单有趣的方式分享我所学到的Knowledge。至于你所感兴趣的深层论述这里提供一些简单的连接供你使用。
这里我要十分感谢我的老师,这篇博文,她无疑是最大的贡献者。
目录
- 一、什么是编译程序
- 1.1、简单概括编译器
- 1.2、编译程序与解释程序
- 二、编译过程概述
- 2.1、编译过程的组成
- 2.2、词法分析
- 2.3、语法分析
- 2.4、语义分析与中间代码生成
- 2.5、代码优化
- 2.6、目标代码生成
- 三、编译程序的结构
- 3.1、
- 3.2、
- 四、编译程序的生成
- 4.1、
- 4.2、
一、什么是编译程序
1.1、简单概括编译器
问题: 能否简单概括一下编译器是什么?
回答: 所谓的编译器,就是将一种程序(源程序)翻译成另一种程序(目标程序)的计算机程序。编译器天生就是为成为桥梁而来,它将你写的源程序进行翻译成计算机可执行的01代码,然后计算机就可以执行了如下图所示。
1.2、编译程序与解释程序
既然知道到何为编译器,那么接下来聊一下编译程序与解释程序的区别。
编译程序:先将源程序编译成目标程序,在执行时直接执行目标程序文件,像C语言或C++语言的编译器,编译程序的好处就是一次编译,直接运行,效率高。
解释程序:编译与执行同步执行,不存在中间编译文件,像python语言的编译器,解释程序的有有点就是简单,易实现。
那有没有结合两种原理的编译器呢?Java的一次编译到处运行的理念,全靠结合了这两种模式。认真看下面的图你就会感到,原来还可以这样玩!!
二、编译过程概述
2.1、编译过程的组成
编译一个源程序文件需要对源程序文件进行词法分析,语法分析,语义分析与中间代码生成,代码优化与目标代码生成。
2.2、词法分析
词法分析是根据构词规则把源程序的字符进行扫描与分解,识别出每个单词与符号。
2.3、语法分析
在词法分析的基础上根据语法规则,将单词符号转化为语法单位(即短语,句子,程序段等),所作的是将单词范畴转化为语法范畴。
2.4、语义分析与中间代码生成
语义分析根据语法规则将语法范畴转换为中间代码,语义分析过程会检查块嵌套是否交叉块嵌套变量名是否相同。
2.5、代码优化
对于中间代码进行加工变换,在时间和空间上提高代码运行效率。例如将复杂度高的乘法改为简单的加法。
2.6、目标代码生成
在硬件体系结构、指令系统的支持下中间代码变换为特定机器上的低级语言代码。目标代码的形式有绝对指令,可重定位指令和汇编指令。
作者:德志
感谢你的关注,希望你能够喜欢我所整理的文章。作者能力有限,如有问题,欢迎在文章底部评论处留下任何问题或者建议。