指导教师:杨建国.ppt

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

1 1 按照上述文法产生式相应的语义动作,加上前述关于  赋值句和布尔表达的翻译法,语句while (AB) do if  (CD) then X:=Y+Z将被翻译成如下的一串四元式: 100 if AB goto 102 101 goto 107 102 if CD goto 104 103 goto 100 104 T:=Y+Z 105 X:=T 106 goto 100 107 二.开关语句 假定要讨论的开关语句的形式为: switch E of case V1: S1 case V2: S2 ┇ case Vn-1: Sn-1 default:Sn end case语句翻译成如下的一连串条件转移语句: t:=E; L1: if t≠V1 goto L2 S1; goto next; L2: if t≠V2 goto L3 S2 goto next; ┇ Ln-1: if t≠Vn-1 goto Ln Sn-1; goto next; Ln:Sn; next; 另外一种实现办法: 建立一个n项的二元组表,第1元为Vi的值,第2元为Vi  对应的语句Si的标号(或序号) 编译程序构造一张这样的表,产生把选择子E的值传送  到该表末项第一元的指令。该项的另一元是缺省情况  的语句号 并构造一个对E值查该表的程序,即该程序把E的值和  二元组表项中的各个Vi值相比,若与某个Vi匹配,就  去执行相应的Si,如果找不到这样的Vi,则末项自动匹  配,便去执行Sn 图8.18给出开关语句的一种翻译结果(中间代码),其中  把所有的测试都放在最后,以便目标代码生成阶段产生高  质量的目标指令 三.for循环语句 for i:=E1 step E2 util E3 do S1 上述循环句的ALGOL意义等价于: i:= E1; goto OVER; AGAIN:i:=i+E2; OVER: if i≤E3 then begin S1;goto AGAIN end;  改写成如下的产生式: F1  for i:=E1 F2  F1 step E2 F3  F2 until E3 S  F3 do S1 下面是这些产生式相应的语义动作: F1  for i:=E1  {emit(entry(i),’:=‘,E1.place); F1.place:=entry(i);/*保存控制变量在符号表中的位置*/ F1.chain:=nextstat; emit(‘goto’-); /*goto OVER*/ F1.codebegin:=nextstat;/*保存AGAIN的地址*/ } F2  F1 step E2  {F2.codebegin:=F1.codebegin;/*保存AGAIN的地址*/   F2.place:=F1.place;/*保存控制变量在符号表中的位置*/   emit(F1.place ‘:=‘,E2.place,’+’F1.place); backpatch(F1.chain,nextstat);/*回填上面的goto OVER*/} F3  F2 until E3 {F3.codebegin:=F2.codebegin; q:=nextstat; emit(‘if’ F2.place,’ ≤’,E3.place,’goto’q+2); /*若i ≤ E3转去执行循环体的第1个四元式*/; F3.chain:=nextstat; emit(‘goto’-);/*转离循环*/} ④逆波兰: ABCD-*+ECD-N↑/+ ⑤树形表示: 真题:(5分)在答题纸上给出下面表达式的逆波兰表示   (用@表示取负操作,用-表示减法操作) -a+b*(-c+d) 答案:a@bc@d+*+ 例题:(上海交大2000年研究生试题)   语句 While AB do if CD then x:=F[i,j] else x:=x+l 经翻译后的三地址语句或四元式是什么?(设三 地址语句或四元式自 100 开始存放,数组 F 的内情向量 自 300 开始存放,数组首地址 500, 每个数组元素占四 字节。) 【解答】 内情向量表如图5.12所示,语句代码结构图如图5.13所示 按图5.13翻译后的四元式如下: 100  (j,A,B,102) 101  (j,_,_,115) 102  (j,C,D,104) 103  (j,_,_,113) 104  (+,i,[309],T1)    /*[309]为第二维长度d2*/ 105  (+,j,T1,T2)

文档评论(0)

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

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

1亿VIP精品文档

相关文档