编译原理第7章中间语言(3).pptVIP

  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文档。上传文档
查看更多
7.4 中间代码翻译的实现 语法制导翻译器的结构,可描述为: 扩展的语法分析器 翻译文法 + ⒈ 自顶向下翻译文法的要求: ⑴ 源文法应满足自顶向下分析要求(如 LL(1)文法); ⑵ 属性是自顶向下可求值的(属性计算不发生冲突); ⑶ 动作符号可插入到产生式右部任何位置。 ⒉ 自底向上翻译文法的要求: ⑴ 源文法应满足自底向上分析要求(如 LR( )文法); ⑵ 属性是自底向上可求值的(属性计算不发生冲突); ⑶ 动作符号只能位于产生式的最右端。 L-属性翻译文法 S-属性翻译文法 其中 7.4.1 递归子程序翻译法 ⒈ 设置 语义栈:SEM[m] 四元式区:QT[q] ⒉ 翻译文法设计 ⒊ 递归子程序的扩展 ① 动作符号在哪,就在哪执行之; ② 主控程序(Z - E )功能: ※初始化; 结果输出。 E - T { + T{GEQ(+)}|- T{GEQ(-)} } T - F { * F{GEQ(*)}|/ T{GEQ(/)} } F - i{PUSH(i)}| ( E ) G1(E): 【例7.10】算术表达式四元式翻译器的设计1: ---暂存运算对象的属性值。 ---四元式生成结果的存储区。 ※ 算术表达式翻译文法的递归子程序: R2 入口 出口 NEXT(w) T + T y n - n NEXT(w) T y GEQ(+) GEQ(-) 子程序 E R3 R1 主程序 Z 开始 结束 结果输出 初始化 # NEXT(w) err0 y n R0 E Ri 返回地址 (接上页) R5 入口 出口 NEXT(w) F * F y n / n NEXT(w) F y GEQ(*) GEQ(/) 子程序 T R6 R4 入口 出口 i ( err1 NEXT(w) err2 NEXT(w) E ) y y y n n n 子程序 F R7 PUSH(i) Ri 返回地址 ※ 算术表达式四元式翻译过程 : 设 待翻译的表达式: a*(b/c)# QT[q] SEM[m] w 返回地址栈 递归子程序栈 Z E R0 a T R1 F R4 a * Z E T R0R1 ( Z E T F R0R1 R5 a a b Z E T F E R0R1R5 R7 T R1 F R4 a b / Z E T F R0R1R5R7R1 a c Z E T F F R0R1R5R7R1 R6 a c Z E T F R0R1R5R7R1 ) a ⑴(/b,c,t1) a t1 ) Z E T F R0R1R5R7 ) a Z E T F R0R1R5 # a Z E T R0R1 ⑵(*a,t1,t2) t2 # Z E R0 # t2 Z Ok! b b b c t1 t1 E T E T E T E Z,E子程序 T,F子程序 递归子程序调用算法 入口时: 把返回地址压入返回地址栈并进入; 出口时: 把返回地址弹出返回地址栈并返回。 7.4.2 LL(1)翻译法 【例7.11】算术表达式四元式翻译器的设计2: ⒈ 设置 语义栈:SEM[m] 四元式区:QT[q] 语法栈:SYN[n] ; ⒉ 翻译文法设计 E - T E′ ⑴ E′- + T{GEQ(+)}E′⑵| - T{GEQ(-)}E′ ⑶ | ? ⑷ T - F T′ ⑸ T′- * F{GEQ(*)}T′⑹ | / F{GEQ(/)}T′⑺ | ? ⑻ F - i{PUSH(i)} ⑼ | ( E ) ⑽ ⒊ LL(1)分析器的扩展 ⑵ 当动作符号位于栈顶时,执行之; ⑴ 当产生式(逆序)压栈时,动作符号也不例外; ※ 算术表达式四元式翻译过程 : LL(1) 分析表: ⑥ * ⑦ / ⑩ ⑤ ① ( ⑧ ④ ) ⑤ T ⑧ ⑧ ⑧ T` ⑨ F ④ ③ ② E` ① E # - + i 设 待翻译的表达式: a+b*c# SEM[m] QT[q] 操作 w x SYN[n] #E a E PUSH①R # E`T T a PUSH⑤R T`F #E` F a PUSH⑨R #E`T` PUSH(a)a a a #E`T`PUSH(a) + NEXT(w) a #E`T` T` + a PUSH⑧R #E` E` + PUSH②R a # E`GEQ(+)T+ + + a NEXT(w) b #E`GEQ(+)T T PUSH⑤R a #E`GEQ(+) T`F F b PUSH⑨R a

文档评论(0)

123****6651 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档