if-then-else74布尔表达式和控制流语句SwhileEdo-OSCARLab.PPTVIP

if-then-else74布尔表达式和控制流语句SwhileEdo-OSCARLab.PPT

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
if-then-else74布尔表达式和控制流语句SwhileEdo-OSCARLab

中国科大 7.4 布尔表达式和控制流语句 布尔表达式有两个基本目的 计算逻辑值 c = (a b) a 1 在控制流语句中用作条件表达式 if (a b a 1) then … 1/25 7.4 布尔表达式和控制流语句 布尔表达式有两种计算方式: if ( 1 or i++ 3) then 布尔表达式的完全计算 E1 or E2 布尔表达式的“短路”计算 E1 or E2 定义成 if E1 then true else E2 E1 and E2 定义成 if E1 then E2 else false 7.4 布尔表达式和控制流语句 7.4.1 布尔表达式的翻译 E ? E or E | E and E | not E | ( E ) | id relop id | true | false a b的翻译 100: if a b goto 103 101: t := 0 102: goto 104 103: t := 1 104: , =, , =, , == 对于ab的翻译而言,由于三地址代码中不包括形如t=ab的格式,故此使用if x relop y goto L 来实现。 7.4 布尔表达式和控制流语句 E ? E1 or E2 {E.place := newtemp; emit (E.place, ‘:=’, E1.place, ‘or’ E2.place) } E ? id1 relop id2 {E.place := newtemp; emit (‘if’, id1.place, relop.op, id2.place, ‘goto’, nextstat+3 ); emit (E.place, ‘:=’, ‘0’ ); emit (‘goto’, nextstat + 2 ); emit (E.place, ‘:=’, ‘1’ ) } a b的翻译 100: if a b goto 103 101: t := 0 102: goto 104 103: t := 1 104: 7.4 布尔表达式和控制流语句 7.4.2 控制流语句的翻译 S ? if E then S1 | if E then S1 else S2 | while E do S1 | S1; S2 5/25 7.4 布尔表达式和控制流语句 E.code S1.code E.true: . . . 指向E.true 指向E.false (a) if--then E.code S1.code E.true: . . . 指向E.true 指向E.false E.false: goto S.next (S1.next) S2.code (b) if-then-else E.code S1.code E.true: . . . 指向E.true 指向E.false goto S.begin S.begin: (c) while-do S1.code S2.code S1.next: . . . (d) S1; S2 E s1 E s1 s2 E s1 S1.next: 7.4 布尔表达式和控制流语句 S ? if E then S1 {E.true := newlabel; E.false := S.next; S1.next := S.next; S.code := E.code || gen(E.true, ‘:’) || S1.code } E.code S1.code E.true: . . . 指向E.true 指向E.false (a) if-then 7.4 布尔表达式和控制流语句 S ? if E then S1 else S2 {E.true := newlabel; E.false := newlabel; S1.next := S.next; S2.next := S.next; S.code := E.code || gen(E.true, ‘:’) || S1.code || gen(‘goto’, S.next) || gen(E.false, ‘:’) || S2.code} E.code S1.code E.true: . . . 指向E.true 指向E.false E.false: goto S.next S2.code (b) if-then-else 7.4 布尔表达式和控制流语句 S ? while E do S1 {S.begin:= newlabel; E.true := newlabel;

文档评论(0)

ailuojue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档