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