欢迎来到天天文库
浏览记录
ID:42329381
大小:208.51 KB
页数:13页
时间:2019-09-12
《编译原理7.4-布尔表达式的翻译》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第七章语义分析和中间代码生成7.1中间语言7.2说明语句7.3赋值语句的翻译7.4布尔表达式的翻译7.5控制语句的翻译7.6过程调用的处理7.7类型检查7.4布尔表达式的翻译布尔表达式文法GEE1orE2
2、E1andE2
3、notE1
4、(E1)
5、id1relopid2
6、true
7、false
8、id3布尔运算符:or、and、not关系运算符:relop:<、≤、=、≠、>和≥布尔常量:true和false布尔变量:id3计算布尔表达式的值通常有两种办法1.如同计算算术表达式,一步不差地从表达式各部分的值计算出整个表达式的值。1or(no
9、t0and0)or0=1or(1and0)or0=1or0or0=1or0=12.采取某种优化措施,只计算部分表达式把AorB解释成ifAthentrueelseB把AandB解释成ifAthenBelsefalse把notA解释成ifAthenfalseelsetrue布尔表达式的两个作用计算逻辑值1or(not0and0)or0用做改变控制流语句中的条件表达式if-thenif-then-elsewhile-do以上对应两种不同的翻译方案7.4.1数值表示法从左到右按类似算术表达式的求值方法来计算例如,对于布尔表达式:aorban
10、dnotc将被翻译成如下三地址序列:T1:=notcT2:=bandT1T3:=aorT2一个形如a<b的关系表达式可等价地写成ifa<bthen1else0,并可将它翻译成如下三地址语句序列(我们假定语句序号从100开始)(100)ifa<bgoto103(101)T:=0(102)goto104(103)T:=1(104)T-临时变量,存放布尔表达式a<b的值例7.2翻译布尔表达式a11、:T2=0106:goto108107:T2=1108:ife12、”出口例7.3考虑表达式:a<borc<dande<f假定整个表达式的真假出口已分别置为Ltrue和Lfalse,则按生成如下的代码:ifa<bgotoLtruegotoL1L1:ifc<dgotoL2gotoLfalseL2:ife<fgotoLtruegotoLfalseifa<borc<dande>fthenS1elseS2的四元式序列(1)ifa<bgoto(7)//E.true(2)goto(3)(3)ifc<dgoto(5)(4)goto(p+1)//E.false(5)ife>fgoto(7)//E.true(6)got13、o(p+1)//E.false(7)(关于S1的四元式)…(p)goto(q)(p+1)(关于S2的四元式)…(q)回填:(1)和(5)的转移地址为(7),它是在整个布尔表达式的四元式序列生成之后才回填的地址。ifA14、if(C<D)thenX:=Y+Z
11、:T2=0106:goto108107:T2=1108:ife12、”出口例7.3考虑表达式:a<borc<dande<f假定整个表达式的真假出口已分别置为Ltrue和Lfalse,则按生成如下的代码:ifa<bgotoLtruegotoL1L1:ifc<dgotoL2gotoLfalseL2:ife<fgotoLtruegotoLfalseifa<borc<dande>fthenS1elseS2的四元式序列(1)ifa<bgoto(7)//E.true(2)goto(3)(3)ifc<dgoto(5)(4)goto(p+1)//E.false(5)ife>fgoto(7)//E.true(6)got13、o(p+1)//E.false(7)(关于S1的四元式)…(p)goto(q)(p+1)(关于S2的四元式)…(q)回填:(1)和(5)的转移地址为(7),它是在整个布尔表达式的四元式序列生成之后才回填的地址。ifA14、if(C<D)thenX:=Y+Z
12、”出口例7.3考虑表达式:a<borc<dande<f假定整个表达式的真假出口已分别置为Ltrue和Lfalse,则按生成如下的代码:ifa<bgotoLtruegotoL1L1:ifc<dgotoL2gotoLfalseL2:ife<fgotoLtruegotoLfalseifa<borc<dande>fthenS1elseS2的四元式序列(1)ifa<bgoto(7)//E.true(2)goto(3)(3)ifc<dgoto(5)(4)goto(p+1)//E.false(5)ife>fgoto(7)//E.true(6)got
13、o(p+1)//E.false(7)(关于S1的四元式)…(p)goto(q)(p+1)(关于S2的四元式)…(q)回填:(1)和(5)的转移地址为(7),它是在整个布尔表达式的四元式序列生成之后才回填的地址。ifA14、if(C<D)thenX:=Y+Z
14、if(C<D)thenX:=Y+Z
此文档下载收益归作者所有