编译原理7.4-布尔表达式的翻译.pptxVIP

  • 8
  • 0
  • 约2.08千字
  • 约 10页
  • 2025-06-04 发布于四川
  • 举报

中间语言说明语句赋值语句的翻译布尔表达式的翻译控制语句的翻译过程调用的处理类型检查第七章语义分析和中间代码生成

7.4布尔表达式的翻译布尔表达式文法GE?E1orE2|E1andE2|notE1|(E1)|id1relopid2|true|false|id3布尔运算符:or、and、not关系运算符:relop:<、≤、=、≠、>和≥布尔常量:true和false布尔变量:id3

如同计算算术表达式,一步不差地从表达式各部分的值计算出整个表达式的值。or(not0and0)or0=1or(1and0)or0=1or0or0=1or0=1计算布尔表达式的值通常有两种办法

2.采取某种优化措施,只计算部分表达式1把AorB解释成ifAthentrueelseB2把AandB解释成ifAthenBelsefalse3把notA解释成ifAthenfalseelsetrue

计算逻辑值1or(not0and0)or0用做改变控制流语句中的条件表达式if-then-else以上对应两种不同的翻译方案if-thenwhile-do12345布尔表达式的两个作用

7.4.1数值表示法从左到右按类似算术表达式的求值方法来计算例如,对于布尔表达式:aorbandnotc将被翻译成如下三地址序列: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翻译布尔表达式aborcdandef100:ifabgoto103101:T1=0102:goto104103:T1=1104:ifcdgoto107105:T2=0106:goto108107:T2=1108:ifefgoto111109:T3=0110:goto112111:T3=1112:T4=T2andT3113:T5=T1orT4

7.4.2作为条件控制的布尔式翻译出现在条件语句 ifEthenS1elseS2中的布尔表达式E,它的作用仅在于控制对S1和S2的选择。无须保留E的值。表7.15if–then–else语句的代码结构E.CodeS1.codeGotoS.nextS2.code…toE.truetoE.falseE.false:E.true:S.next:“真”出口“假”出口

例7.3考虑表达式:a<borc<dande<f假定整个表达式的真假出口已分别置为Ltrue和Lfalse,则按生成如下的代码:ifa<bgotoLtruegotoL1L1: ifc<dgotoL2gotoLfalseL2: ife<fgotoLtruegotoLfalse

ifa<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)goto(p+1) //E.false(7)(关于S1的四元式)

…(p)goto(q)(p+1)(关于S2的四元式)

…(q)回填:(1)和(5)的转移地址为(7),它是在整个布尔表达式的四元式序列生成之后才回填的地址。

01ifABgoto10202goto10603ifCDgoto10404goto10605t:=y+z06x:=t07…08ifABandCDthen09=y+z

01100 ifA<Bgotogoto10703102 ifC<DgotogotoT∶=Y+Z

文档评论(0)

1亿VIP精品文档

相关文档