一、编译程序的概念与操作
概念:
计算机语言分成:高级语言
和低级语言
。
低级语言又分成汇编语言
和机器语言
。
因为计算机只能读懂机器语言的程序,所以所有高级语言的程序都必须转成机器语言的程序。
这个转换过程是由一个程序来自动完成的。
要说计算机要把一个源程序翻译成机器语言的程序,首先需要读懂该程序,所以计算机应该怎么去读懂一个源程序呢?
操作:
第一步:词法分析
首先明白,计算机翻译程序开始工作,先需要把待翻译的程序读到内存去,由于翻译程序不知道什么是一个句子或一个单词,所以读源程序的时候只能一个一个字符去读,把源程序的一个一个字符读进来后,先需要分清楚哪些字符串是一个整体,如main,int,x,10等都是一个独立的整体,编译程序把这个字符串整体叫做单词word,要拼出一个一个称作单词的字符串:int,main,(,),
{,int,x,=,10,;,x,=,x,+,10 etc.
这些单词有都有自己的组成规则,以字母打头的不是关键字就是自定义标识符,以数字大头的肯定是数字,其他的要么是运算符要么是标点符号等。
程序举例:
int main()
{
int x=10;
x=x+10
...
}
第二步:语法分析
经过第一步词法分析后就有了单词,然后根据语言的句法或者句型结构(每个语言都有)再拼出一个一个的句子。如果拼不出一个完整的句子,就是语法错误。
第三步:语义分析
分析判断前面符合句型结构的句子有没有语义,简单点就是你说的符不符合逻辑,有没有废话等。
第四步:中间代码生成
为了方便代码生成所作的前期准备工作,这个阶段可以没有。
第五步:目标代码生成和代码优化
代码优化就是将生成的目标代码优化一下,使得生成的目标代码更加短小精炼,执行速度更快等。代码优化阶段并不是所有编译程序必须的,现在很多程序的编译程序中,就没有包含代码优化这个步骤,或者是编译选项等。
第六步:目标代码生成和代码优化
所有过程中都会涉及到表格管理和错误处理两个功能模块。翻译每一个阶段出了问题都会调用错误处理来完成相应的提示信息(位置,错误代码和信息等)或者更进一步的自动修正程序等。表格是用来记录每个自定义标识符的内存地址,初值,作用域,可见性等,这个表格需要记录,查询等。
综上所述,一个编译程序至少包含词法分析、语法分析和代码生成3个阶段,其他阶段或功能模块都可以不包含。
二、编译程序名称
- 将汇编程序转成机器语言的程序叫做
汇编程序
; - 将高级语言的程序转换成机器语言的程序叫做
翻译程序
。
三、翻译方法
翻译程序有2种不同的翻译方法,分别叫做编译
和解释
。
解释方法
类似于同声实时翻译,一句一句翻译解释给计算机去执行。这种方法的特点就是计算机一边翻译一边执行,只有执行结果,没有产生任何中间结果。
编译方法
类似于小说翻译,首先生成中间结果,就是.obj的目标文件,计算机执行的不是高级语言的程序,而是中间结果(.obj的目标文件)。
翻译方法的优缺点:
不同高级语言采用不同的翻译方式,有的语言采用编译,如c,c++,dephi等,有的采用解释方式,如Basic,MATLAB,HTML、XML、Perl、Python、Ruby和Java等。
||每次点击“compile”后等待的那几秒背后不为人知的故事:||
程序分成系统程序
和应用程序
,编译程序属于系统程序。了解了编译程序是干什么的以后,我们就需要了解编译程序到底是怎么一步一步翻译成机器语言的程序的:
先编辑一个源程序,然后将源程序compile编译成.obj的目标程序,再接着将.obj的目标程序和库函数等Linking连接成.exe的可执行程序。最后再执行.exe的可执行程序得到程序运行结果了。