版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、会计学1ch赋值语句赋值语句(yj)与布尔表达式的翻译张与布尔表达式的翻译张素琴实用素琴实用第一页,共30页。28.4 简单赋值语句(yj)的翻译为了实现赋值语句x=y 语法制导的自动翻译成四元式: (= , y , ,x)(1)需要(xyo)定义赋值语句的属性文法;(2)语法分析的同时执行语义规则,由emit自动生成四元式。第1页/共30页第二页,共30页。3id=E 赋值语句(yj)的属性文法:E=E1+E2 E=E1*E2p:=lookup(); if pnil then emit(p:= E.place) else error E.place=newtemp; emit(
2、E.place:=E1.place+E2.place) E.place=newtemp; emit(E.place=E1.place*E2.place) 第2页/共30页第三页,共30页。4E=(E1) E =-E1 E.place:=newtemp;emit(E.place := uminusE1.placeE.place:=E1.place 语义过程emit将生成的四元式送到输出文件上,如emit(+ , E1.place,E2.place, E.place); 过程lookup ( )负责(fz)在符号表中查找标示符符的名字; 语义变量E.Place表示存放E的变量在符号表
3、中的登录项; 语义过程newtemp表示生产一临时变量。第3页/共30页第四页,共30页。5E.place=newtemp; If E1.type=int and E2.type=int then emit(E.place,:=,E1.place,*,E2.place) E.type:=int else if E1.type=real and E2.type=real then emit(E.place,:=,E1.place,*,E2.place) E.type:=real else if E1.type=int and E2.type=real then t:=newtemp; emit(
4、t,:=,itr,E1.place); emit(E.place,:=,t,*,E2.place); E.type:=real else t:=newtemp; emit(t,:=,itr,E2.place); emit(E.place,:=, E2.place, *,t); E.type:=real EE1*E2语义变量E.type是E的类型(lixng),一目算符itr将整数转换成实数第4页/共30页第五页,共30页。6布尔表达式的文法(wnf): 布尔表达式的作用(zuyng):1. 用作计算逻辑值2.用作控制流语句如if-then,if-then-else和while-do等之中的条件
5、表达式 布尔表达式: 用布尔运算符号(and,or,not)作用到布尔变量(binling)或关系表达式上而组成EE or E|E and E| not E|(E)| id relop id |true|false Relop关系运算符8.5 布尔表达式的翻译布尔表达式的翻译第5页/共30页第六页,共30页。7布尔表达式:a or b and not c 手工翻译成四元式代码(di m)序列: 100 : t1:=not c 101 : t2:=b and t1 102 : t3:=a or t2 用1表示真,0表示假实现(shxin)布尔表达式的翻译8.5.1布尔表达式的翻译(fny)方法
6、第6页/共30页第七页,共30页。8关系(gun x)表达式:ab 100 : if ab goto l03 101 : t:=0 102 : goto l04 103 : t:=1 104:等价(dngji)于if ab then 1 else 0手工(shugng)翻译成四元式代码序列:100:(j,a,b,103)101: (= ,0, ,t) 102:(j , , ,104)103 : (= ,1, ,t) 104:第7页/共30页第八页,共30页。9EE1 or E2 E.place:=newtemp; emit(E.place=E1.place or E2.place) Enot
7、E1 E.place:=newtemp; emit(E.place = not E1.place) EE1 and E2 E.place:=newtemp; emit(E.place=E1.place and E2.place) Eture E.place:=newtemp; emit(E.place =1 ) Efalse E.place:=newtemp; emit(E.place= 0 ) Eid1 relop id2 E.place:=newtemp; emit(if id1.place relop id2.place goto nextstart+3); emit(E.place =
8、0); emit(goto nextstat+2); emit(E.place=1) 为自动(zdng)翻译需定义布尔表达式的属性文法:第8页/共30页第九页,共30页。10emit含义:生成一个(y )四元式输送到文件中nextstat含义:给出下一个四元(s yun)式在输出序列中的序号,是即将生成的四元(s yun)式代码的序号。每执行(zhxng)一次emit后,nextstat自动加1第9页/共30页第十页,共30页。11例:布尔表达式 ab and cd and ef对应(duyng)的语法树 a b and c d and e fE E E EE语义动作(dngzu)执行顺序:
9、第10页/共30页第十一页,共30页。12例:布尔表达式 ab and cd and ef可以生成(shn chn)如下的中间代码:100:if ab goto 103 101:t1=0102:goto 104103:t1=1 104:if cd goto 107 105:t2=0106:goto 108107:t2=1E.place=newtemp; emit(if id1.place relop.op id2.place goto nextstart+3)emit(E.place = 0)emit(goto nextstart+2)emit(E.place = 1)E.place=newt
10、emp; emit(E.place = E1.place andE2.place)108:t3=t1 and t2 E.place=newtemp; emit(if id1.place relop.op id2.place goto nextstart+3)emit(E.place = 0)emit(goto nextstart+2)emit(E.place = 1)109:if ef goto 112 110:t4=0111:goto 113112:t4=1E.place=newtemp; emit(E.place = E1.place and E2.place)113:t5=t3 and
11、t4第11页/共30页第十二页,共30页。138.5.2控制(kngzh)语句中布尔表达式的翻译对于对于(duy)出现在条件语句出现在条件语句 if E then s1 else s2中的布尔表达式中的布尔表达式E,其作用就是控制对,其作用就是控制对S1和和S2的选择的选择作为条件的布尔表达式,设计有两个出口:E.true 和 E.false.对于IF语句(yj),E.true 指向S1, E.false指向S2;对于while语句E.true 指向循环的开始, E.false指向while外 的下一条语句。第12页/共30页第十三页,共30页。14 1、基本思想: 假定(jidng)E 形如
12、ad,则将生成如下E的代码:四元式表示(biosh): E.true: (jbab四元式真假四元式真假出口表示为:出口表示为: (j, a , b , p) p= nextstat+3 (j, a , b , p) p= nextstat+3 (j , , , q) q= nextstat+2 (j , , , q) q= nextstat+2若将其作为条件(tiojin)表达式,例如:if ab then s1 else s2(j,a,b ,p) p为s1的第一个代码(di m)序号(j , , , q) q为s2的第一个代码(di m)序号第16页/共30页第十七页,共30页。18if a
13、b goto L1 goto LfalseL1:if cd goto L2 goto LfalselL2:if ef goto Ltrue goto Lfalse100 (J,a,b,102)101 (j, , ,Lfalse)102 (J,c,d,104)103 (j, , ,Lfalse)104 (J,e,f, Ltrue)105 (j, , , Lfalse)106回填(hutin)地址链If ab and cd and ef then s1 else s2四元(s yun)式第17页/共30页第十八页,共30页。194、回填(hutin) 对于每一条这样的四元式指令作适当的记录,一旦目
14、标标号(bioho)被确定下来,再将它“回填”到相应的指令中。先产生暂时没有填写目标标号的四元(s yun)式转移指令。第18页/共30页第十九页,共30页。20要解决的问题:在一遍扫描中,生成跳转语句(yj)时,不知道控制要转向的语句(yj)标号解决方法:生成跳转语句时,将其E.true和E.false链成一个(y )链表,记录在E.truelist和E.falselist中等到转移目标确定以后(yhu),再将转移出口填入E.truelist和E.falselist中回填第19页/共30页第二十页,共30页。21100 (J,a,b,102)101 (j, , ,Lfalse)102 (J,
15、c,d,104)103 (j, , ,Lfalse)104 (J,e,f, Ltrue)105 (j, , ,Lfalse)第二遍扫描第二遍扫描(somio)第一遍扫描第一遍扫描(somio)100 (J,a,b, )101 (j, , , )102 (J,c,d, )103 (j, , , )回填(hutin)E.true将E.flase合并成一个链102104104 (J,e,f, )105 (j, , , )103101E.truelistE.falselist第20页/共30页第二十一页,共30页。225.控制语句(yj)中布尔表达式的语法制导定义(属性文法)将用到两个(lin )函数
16、: merge(p1,p2)Backpatch(p,t)第21页/共30页第二十二页,共30页。23merge(p1,p2):连接由指针(zhzhn)p1和p2指向的两个表并且返回一个指向连接后的表的指针(zhzhn)。 merg(p1,p2)=代码描述: function MERG(P1,P2):POITER IF P2=0 THEN merg=P1 ELSE P=P2 while 四元式P的第4分量(fn ling)不为0 do P=四元式P的第4分量(fn ling)内容 把P2填入四元式P的第4分量(fn ling) MERG=P2 P1 p2=0P1 p2=0P2 p2P2 p20
17、0第22页/共30页第二十三页,共30页。24100 (J,a,b, 102 )101 (j , , , )102 (J,c,d, 104 )103 (j , , , )P1P2P101第23页/共30页第二十四页,共30页。25Backpatch(p,t):把t作为目标标号回填到p所指向的表中的每一个转移指令(zhlng)的第四个元素。此处的“表”都是为“反填”所拉的链.代码如下:Procedure BACKPATCH(P,t)Q=P while Q 0 do L=四元(s yun)式Q的第4分量内容; 把t填入四元(s yun)式Q的第4分量; Q=L; 第24页/共30页第二十五页,共3
18、0页。26100 (J,a,b, 102)101 (j, , , )102 (J,c,d, 104 )103 (j, , , 101 )104 (J,e , f, )105 (j, , , 103 ) P Q L t t t t t tIf ab and cd and ef then s1 else s2第25页/共30页第二十六页,共30页。(1) EE1 or E2 backpatch(E1.false, E2.codebegin); E.codebegin:= E1.codebegin; E.true:=merge(E1.true, E2.true) E.false:= E2.false(2) EE1 and E2 backpatch(E1.true, E2.codebegin); E.codebegin:= E1.codebegin; E.true:= E2.true; E.false:= merge(E1.false, E2.false);(3) Enot E1 E.true:= E1.false; E.codebegin:= E1.codebegin; E.false:= E1.true语法制导定义(dngy)(属性文法)第26页/共30页第二十七页,共30页。第27
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 制糖企业销售管理与渠道拓展考核试卷
- 智能汽车保险利用人工智能提供汽车保险服务考核试卷
- 诚信考试行为准则
- 配件采购合同管理
- 银行业金融科技支付系统升级协议
- 装饰材料焊接施工合同
- 酒吧装修工程施工合同
- 房产交易合同签订技巧
- 创新科技质量奖管理规范
- 养殖合作协议模板
- 非新生儿破伤风诊疗规范(2024年版)解读
- 微测网题库完整版行测
- 多图中华民族共同体概论课件第十一讲 中华一家与中华民族格局底定(清前中期)根据高等教育出版社教材制作
- 生涯发展报告 (修改版)
- 求职能力展示
- 中国马克思主义与当代思考题(附答案)
- (新版)征信知识竞赛基础题库(500题)
- 金属风管支架重量计算表
- 公司组织架构图模板可编辑
- (LED法)风险性评价法
- 第4章-斯特瓦尔特定理及应用
评论
0/150
提交评论