欢迎来到天天文库
浏览记录
ID:57173432
大小:685.50 KB
页数:18页
时间:2020-08-02
《编译原理第7章中间语言课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、----语义分析之二第7章中间代码及其翻译7.1常用的中间代码形式示例7.2各种语法成分的中间代码设计7.3中间代码翻译算法7.4中间代码翻译的实现中间代码是高级程序语言中,各种语法成分的语义结构表示;它介于源语言和目标语言之间。中间代码设置的目的是便于编译的后期处理(如优化和目标生成)。源语言目标语言两小步一大步内容提要中间代码7.1常用的中间代码形式※设有赋值语句:x=a*b+c则:⑴逆波兰式:xab*c+=⑵四元式:⑴(*abt1)⑵(+t1ct2)⑶(=t2_x)⑶三元式:①(*ab)②(+①c)③(=②x)⑷语
2、义树:=x+*cab※简单比较之,各有所长:逆波兰式简单;四元式清楚;三元式节省;语义树直观。或⑴t1=a*b⑵t2=t1+c⑶x=t27.2各种语法成分的中间代码设计7.2.1逆波兰式逆波兰式是一位波兰学者发明的,最初用于表达式的语义表式;基本形式如:源表达式逆波兰式a+b=>Ⅰ.表达式的逆波兰式设计设pos(E)为表达式E的逆波兰式;其中:ω(运算符),i运算对象(变量或常量)①pos(E1ωE2)=pos(E1)pos(E2)ω②pos((E))=pos(E)③pos(i)=i⑴方框内的三个定义式,为逆兰式翻译法则
3、;⑵定义式中的ω为E1ωE2中最后运算的算符!则:【注】ab+※表达式逆波兰式翻译示例:【例7.1】x*(a+b/d)<(-e+5),pos()?=x∵pos(x*(a+b/d)<(-e+5))=pos(x*(a+b/d))=x-=xa∴pos()=xabd/+*e5+<=xabd/+*-【注】单目运算的逆波兰式:pos(-e)=e-为便于与双目运算符相区别,这里用代之。-pos(-e+5)<*pos(-e+5)<+*5+4、⑵赋值语句的逆波兰式Ⅱ.其他语法成分的逆波兰式设计示例:【定义】v=E=>vpos(E)=⑴单目运算“-”的逆波兰式改写单目算符“-”=>“-”【定义】pos(-E)=>pos(E)-或0pos(E)-例7.2x=(a+b)/-e*5,∵pos(x=(a+b)/-e*5)=xpos((a+b)/-e*5)==xpos((a+b)/-e)pos(5)*=xpos((a+b))pos(-e)/5*==pos()?=xab+e/5*=-∴pos()=-xab+e/5*=7.2.2四元式Ⅰ.表达式的四元式设计:设quat(E),5、res(E)⑴方框内的三个定义式,为四元式翻译法则;⑵定义式中的ω为E1ωE2中最后运算的算符!则:【注】其中:ω(运算符);i运算对象(变量或常数)②quat((E))=quat(E)③quat(i)=空,res(i)=iq:(ωres(E1)res(E2)ti)※基本形式q:(ωo1o2t)分别为表达式E的四元式和结果变量。①quat(E1ωE2)=quat(E1)算符,对象1,对象2,结果quat(E2)※表达式四元式翻译示例:【例7.3】a+b*(c-d)=>quat(a),quat(a+b*(c-d))∵qua6、t(b*(c-d)),q(+res(a)res(b*(c-d))t)空quat(b),quat((c-d)),q(*res(b)res(c-d)t)空q(-cdt1),q(*q(+⑴(-cdt1)⑵(*bt1t2)⑶(+at2t3)※按最终结果的生成顺序,可得:⑴⑵⑶t1t2),at2t3).b※表达式逆波兰式和四元式最简翻译算法示例:【例7.4】(a+b/d)7、+efg-*<【四元式生成要点】:※按照运算法则,依次生成四元式!则:quat()=⑴(/bdt1)⑵(+at1t2)⑶(-fgt3)⑷(*et3t4)⑸(∵四元式结构:quat(E),q(=res(E)_v).∴四元式:⑴(-bct1)⑵(*at1t2)⑶(+det3)⑷(/t2t3t4)⑸(:=t4_x)quat(v=E)=q(:=res(E)_v)quat(E),语句标号为转向语句提供转入语句标识,8、二者用标号相关联。Ⅲ.转向语句与语句标号的四元式设计则有i:S=>q(lb__i),⑴设有转向语句:gotoi则有gotoi=>q(gt__i)【例7.4】gotoi;…i:x=(a+b)/c;则有四元式序列:⑴(gt__i)…⑾(:=t2_x)⑽(/t1ct2)⑻(lb__i)⑼(+abt1)⑵设有标号语句:i:S
4、⑵赋值语句的逆波兰式Ⅱ.其他语法成分的逆波兰式设计示例:【定义】v=E=>vpos(E)=⑴单目运算“-”的逆波兰式改写单目算符“-”=>“-”【定义】pos(-E)=>pos(E)-或0pos(E)-例7.2x=(a+b)/-e*5,∵pos(x=(a+b)/-e*5)=xpos((a+b)/-e*5)==xpos((a+b)/-e)pos(5)*=xpos((a+b))pos(-e)/5*==pos()?=xab+e/5*=-∴pos()=-xab+e/5*=7.2.2四元式Ⅰ.表达式的四元式设计:设quat(E),
5、res(E)⑴方框内的三个定义式,为四元式翻译法则;⑵定义式中的ω为E1ωE2中最后运算的算符!则:【注】其中:ω(运算符);i运算对象(变量或常数)②quat((E))=quat(E)③quat(i)=空,res(i)=iq:(ωres(E1)res(E2)ti)※基本形式q:(ωo1o2t)分别为表达式E的四元式和结果变量。①quat(E1ωE2)=quat(E1)算符,对象1,对象2,结果quat(E2)※表达式四元式翻译示例:【例7.3】a+b*(c-d)=>quat(a),quat(a+b*(c-d))∵qua
6、t(b*(c-d)),q(+res(a)res(b*(c-d))t)空quat(b),quat((c-d)),q(*res(b)res(c-d)t)空q(-cdt1),q(*q(+⑴(-cdt1)⑵(*bt1t2)⑶(+at2t3)※按最终结果的生成顺序,可得:⑴⑵⑶t1t2),at2t3).b※表达式逆波兰式和四元式最简翻译算法示例:【例7.4】(a+b/d)7、+efg-*<【四元式生成要点】:※按照运算法则,依次生成四元式!则:quat()=⑴(/bdt1)⑵(+at1t2)⑶(-fgt3)⑷(*et3t4)⑸(∵四元式结构:quat(E),q(=res(E)_v).∴四元式:⑴(-bct1)⑵(*at1t2)⑶(+det3)⑷(/t2t3t4)⑸(:=t4_x)quat(v=E)=q(:=res(E)_v)quat(E),语句标号为转向语句提供转入语句标识,8、二者用标号相关联。Ⅲ.转向语句与语句标号的四元式设计则有i:S=>q(lb__i),⑴设有转向语句:gotoi则有gotoi=>q(gt__i)【例7.4】gotoi;…i:x=(a+b)/c;则有四元式序列:⑴(gt__i)…⑾(:=t2_x)⑽(/t1ct2)⑻(lb__i)⑼(+abt1)⑵设有标号语句:i:S
7、+efg-*<【四元式生成要点】:※按照运算法则,依次生成四元式!则:quat()=⑴(/bdt1)⑵(+at1t2)⑶(-fgt3)⑷(*et3t4)⑸(∵四元式结构:quat(E),q(=res(E)_v).∴四元式:⑴(-bct1)⑵(*at1t2)⑶(+det3)⑷(/t2t3t4)⑸(:=t4_x)quat(v=E)=q(:=res(E)_v)quat(E),语句标号为转向语句提供转入语句标识,
8、二者用标号相关联。Ⅲ.转向语句与语句标号的四元式设计则有i:S=>q(lb__i),⑴设有转向语句:gotoi则有gotoi=>q(gt__i)【例7.4】gotoi;…i:x=(a+b)/c;则有四元式序列:⑴(gt__i)…⑾(:=t2_x)⑽(/t1ct2)⑻(lb__i)⑼(+abt1)⑵设有标号语句:i:S
此文档下载收益归作者所有