...何谓中间代码(Intermediatecode)(Intermediaterepresentation)(Intermediatelanguage)源程序的一种内部表示,不依赖目标机的结构,易于机械生成目标代码的中间表示。为什麽要此阶段逻辑结构清楚;利于不同目标机上实现同一种语言;利于进行与机器无关的优化;这些内部形式也能用于解释。中间代码的几种形式逆波兰四元式三元式间接三元式树7.3中间代码生成中间代码生成•中间代码的形式•中间代码生成7.3.1中间代码de形式•中间代码:•是源程序的一种内部表示•复杂性介于源语言和目标机语言之间•中间代码的作用:•使编译程序的逻辑结构更加简单明确•利于进行与目标机无关的优化•利于在不同目标机上实现同一种语言•中间代码的形式:逆波兰式、四元式、三元式、间接三元式、抽象语法树和DAG中间代码的层次中间代码按照其与高级语言和机器语言的接近程度,可以分成以下三个层次:•高级:最接近高级语言,保留了大部分源语言的结构。•中级:介于二者之间,与源语言和机器语言都有一定差异。•低级:最接近机器语言,能够反映目标机的系统结构,因而经常依赖于目标机。不同层次的中间代码源语言(高级语言)中间代码(高级)中间代码(中级)中间代码(低级)floata[10][20];a[i][j+2];t1=a[i,j+2]t1=j+2t2=i*20t3=t1+t2t4=4*t3t5=addrat6=t5+t4t7=*t6r1=[fp-4]r2=[r1+2]r3=[fp-8]r4=r3*20r5=r4+r2r6=4*r5r7=fp–216f1=[r7+r6]逆波兰:ABCD-*+ECD–N^/+四元式:(1)(-CDT1)(2)(*BT1T2)(3)(+AT2T3)(4)(-CDT4)(5)(^T4NT5)(6)(/ET5T6)(7)(+T3T6T7)例:A+B*(C-D)+E/(C-D)^N三元式:(1)(-CD)(2)(*B(1))(3)(+A(2))(4)(-CD)(5)(^(4)N)(6)(/E(5))(7)(+(3)(6))例:A+B*(C-D)+E/(C-D)^N间接三元式:间接三元式序列间接码表(1)(-CD)(1)(2)(*B(1))(2)(3)(+A(2))(3)(4)(^(1)N)(1)(5)(/E(4))(4)(6)(+(3)(5))(5)(6)例:A+B*(C-D)+E/(C-D)^N抽象语法树和DAG图语法树可以作为一种合适的中间语言形式。在语法树中去掉那些对翻译不必要的信息,从而获得更有效的源程序中间表示。这种经变换后的语法树称之为抽象语法树(AbstractSyntaxTree)。在抽象语法树中,操作符和关键字都不作为叶结点出现,而是把它们作为内部结点,即这些叶结点的父结点如产生式S→ifBthenS1elseS2抽象语法树表示if-then-elseBS1S2语法树和抽象语法树directedacyclicgraph(DAG).b*c+b*c+*bc7.3.2简单赋值语句的(四元式)翻译四元式形式:result:=arg1oparg2语义属性:id.name,E.plac...