编译原理---第7章.ppt

  1. 1、本文档共97页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理---第7章

例 7-4:翻译下列语句 while a b do E1 if c 5 then E2 S1 while x y do z := x + 1; else S2 x := y * S3 生成的三地址码序列 L1: if a b goto L2 goto Lnext L2: if c 5 goto L3 goto L4 L3: if x y goto L5 goto L1 L5: t1:= x + 1 z := t1 goto L3 L4: x := y goto L1 Lnext: E1.code E2.code S1.code S2.code S3.code while ab do if c5 then while xy do z:=x+1 else x:=y * 控制结构翻译中的其他问题 分层结构的记录 涉及变量的作用域 转移目标的先引用后定义 使用回填技术 涉及循环语句、条件语句、转移标号 * 思考题 1、P218 4、6、7 2、设m维数组A[n1,n2,…,nm]是按照列优先存放的,其各维的下界是0,首地址为a,请给出A [i1,i2,…,im]的地址的计算公式,并给出相应的语法制导定义。 * 习题 1.把下列语句翻译成三地址代码 while a 10 do if b = 100 then while a 20 do a := a + b – 1 2.把下列语句翻译成三地址代码 if a10 and cd then if b=100 then a := a / b else a := a * b * 上机题 在第四章上机题的基础上,补充以下的语义处理功能,形成一个将源程序翻译成三地址代码序列的翻译程序: 将表达式、赋值语句翻译成三地址代码 将 If 条件语句、While 循环语句翻译成三地址代码 * 赋值语句翻译的实现 1) 找出分析中使用的产生式 2) 根据产生式的语义规则,计算式子中的各属性 3) 反复使用 1) 和 2) 改写式子,最后得到代码生成语句组成的式子 组成语句的翻译结果(中间代码序列) 结果:开始符号的属性 S.code * 表达式翻译中的其它问题 临时变量空间的统计 了解需求、及时释放 运算合法性检查 利用符号表保存的名字类型 类型自动转换 填加专用指令 * 类型转换: itr,rti S → id := E S.code := E.code || {if id.type=E.type then gen( id.place:=E.place ) else if id.type=real then gen(id.place’:=‘ itr( E.place) else gen(id.place’:=‘rti ( E.place)} E → E1 + E2 E.place := newtemp; E.code := E1.code || E2.code || {E.type:=E1.type; if E1.type=E2.type then gen(E.place:=E1.place+E2.place) else{ if E1.type=real then gen(E.place:=E1.place+‘itr(E2.place)) else gen(E.place:=itr(E1.place)+‘E2.place); E.type=real}} * 7.5 控制语句的翻译 高级语言的控制结构 顺序 begin 语句; … ;语句end 条件 if_then_else、if_then switch、case 循环 while_do、do_while for、repeat_until 三地址码 goto n (j,_,_,n) if x relop y goto n (jrelop,x,y,n) * 布尔表达式的翻译 基本文法 E→E1 or E2 | E1 and E2 | not E1 | ( E1 ) | id1 relop id2 | id 处理方式 数值表示法(与算术表达式的处理类似) 真:E.place=1 假:E.place=0 newtemp——申请临时工作单元 真假出口表示法(作为条件控制) 真出口:E.true 假出口:E.false newlab——申请新标号 * 数值表示法——使用综合属性 E → E1 or E2 E.pl

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档