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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

if a<b or c<d and e>f then S1 else S2 的四元式序列 < < > (1) if a<b goto (7) < (2) goto (3) (3) if c<d goto (5) < (4) goto (p+1) (5) if e>f goto (7) > (6) goto (p+1) (7) (关于 1的四元式 关于S 关于 的四元式) … (p) goto (q) (p+1) (关于 2的四元式 关于S 关于 的四元式) … (q) // E.true
表7.15 if – then – else 语句 的代码结构
例7.3 考虑表达式 : a<b or c<d and e<f c< e<
假定整个表达式的真假出口已分别置为Ltrue和 和 假定整个表达式的真假出口已分别置为 Lfalse,则按生成如下的代码: ,则按生成如下的代码: if a<b goto Ltrue < goto L1 L1 : if c<d goto L2 < goto Lfalse L2 : if e<f goto Ltrue < goto Lfalse
计算布尔表达式的值通常有两种办法 1. 如同计算算术表达式,一步不差地从表达式 如同计算算术表达式, 各部分的值计算出整个表达式的值。 各部分的值计算出整个表达式的值。
1 or (not 0 and 0) or 0 = 1 or (1 and 0) or 0 = 1 or 0 or 0 = 1 or 0 =1
T - 临时变量,存放布尔表达式a<b的值 临时变量,存放布尔表达式a
例7.2 翻译布尔表达式 a<b or c<d and e<f
100: 101: 102: 103: 104: 105: 106: 107: if a<b goto 103 T1 =0 goto 104 T1 =1 if c<d goto 107 T2 =0 goto 108 T2 =1 108: 109: 110: 111: 112: 113: if e<f goto 111 T3 =0 goto 112 T3 =1 T4 = T2 and T3 T5 = T1 or T4
if A<B goto 102 goto 106 if C<D goto 104 goto 106 t:= y+z + x:= t …
while (A<B) do < if (C<D) then < X := Y+Z
100 101 102 103 104 105 106 107
if A<B goto 102 < goto 107 if C<D goto 104 < goto 100 T∶=Y+Z ∶ X∶=T ∶ goto 100 …
2. 采取某种优化措施 只计算部分表达式 采取某种优化措施,
把A or B解释成 解释成 源自文库f A then true else B 把A and B解释成 把not A解释成 解释成 解释成 if A then if A then B false else else false true
布尔表达式的两个作用
第七章 语义分析和中间代码生成
7.1 中间语言 7.2 说明语句 7.3 赋值语句的翻译 7.4 布尔表达式的翻译 7.5 控制语句的翻译 7.6 过程调用的处理 7.7 类型检查
7.4 布尔表达式的翻译
布尔表达式文法G 布尔表达式文法 E→E1 or E2 | E1 and E2 | not E1 | ( E1 ) → | id1 relop id2 | true | false | id3 布尔运算符: or 、and 、 not 布尔运算符 关系运算符: :<、≤ 关系运算符 relop:<、≤、=、≠、>和≥ :<、 、=、≠ 布尔常量: 布尔常量 true和false 和 布尔变量: 布尔变量 id3
7.4.2 作为条件控制的布尔式翻译
出现在条件语句 if E then S1 else S2 中的布尔表达式E, 中的布尔表达式 它的作用仅在于控制 的选择。 对S1和S2的选择。 无须保留E的值 的值。 无须保留 的值。 “真”出口
to E.true E.Code E.true: Goto S.next “假”出口 E.false: S.next: S2.code … S1.code to E.false
// E.false // E.true // E.false
回填 : (1)和(5)的转移地 和 的转移地 址为(7), 它是在整个 址为 布尔表达式的四元式 序列生成之后才回填 的地址。 的地址。
if A<B and C<D then x:=y+z
100 101 102 103 104 105 106
1. 2.
计算逻辑值 1 or(not 0 and 0)or 0 ( ) 用做改变控制流语句中的条件表达式 if-then if-then-else while-do 以上对应两种不同的翻译方案
7.4.1 数值表示法
从左到右按类似算术表达式的求值方法来计算 例如,对于布尔表达式: 例如,对于布尔表达式: a or b and not c
将被翻译成如下三地址序列: 将被翻译成如下三地址序列:
T1 := not c T2 := b and T1 T3 := a or T2
一个形如 a<b 的关系表达式可等价地写成 < if a<b then 1 else 0, < , 并可将它翻译成如下三地址语句序列 我们假定语句序号从100开始) 开始) (我们假定语句序号从 开始 (100) (101) (102) (103) (104) if a<b goto 103 < T:=0 goto 104 T:= 1
相关文档
最新文档