上篇我们介绍了什么是编译程序,简单提到了这个“工厂”工作的六个阶段。本篇介绍一下这六个阶段。
“工厂”导航图(翻译工作的过程):
流水线一--词法分析:
也就是从左到右一个一个的读入源程序,识别一个单词或符号,并进行归类。类似分析汉语语法,例如,我们输入一句话,我是中国人。然后进行分析,读入我可以识别这个单词,为名词,我就归到名词这类;读入是,我们归到动词这类;读入中字,不能构成一个可识别的东东,接着读入,中国人,为名词类。而在计算机中,例如我们写的某行代码,var sum = first + count*10 ; 进行分类,1保留字:var;标识符:2 sum 3 first 4 count 乘号:5*;
流水线二--语法分析:
在词法分析的基础上,将单词序列分解成各类语法短语,如“程序”,“语句”,“表达式”等。例如通过上面的单词“我”“中国人”“是”,可以构成两种形式的语句,我是中国人,中国人是我,都符合<主语><谓语>这样的语法。
流水线三--语义分析:
审查源程序是否有语义的错误,当不符合语言规范的时候,程序就会报错。例如上面的“我是中国人”和“中国人是我”两个句子,显然后面的中国人是我就不符合语义了。
流水线四--中间代码生成:
在进行了语法和语义的分析工作之后,编译程序将源程序变成了一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。(比较抽象些),个人理解为,生成一种介于源码和机器语言的形式。
流水线五--代码优化:
这个阶段是对前阶段的中间代码进行变换或改造,目的是使生成的目标代码更为高效,即节省时间和空间。
流水线六--目标代码生成:
也就是把优化后的中间代码变换成指令代码或汇编代码。是工作的最后阶段,与硬件系统结构,指令系统相关,涉及到硬件系统功能部件运用、机器指令的选择等等。
编译程序编译性质的语言的翻译程序,而解释程序,相对编译程序简单些,因为解释型语言不需要把源程序翻译成目标代码,也是取分析执行源代码语句,一但一个语句分析结束,就直接运行并显示结果了。