高级语言编译的六个过程
编译就是要把高级语言的源程序翻译成目标程序的过程。
一般整个过程可划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成6个阶段。
有一种说法 编译有七个过程
预处理,词法分析,语法分析,语义分析,中间代码产生,代码优化,目标代码产生。
下面对这几个过程详细讲解:
1 词法分析:词法分析是第一阶段,这个阶段的任务是从左到右一个字符一个字符的读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。
2 语法分析:语法分析的任务是在词法分析的基础上将单词程序分解成各位语法短语。
3 语义分析:语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。
4 中间代码生成:在进行了上述的语法分析阶段等工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。
中间代码生成阶段要在语法和语义分析的基础上,将源程序进一步变为一种内部表示形式,它通常易于生成、易于翻译成目标代码,不过不是所有的语言都必须经过这一步。
5 代码优化:这一阶段的任务是对前一阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效。
代码优化阶段,对前阶段生成的中间代码进行变换或改造,以便生成目标代码时更加节省时间和空间,这一工作也不是必须的。
6 目标代码生成:这一阶段的任务是吧中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
解释程序和编译程序的区别:
编译程序能生成目标程序,解释程序不能。
解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间表示形式后再加以执行;
编译程序(编译器)则是将源程序翻译成目标语言程序,然后在计算机上运行目标程序。
两种语言处理程序的根本区别是:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程,而在解释方式下,解释程序和源程序(或某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。
解释器翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立的目标程序。
编译程序能生成目标程序,而解释程序不能。
补充总结:
1、编译程序是整体编译完了,再一次性执行。
2、而解释程序是一边解释,一边执行。 解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,copy说一句翻一句,不产生全文的翻译文本。
3、编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程zhidao序,速度很快。
4、而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的。这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)