编译原理第5章 语义分析和中间代码产生..pptVIP

编译原理第5章 语义分析和中间代码产生..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文档。上传文档
查看更多
第五章语法制导翻译和中间代码产生 * * 二、三元式与间接三元式 一般形式: (op,AG1,AG2) 例如:a:=-b*(c+d) 三元式为: ①(-,b, ) ②(+,c, d ) ③(*,①,②) ④(:=,③,a) 第五章语法制导翻译和中间代码产生 * * 间接三元式 例如:语句 X:=(A+B)*C Y:=D^(A+B) 间接代码 ⑴ ⑵ ⑶ ⑴ ⑷ ⑸ op AG1 AG2 ⑴ + A B ⑵ * ⑴ C ⑶ := X ⑵ ⑷ ^ D ⑴ ⑸ := Y ⑷ 第五章语法制导翻译和中间代码产生 * * 三、树形表示法 抽象语法树:在语法树中去掉那些对翻译不必要的信息,从而获得更有效的源程序中间表示。这种变换后的语法树称为抽象语法树。 + * 4 3 5 3*5+4 的抽象语法树 第五章语法制导翻译和中间代码产生 * * 树形表示 A * B + C*D + C * A * B D 末端结点表示一个运算对象, 每一个内结点表示一个一元或二元运算符。 树形表示是三元式的翻版 (3)+ (1)* (2)* C A B D 第五章语法制导翻译和中间代码产生 * * 四、四元式 一般形式: (op,AG1,AG2,result) 直观形式: result:=AG1 op AG2 例如:求x:=a+b*c的四元式。 (*,b,c,T1 ) 直观式: T1:=b*c (+,a,T1,T2) T2:=a+T1 (:=,T2 , ,x ) x:=T2 第五章语法制导翻译和中间代码产生 * * 采用自下而上的语法制导翻译法语义 动作的设计 (1)搞清楚源结构和目标结构 (2)自下而上的语法制导翻译特点: 栈顶形成句柄,归约时执行相应语义 动作 (3)给出从源结构到目标结构的变换 方法 §5.8 自底向上语法制导翻译 第五章语法制导翻译和中间代码产生 * * 例. 设文法及其相应的语义动作如下: S→a { print “2”} S→bTc { print “1”} T→R { print “3”} R→R/S { print “4”} R→S { print “5”} 采用自下而上语法制导翻译,给出输入串bR / bTc / bSc / ac的翻译结果 第五章语法制导翻译和中间代码产生 * * 分析: 首先对输入串 bR / bTc / bSc /ac画出语法树: S c T b R S / R / R S / R c T b a S c T b R S 再考虑归约时执行相应语义动作 第五章语法制导翻译和中间代码产生 * * S c T b R S / R / R S / R c T b a S c T b R S S→bTc { print “1”} S→a { print “2”} T→R { print “3”} R→R/S { print “4”} R→S { print “5”} 1 4 翻译结果为: 5 3 1 4 2 4 3 1 第五章语法制导翻译和中间代码产生 * * 一、简单算术表达式和赋值语句的翻译 定义几个过程和函数: lookup(id.name):检查id.name是否出现在符号表中,如果在,则返回其指针;否则,返回 NULL 表示没有找到。 emit(result:=AG1 op AG2):产生一个四元式,并填入四元式表中。 newtemp( ):该函数返回一个新的临时变量。 第五章语法制导翻译和中间代码产生 * * 文法:P216 1. S → i= E { p= Lookup (i.name); if (p == NULL) error( ); else emit(p’=’E.place } 2. E → E(1) + E(2) { E.place = newtemp( ); emit(E.place’=’E(1).place’+’E(2).place ) } 3. E → E(1) * E(2) {

文档评论(0)

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

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

1亿VIP精品文档

相关文档