ImageVerifierCode 换一换
格式:PPTX , 页数:116 ,大小:433.70KB ,
资源ID:4173764      下载积分:5 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4173764.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     索取发票    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(语义分析和中间代码产生.pptx)为本站上传会员【w****g】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

语义分析和中间代码产生.pptx

1、国防科技大学计算机系国防科技大学计算机系602教研室教研室n中间语言中间语言(复杂性界于源语言和目标语言复杂性界于源语言和目标语言之间之间)的好处:的好处:便于进行与机器无关的代码优化工作便于进行与机器无关的代码优化工作易于移植易于移植使编译程序的结构在逻辑上更为简单明确使编译程序的结构在逻辑上更为简单明确源语言源语言程序程序目标语目标语言程序言程序中间语中间语言程序言程序CompilerFront EndCompilerBack End国防科技大学计算机系国防科技大学计算机系602教研室教研室n常用的中间语言:常用的中间语言:后缀式,逆波兰表示后缀式,逆波兰表示图表示:图表示:DAG、抽象语

2、法树、抽象语法树三地址代码三地址代码n三元式三元式n四元式四元式n间接三元式间接三元式7.1中间语言中间语言国防科技大学计算机系国防科技大学计算机系602教研室教研室7.1.1 7.1.1 后缀式后缀式 n后后缀缀式式表表示示法法:Lukasiewicz发发明明的的一一种种表表示示表达式的方法,又称表达式的方法,又称逆波兰逆波兰表示法。表示法。n一个表达式一个表达式E的后缀形式可以如下定义:的后缀形式可以如下定义:1.如果如果E是一个变量或常量,则是一个变量或常量,则E的后缀式是的后缀式是E自自身。身。2.如果如果E是是E1opE2形式的表达式,其中形式的表达式,其中op是任是任何二元操作符,

3、则何二元操作符,则E的后缀式为的后缀式为E1 E2 op,其其中中E1 和和E2 分别为分别为E1和和E2的后缀式。的后缀式。3.如果如果E是是(E1)形式的表达式,则形式的表达式,则E1的后缀式就的后缀式就是是E的后缀式。的后缀式。国防科技大学计算机系国防科技大学计算机系602教研室教研室n逆逆波波兰兰表表示示法法不不用用括括号号。只只要要知知道道每每个个算算符符的的目目数数,对对于于后后缀缀式式,不不论论从从哪哪一一端进行扫描,都能对它进行唯一分解。端进行扫描,都能对它进行唯一分解。n后缀式的计算后缀式的计算用一个栈实现。用一个栈实现。一一般般的的计计算算过过程程是是:自自左左至至右右扫扫

4、描描后后缀缀式式,每每碰碰到到运运算算量量就就把把它它推推进进栈栈。每每碰碰到到k目目运运算算符符就就把把它它作作用用于于栈栈顶顶的的k个个项项,并并用用运运算算结果代替这结果代替这k个项个项。国防科技大学计算机系国防科技大学计算机系602教研室教研室把表达式翻译成后缀式的语义规则描述把表达式翻译成后缀式的语义规则描述产生式产生式EE(1)op E(2)E(E(1)Eid语义动作语义动作E.code:=E(1).code|E(2).code|opE.code:=E(1).codeE.code:=idE.code表示表示E后缀形式后缀形式op表示任意二元操作符表示任意二元操作符“|”表示后缀形式

5、的连接表示后缀形式的连接。国防科技大学计算机系国防科技大学计算机系602教研室教研室n数组数组POST存放后缀式:存放后缀式:k为下标,初值为为下标,初值为1n上述语义动作可实现为:上述语义动作可实现为:产生式产生式程序段程序段EE(1)opE(2)POSTk:=op;k:=k+1E(E(1)EiPOSTk:=i;k:=k+1n例:输入串例:输入串a+b+c的分析和翻译的分析和翻译POST:12345EE(1)op E(2)E.code:=E(1).code|E(2).code|opE(E(1)E.code:=E(1).codeEidE.code:=idab+c+国防科技大学计算机系国防科技大

6、学计算机系602教研室教研室7.1.2图表示法图表示法n图表示法图表示法DAG抽象语法树抽象语法树国防科技大学计算机系国防科技大学计算机系602教研室教研室7.1.2图表示法图表示法n无循环有向图无循环有向图(DirectedAcyclicGraph,简称简称DAG)对表达式中的每个子表达式,对表达式中的每个子表达式,DAG中都有一个中都有一个结点结点一个一个内部结点内部结点代表一个代表一个操作符操作符,它的孩子代表,它的孩子代表操作数操作数在一个在一个DAG中代表公共子表达式的结点具有多中代表公共子表达式的结点具有多个父结点个父结点国防科技大学计算机系国防科技大学计算机系602教研室教研室a

7、:=b*(-c)+b*(-c)的图表示法的图表示法assigna+*buminuscDAGassigna+*buminusc抽象语法树抽象语法树*buminusc国防科技大学计算机系国防科技大学计算机系602教研室教研室抽象语法树抽象语法树对应的代码:对应的代码:T1:=-c T2:=b*T1T3:=-c T4:=b*T3 T5:=T2+T4 a:=T5assigna+*buminusc抽象语法树抽象语法树*buminusc国防科技大学计算机系国防科技大学计算机系602教研室教研室DAG对应的代码:对应的代码:T1:=-cT2:=b*T1T5:=T2+T2a:=T5assigna+*bumin

8、uscDAG抽象语法树抽象语法树对应的代码:对应的代码:T1:=-c T2:=b*T1T3:=-c T4:=b*T3 T5:=T2+T4 a:=T5国防科技大学计算机系国防科技大学计算机系602教研室教研室产生赋值语句抽象语法树的属性文法产生赋值语句抽象语法树的属性文法产产生生式式语义规则语义规则Sid:=ES.nptr:=mknode(assign,mkleaf(id,id.place),E.nptr)EE1+E2E.nptr:=mknode(+,E1.nptr,E2.nptr)EE1*E2E.nptr:=mknode(*,E1.nptr,E2.nptr)E-E1 E.nptr:=mknod

9、e(uminus,E1.nptr)E(E1)E.nptr:=E1.nptrEidE.nptr:=mkleaf(id,id.place)国防科技大学计算机系国防科技大学计算机系602教研室教研室7.1.3三地址代码三地址代码n三地址代码三地址代码x:=yopzn三地址代码可以看成是抽象语法树或三地址代码可以看成是抽象语法树或DAG的一种线性表示的一种线性表示国防科技大学计算机系国防科技大学计算机系602教研室教研室a:=b*(-c)+b*(-c)的图表示法的图表示法assigna+*buminuscDAGassigna+*buminusc抽象语法树抽象语法树*buminusc国防科技大学计算机系

10、国防科技大学计算机系602教研室教研室 T1:=-cT1:=-c T2:=b*T1T2:=b*T1T3:=-cT5:=T2+T2 T4:=b*T3a:=T5 T5:=T2+T4a:=T5对于抽象语法树的代码对于抽象语法树的代码对于对于DAG的代码的代码国防科技大学计算机系国防科技大学计算机系602教研室教研室三地址语句的种类三地址语句的种类nx:=yopznx:=opynx:=yngotoLnifxrelopygotoL或或ifagotoLnparamx和和callp,n,以及返回语句以及返回语句returnynx:=yi及及xi:=y的索引赋值的索引赋值nx:=&y,x:=*y和和*x:=y

11、的地址和指针赋值的地址和指针赋值国防科技大学计算机系国防科技大学计算机系602教研室教研室n生成三地址代码时,临时变量的名字对应生成三地址代码时,临时变量的名字对应抽象语法树的内部结点抽象语法树的内部结点nid:=E对表达式对表达式E求值并置于变量求值并置于变量T中值中值id.place:=T国防科技大学计算机系国防科技大学计算机系602教研室教研室从赋值语句生成三地址代码的从赋值语句生成三地址代码的S-属性文法属性文法n非终结符号非终结符号S有综合属性有综合属性S.code,它代表赋它代表赋值语句值语句S的三地址代码。的三地址代码。n非终结符号非终结符号E有如下两个属性:有如下两个属性:E.

12、place表示存放表示存放E值的名字。值的名字。E.code表示对表示对E求值的三地址语句序列。求值的三地址语句序列。函函数数newtemp的的功功能能是是,每每次次调调用用它它时时,将将返返回一个不同临时变量名字回一个不同临时变量名字,如如T1,T2,。国防科技大学计算机系国防科技大学计算机系602教研室教研室为赋值语句生成三地址代码的为赋值语句生成三地址代码的S-属性文法定义属性文法定义产生式产生式语义规则语义规则Sid:=ES.code:=E.code|gen(id.place:=E.place)EE1+E2E.place:=newtemp;E.code:=E1.code|E2.code

13、|gen(E.place:=E1.place+E2.place)EE1*E2E.place:=newtemp;E.code:=E1.code|E2.code|gen(E.place:=E1.place*E2.place)E-E1E.place:=newtemp;E.code:=E1.code|gen(E.place:=uminusE1.place)E(E1)E.place:=E1.place;E.code:=E1.codeEid E.place:=id.place;E.code=国防科技大学计算机系国防科技大学计算机系602教研室教研室三地址语句三地址语句n四元式四元式一个带有四个域的记录结构

14、,这四个域分别一个带有四个域的记录结构,这四个域分别称为称为op,arg1,arg2及及resultoparg1arg2result(0)uminuscT1(1)*bT1T2(2)uminuscT3(3)*bT3T4(4)+T2T4T5(5):=T5a国防科技大学计算机系国防科技大学计算机系602教研室教研室三地址语句三地址语句n三元式三元式通过计算临时变量值的语句的位置来引用这通过计算临时变量值的语句的位置来引用这个临时变量个临时变量三个域:三个域:op、arg1和和arg2oparg1arg2(0)uminusc(1)*b(0)(2)uminusc(3)*b(2)(4)+(1)(3)(5)

15、assigna(4)国防科技大学计算机系国防科技大学计算机系602教研室教研室三地址语句三地址语句nxi:=yoparg1arg2(0)=xi(1)ynx:=yioparg1arg2(0)=yi(1)assign x(0)国防科技大学计算机系国防科技大学计算机系602教研室教研室三地址语句三地址语句n间接三元式间接三元式为为了了便便于于优优化化,用用三三元元式式表表+间间接接码码表表表表示示中间代码中间代码间间接接码码表表:一一张张指指示示器器表表,按按运运算算的的先先后后次次序列出有关三元式在三元式表中的位置。序列出有关三元式在三元式表中的位置。优点优点:方便优化,节省空间方便优化,节省空间

16、国防科技大学计算机系国防科技大学计算机系602教研室教研室n例如,语句例如,语句X:=(A+B)*C;Y:=D(A+B)的间接三元式表示如下表所示。的间接三元式表示如下表所示。国防科技大学计算机系国防科技大学计算机系602教研室教研室7.2说明语句说明语句国防科技大学计算机系国防科技大学计算机系602教研室教研室7.3赋值语句的翻译赋值语句的翻译n7.3.1简单算术表达式及赋值语句简单算术表达式及赋值语句国防科技大学计算机系国防科技大学计算机系602教研室教研室为赋值语句生成三地址代码的为赋值语句生成三地址代码的S-属性文法定义属性文法定义产生式产生式语义规则语义规则Sid:=ES.code:

17、=E.code|gen(id.place:=E.place)EE1+E2E.place:=newtemp;E.code:=E1.code|E2.code|gen(E.place:=E1.place+E2.place)EE1*E2E.place:=newtemp;E.code:=E1.code|E2.code|gen(E.place:=E1.place*E2.place)E-E1E.place:=newtemp;E.code:=E1.code|gen(E.place:=uminusE1.place)E(E1)E.place:=E1.place;E.code:=E1.codeEid E.place

18、:=id.place;E.code=国防科技大学计算机系国防科技大学计算机系602教研室教研室产生赋值语句三地址代码的翻译模式产生赋值语句三地址代码的翻译模式Sid:=Ep:=lookup(id.name);ifp nilthenemit(p:=E.place)elseerrorEE1+E2E.place:=newtemp;emit(E.place:=E1.place+E2.place)EE1*E2E.place:=newtemp;emit(E.place:=E1.place*E2.place)Sid:=ES.code:=E.code|gen(id.place:=E.place)EE1+E2E

19、.place:=newtemp;E.code:=E1.code|E2.code|gen(E.place:=E1.place+E2.place)EE1*E2E.place:=newtemp;E.code:=E1.code|E2.code|gen(E.place:=E1.place*E2.place)国防科技大学计算机系国防科技大学计算机系602教研室教研室产生赋值语句三地址代码的翻译模式产生赋值语句三地址代码的翻译模式E-E1E.place:=newtemp;emit(E.place:=uminusE1.place)E(E1)E.place:=E1.placeEidp:=lookup(id.na

20、me);ifp nilthenE.place:=pelseerrorE-E1E.place:=newtemp;E.code:=E1.code|gen(E.place:=uminusE1.place)E(E1)E.place:=E1.place;E.code:=E1.codeEidE.place:=id.place;E.code=国防科技大学计算机系国防科技大学计算机系602教研室教研室7.3.2数组元素的引用数组元素的引用n数组元素地址的计算:数组元素地址的计算:国防科技大学计算机系国防科技大学计算机系602教研室教研室n设设A为为n维数组,每个元素宽度为维数组,每个元素宽度为w,lowi为第

21、为第i维维的下界,的下界,ni是为第是为第i维维可取值的个可取值的个数数,base为为A的第一个元素相对地址的第一个元素相对地址n元素元素Ai1,i2,ik相对地址公式相对地址公式(i1n2+i2)n3+i3)nk+ik)w+base-(low1n2+low2)n3+low3)nk+lowk)wnC=base-(low1n2+low2)n3+low3)nk+lowk)w国防科技大学计算机系国防科技大学计算机系602教研室教研室nid出现的地方也允许下面产生式中的出现的地方也允许下面产生式中的L出现出现LidElist|idElistElist,E|E为了便于处理,文法改写为为了便于处理,文法改

22、写为LElist|idElistElist,E|idE国防科技大学计算机系国防科技大学计算机系602教研室教研室n引入下列语义变量或语义过程引入下列语义变量或语义过程:Elist.ndim:下标个数计数器下标个数计数器Elist.place:表表示示临临时时变变量量,用用来来临临时时存存放放已形成的已形成的Elist中的下标表达式计算出来的值中的下标表达式计算出来的值limit(array,j):函函数数过过程程,它它给给出出数数组组array的第的第j维的长度维的长度国防科技大学计算机系国防科技大学计算机系602教研室教研室n每个代表变量的非终结符每个代表变量的非终结符L有两项语义值有两项语

23、义值L.place:n若若L为为简单变量简单变量i,指变量指变量i的符号表入口的符号表入口n若若L为为下标变量下标变量,指存放,指存放CONSPART的的临时临时变量的整数码变量的整数码L.offset:n若若L为为简单变量简单变量,null,n若若L为为下标变量下标变量,指存放,指存放VARPART的临时变的临时变量的整数码量的整数码国防科技大学计算机系国防科技大学计算机系602教研室教研室(1)SL:=E(2)EE+E(3)E(E)(4)EL(5)LElist(6)Lid(7)ElistElist,E(8)ElistidE国防科技大学计算机系国防科技大学计算机系602教研室教研室(1)SL

24、:=EifL.offset=nullthen/*L是简单变量是简单变量*/emit(L.place:=E.place)elseemit(L.placeL.offset:=E.place)(2)EE1+E2E.place:=newtemp;emit(E.place:=E1.place+E2.place)国防科技大学计算机系国防科技大学计算机系602教研室教研室(3)E(E1)E.place:=E1.place(4)ELifL.offset=nullthenE.place:=L.placeelsebeginE.place:=newtemp;emit(E.place:=L.placeL.offset

25、)end国防科技大学计算机系国防科技大学计算机系602教研室教研室Ai1,i2,ik(i1n2+i2)n3+i3)nk+ik)w+base-(low1n2+low2)n3+low3)nk+lowk)w(8)ElistidEElist.place:=E.place;Elist.ndim:=1;Elist.array:=id.place国防科技大学计算机系国防科技大学计算机系602教研室教研室Ai1,i2,ik(i1n2+i2)n3+i3)nk+ik)w+base-(low1n2+low2)n3+low3)nk+lowk)w(7)ElistElist1,E t:=newtemp;m:=Elist1

26、.ndim+1;emit(t:=Elist1.place*limit(Elist1.array,m);emit(t:=t+E.place);Elist.array:=Elist1.array;Elist.place:=t;Elist.ndim:=m国防科技大学计算机系国防科技大学计算机系602教研室教研室Ai1,i2,ik(i1n2+i2)n3+i3)nk+ik)w+base-(low1n2+low2)n3+low3)nk+lowk)w(5)LElistL.place:=newtemp;emit(L.place:=Elist.arrayC);L.offset:=newtemp;emit(L.o

27、ffset:=w*Elist.place)(6)LidL.place:=id.place;L.offset:=null国防科技大学计算机系国防科技大学计算机系602教研室教研室类型转换类型转换n用用E.type表示非终结符表示非终结符E的类型属性的类型属性n对应产生式对应产生式EE1opE2的语义动作中关于的语义动作中关于E.type的语义规则可定义为:的语义规则可定义为:ifE1.type=integerand E2.type=integerE.type:=integerelseE.type:=realn算算符符区区分分为为整整型型算算符符intop和和实实型型算算符符realop,国防科技

28、大学计算机系国防科技大学计算机系602教研室教研室nx:=yi*j其其中中x、y为为实实型型;i、j为为整整型型。这这个个赋赋值值句句产生的三地址代码为:产生的三地址代码为:T1:=iint*jT3:=inttorealT1T2:=yreal+T3x:=T2国防科技大学计算机系国防科技大学计算机系602教研室教研室关于产生式关于产生式EE1E2的语义动作的语义动作E.place:=newtemp;ifE1.type=integerandE2.type=integerthenbeginemit(E.place:=E1.placeint+E2.place);E.type:=integerendel

29、seifE1.type=realandE2.type=realthenbeginemit(E.place:=E1.placereal+E2.place);E.type:=realend国防科技大学计算机系国防科技大学计算机系602教研室教研室elseifE1.type=integerandE2.type=realthenbeginu:=newtemp;emit(u:=inttorealE1.place);emit(E.place:=ureal+E2.palce);E.type:=realendelseifE1.type=realandE1.type=integerthenbeginu:=new

30、temp;emit(u:=inttorealE2.place);emit(E.place:=E1.placereal+u);E.type:=realendelseE.type:=type_error国防科技大学计算机系国防科技大学计算机系602教研室教研室7.3.3记录中域的引用记录中域的引用n符号表表项之中保存记录中的域的类型和符号表表项之中保存记录中的域的类型和相对地址信息相对地址信息国防科技大学计算机系国防科技大学计算机系602教研室教研室7.4布尔表达式的翻译布尔表达式的翻译n布尔表达式的两个基本作用布尔表达式的两个基本作用:用于逻辑演算用于逻辑演算,计算逻辑值计算逻辑值;用于控制语句

31、的条件式用于控制语句的条件式.n产生布尔表达式的文法产生布尔表达式的文法:EEorE|EandE|E|(E)|iropi|i国防科技大学计算机系国防科技大学计算机系602教研室教研室n计算布尔表达式通常采用两种方法计算布尔表达式通常采用两种方法:1.如同计算算术表达式一样如同计算算术表达式一样,一步步算一步步算1or(not0and0)or0=1or(1and0)or0=1or0or0=1or0=12.采用某种优化措施采用某种优化措施把把AorB解释成解释成ifAthentrueelseB把把AandB解释成解释成ifAthenBelsefalse把把 A解释成解释成ifAthenfalsee

32、lsetrue国防科技大学计算机系国防科技大学计算机系602教研室教研室两种不同的翻译方法两种不同的翻译方法:n第一种翻译法:第一种翻译法:AorBandC=D翻译成翻译成(1)(=,C,D,T1)(2)(and,B,T1,T2)(3)(or,A,T2,T3)n第第二二种种翻翻译译法法适适合合于于作作为为条条件件表表达达式式的的布尔表达式使用布尔表达式使用.国防科技大学计算机系国防科技大学计算机系602教研室教研室7.4.1数值表示法数值表示法naorbandnotc翻译成翻译成T1:=notcT2:=bandT1T3:=aorT1nab的关系表达式可等价地写成的关系表达式可等价地写成ifab

33、then1else0,翻译成翻译成 100:ifabgoto103101:T:=0102:goto104103:T:=1104:国防科技大学计算机系国防科技大学计算机系602教研室教研室关于布尔表达式的数值表示法的翻译模式关于布尔表达式的数值表示法的翻译模式n过程过程emit将三地址代码送到输出文件中将三地址代码送到输出文件中nnextstat给出输出序列中下一条三地址语句的给出输出序列中下一条三地址语句的地址索引地址索引n每产生一条三地址语句后,过程每产生一条三地址语句后,过程emit便把便把nextstat加加1国防科技大学计算机系国防科技大学计算机系602教研室教研室关于布尔表达式的数值

34、表示法的翻译模式关于布尔表达式的数值表示法的翻译模式EE1orE2E.place:=newtemp;emit(E.place:=E1.placeorE2.place)EE1andE2E.place:=newtemp;emit(E.place:=E1.placeandE2.place)EnotE1E.place:=newtemp;emit(E.place:=notE1.place)E(E1)E.place:=E1.place国防科技大学计算机系国防科技大学计算机系602教研室教研室关于布尔表达式的数值表示法的翻译模式关于布尔表达式的数值表示法的翻译模式Eid1relopid2E.place:=n

35、ewtemp;emit(ifid1.placerelop.opid2.placegotonextstat+3);emit(E.place:=0);emit(gotonextstat+2);emit(E.place:=1)EidE.place:=id.placeab翻译成翻译成100:ifabgoto103101:T:=0102:goto104103:T:=1104:国防科技大学计算机系国防科技大学计算机系602教研室教研室布尔表达式布尔表达式aborcdandef的翻译结果的翻译结果100:ifabgoto103101:T1:=0102:goto104103:T1:=1104:ifcdgoto

36、107105:T2:=0106:goto108107:T2:=1108:ifecorbcgotoL2“真真”出口出口gotoL1L1:ifbdgotoL2“真真”出口出口gotoL3“假假”出口出口L2:(关于关于S1的三地址代码序列的三地址代码序列)gotoLnextL3:(关于关于S2的三地址代码序列的三地址代码序列)Lnext:国防科技大学计算机系国防科技大学计算机系602教研室教研室n每次调用函数每次调用函数newlabel后都返回一个新的后都返回一个新的符号标号符号标号n对于一个布尔表达式对于一个布尔表达式E,引用两个标号引用两个标号E.true是是E为为真真时控制流转向的标号时控制

37、流转向的标号E.false是是E为为假假时控制流转向的标号时控制流转向的标号国防科技大学计算机系国防科技大学计算机系602教研室教研室产生布尔表达式三地址代码的语义规则产生布尔表达式三地址代码的语义规则产生式产生式语义规则语义规则EE1orE2E1.true:=E.true;E1.false:=newlabel;E2.true:=E.true;E2.false:=E.false;E.code:=E1.code|gen(E1.false:)|E2.codeE1.codeTo E.trueTo E1.falseE2.codeTo E.trueTo E.false国防科技大学计算机系国防科技大学计算

38、机系602教研室教研室产生布尔表达式三地址代码的语义规则产生布尔表达式三地址代码的语义规则产生式产生式语义规则语义规则EE1andE2E1.true:=newlabel;E1.false:=E.false;E2.true:=E.true;E2.false:=E.fasle;E.code:=E1.code|gen(E1.true:)|E2.codeE1.codeTo E.falseTo E1.trueE2.codeTo E.trueTo E.false国防科技大学计算机系国防科技大学计算机系602教研室教研室产生布尔表达式三地址代码的语义规则产生布尔表达式三地址代码的语义规则产生式产生式语义规则

39、语义规则EnotE1E1.true:=E.false;E1.false:=E.true;E.code:=E1.codeE(E1)E1.true:=E.true;E1.false:=E.false;E.code:=E1.code国防科技大学计算机系国防科技大学计算机系602教研室教研室产生布尔表达式三地址代码的语义规则产生布尔表达式三地址代码的语义规则产生式产生式语义规则语义规则Eid1relopid2E.code:=gen(ifid1.placerelop.opid2.placegotoE.true)|gen(gotoE.false)Etrue E.code:=gen(gotoE.true)E

40、false E.code:=gen(gotoE.false)国防科技大学计算机系国防科技大学计算机系602教研室教研室考虑如下表达式:考虑如下表达式:aborcdandef假定整个表达式的真假出口已分别置为假定整个表达式的真假出口已分别置为Ltrue和和Lfalse,则按定义将生成如下的代码:则按定义将生成如下的代码:ifabgotoLtruegotoL1L1:ifcdgotoL2gotoLfalseL2:ifefgotoLtruegotoLfalse国防科技大学计算机系国防科技大学计算机系602教研室教研室布尔表达式的翻译布尔表达式的翻译n两遍扫描两遍扫描为给定的输入串构造一棵语法树;为给定

41、的输入串构造一棵语法树;对语法树进行深度优先遍历,进行语义规则中对语法树进行深度优先遍历,进行语义规则中规定的翻译。规定的翻译。n一遍扫描一遍扫描国防科技大学计算机系国防科技大学计算机系602教研室教研室一遍扫描实现布尔表达式的翻译一遍扫描实现布尔表达式的翻译n采用四元式形式采用四元式形式n把四元式存入一个数组中,数组下标就代表四元把四元式存入一个数组中,数组下标就代表四元式的标号式的标号n约定约定四元式四元式(jnz,a,-,p)表示表示ifagotop四元式四元式(jrop,x,y,p)表示表示ifxropygotop四元式四元式(j,-,-,p)表示表示gotop国防科技大学计算机系国防

42、科技大学计算机系602教研室教研室n有有时时,四四元元式式转转移移地地址址无无法法立立即即知知道道,我我们们只只好好把把这这个个未未完完成成的的四四元元式式地地址址作作为为E的语义值保存的语义值保存,待机待机回填回填。国防科技大学计算机系国防科技大学计算机系602教研室教研室n为为非非终终结结符符E赋赋予予两两个个综综合合属属性性E.truelist和和E.falselist。它它们们分分别别记记录录布布尔尔表表达达式式E所所应应的的四四元元式式中中需需回回填填“真真”、“假假”出出口口的的四四元元式式的的标号所构成的链表标号所构成的链表n例例如如:假假定定E的的四四元元式式中中需需要要回回填

43、填真真出出口口的的p,q,r三个四元式,则三个四元式,则E.truelist为下列链为下列链:(p)(x,x,x,0)(q)(x,x,x,p)(r)(x,x,x,q)链尾链尾E.truelist=r国防科技大学计算机系国防科技大学计算机系602教研室教研室n为为了了处处理理E.truelist和和E.falselist,引引入入下下列列语义变量和过程语义变量和过程:变量变量nextquad,它指向下一条将要产生但尚未形它指向下一条将要产生但尚未形成的四元式的地址成的四元式的地址(标号标号)。nextquad的初值为的初值为1,每当执行一次,每当执行一次emit之后,之后,nextquad将自动

44、增将自动增1。函数函数makelist(i),它将创建一个仅含它将创建一个仅含i的新链表,的新链表,其中其中i是四元式数组的一个下标是四元式数组的一个下标(标号标号);函数返回;函数返回指向这个链的指针。指向这个链的指针。函数函数merge(p1,p2),把以把以p1和和p2为链首的两条链为链首的两条链合并为一,作为函数值,回送合并后的链首。合并为一,作为函数值,回送合并后的链首。过程过程backpatch(p,t),其功能是完成其功能是完成“回填回填”,把把p所链接的每个四元式的第四区段都填为所链接的每个四元式的第四区段都填为t。国防科技大学计算机系国防科技大学计算机系602教研室教研室布尔

45、表达式的文法布尔表达式的文法(1)E E1orME2(2)|E1andME2(3)|notE1(4)|(E1)(5)|id1relopid2(6)|id(7)M 国防科技大学计算机系国防科技大学计算机系602教研室教研室布尔表达式的翻译模式布尔表达式的翻译模式(7)M M.quad:=nextquad国防科技大学计算机系国防科技大学计算机系602教研室教研室布尔表达式的翻译模式布尔表达式的翻译模式(1)EE1orME2backpatch(E1.falselist,M.quad);E.truelist:=merge(E1.truelist,E2.truelist);E.falselist:=E2

46、.falselist(2)EE1andME2backpatch(E1.truelist,M.quad);E.truelist:=E2.truelist;E.falselist:=merge(E1.falselist,E2.falselist)E1.codeTo E.trueTo E1.falseE2.codeTo E.trueTo E.falseE1.codeTo E.falseTo E1.trueE2.codeTo E.trueTo E.false国防科技大学计算机系国防科技大学计算机系602教研室教研室布尔表达式的翻译模式布尔表达式的翻译模式(3)EnotE1E.truelist:=E1.

47、falselist;E.falselist:=E1.truelist(4)E(E1)E.truelist:=E1.truelist;E.falselist:=E1.falselist国防科技大学计算机系国防科技大学计算机系602教研室教研室布尔表达式的翻译模式布尔表达式的翻译模式(5)Eid1relopid2E.truelist:=makelist(nextquad);E.falselist:=makelist(nextquad+1);emit(jrelop.op,id1.place,id2.place,0);emit(j,0)(6)EidE.truelist:=makelist(nextqu

48、ad);E.falselist:=makelist(nextquad+1);emit(jnz,id.place,0);emit(j,-,-,0)国防科技大学计算机系国防科技大学计算机系602教研室教研室布尔表达式的翻译模式布尔表达式的翻译模式n作作为为整整个个布布尔尔表表达达式式的的真真假假出出口口(转转移移目标目标)仍待回填仍待回填.国防科技大学计算机系国防科技大学计算机系602教研室教研室aborcdandef100(j,a,b,0)101(j,-,-,102)102(j,c,d,104)103(j,-,-,0)104(j,e,f,100)truelist105(j,-,-,103)fal

49、selist国防科技大学计算机系国防科技大学计算机系602教研室教研室n计算布尔表达式通常采用两种方法计算布尔表达式通常采用两种方法:1.如同计算算术表达式一样如同计算算术表达式一样,一步步算一步步算1or(not0and0)or0=1or(1and0)or0=1or0or0=1or0=12.采用某种优化措施采用某种优化措施把把AorB解释成解释成ifAthentrueelseB把把AandB解释成解释成ifAthenBelsefalse把把 A解释成解释成ifAthenfalseelsetrue回顾:布尔表达式的翻译回顾:布尔表达式的翻译国防科技大学计算机系国防科技大学计算机系602教研室教

50、研室关于布尔表达式的数值表示法的翻译模式关于布尔表达式的数值表示法的翻译模式Eid1relopid2E.place:=newtemp;emit(ifid1.placerelop.opid2.placegotonextstat+3);emit(E.place:=0);emit(gotonextstat+2);emit(E.place:=1)EidE.place:=id.placeEE1orE2E.place:=newtemp;emit(E.place:=E1.placeorE2.place)EE1andE2E.place:=newtemp;emit(E.place:=E1.placeandE2.

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服