编译原理过程简述及中间代码优化

一、编译过程图示如下:

编译原理过程简述及中间代码优化_第1张图片

词法分析作用:找出单词 。如int a=b+c; 结果为: int,a,=,b,+,c和;
语法分析作用:找出表达式,程序段,语句等。如int a=b=c;的语法分析结果为int a=b+c这条语句。
语义分析作用:查看类型是否匹配等。

二、中间代码优化

所谓代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码(如四元式代码),也可以是目标代码。等价的含义是使得变换后的代码运行结果与变换前代码运行结果相同。优化的含义是最终生成的目标代码短(运行时间更短、占用空间更小),时空效率优化。原则上,优化可以在编译的各个阶段进行,但最主要的一类是对中间代码进行优化,这类优化不依赖于具体的计算机。

优化目的:在不改变程序运行效果的前提下,对被编译的程序进行等价变换,使之能生成更加高效的目标代码。

优化原则

等价原则。经过优化后不应该改变程序运行的结果。
等效原则。使优化后所产生的目标代码运行时间较短,占用的储存空间较小。
合算原则。应尽可能以较低的代价取得较好的优化效果。

附:

循环优化代码外提
将在循环入口设置基本块,把循环中的循环不变运算提入基本块,且提入部分必须为循环出口必经运算。如图:

编译原理过程简述及中间代码优化_第2张图片

PS:
1、 代码优化就是对程序进行等价变换,以提高目标程序的效率,通常只对中间代码进行优化。通常包括控制流分析、数据流分析和变换三部分。
2、 以程序的基本块为基础,基本块内的优化叫局部优化,跨基本块的优化为全局优化,循环优化是针对循环进行的优化,是全局优化的一部分。
3、 公共子表达式的删除、复制传播、无用代码删除、代码外提、强度削弱和归纳变量删除等都是一些常用的针对局部或者全局的代码优化方法。

你可能感兴趣的:(编译原理)