网站大量收购独家精品文档,联系QQ:2885784924

编译原理第七章 中间语言(3).ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.4 中间代码翻译的实现 7.4.1 递归子程序翻译法 ※ 算术表达式翻译文法的递归子程序: (接上页) ※ 算术表达式四元式翻译过程 : 7.4.2 LL(1)翻译法 ※ 算术表达式四元式翻译过程 : (接上页) 7.4.3 LR()翻译法 ※ SLR(1)分析表的构造: ※ 算术表达式四元式翻译过程 : 7.4.4 算符优先翻译法 ※ 算术表达式四元式翻译过程 : 7.4.5 翻译文法的变换问题1 7.4.5 翻译文法的变换问题2 7.4.5 翻译文法的变换问题3 7.4.5 翻译文法的变换问题4 练习题: 【习题7.8】根据语法制导翻译器的实现结构: ※ SLR(1)分析表的构造: 谢谢收看! * * 语法制导翻译器的结构,可描述为: 扩展的语法分析器 翻译文法 + ⒈ 自顶向下翻译文法的要求: ⑴ 源文法应满足自顶向下分析要求(如 LL(1)文法); ⑵ 属性是自顶向下可求值的(属性计算不发生冲突); ⑶ 动作符号可插入到产生式右部任何位置。 ⒉ 自底向上翻译文法的要求: ⑴ 源文法应满足自底向上分析要求(如 LR( )文法); ⑵ 属性是自底向上可求值的(属性计算不发生冲突); ⑶ 动作符号只能位于产生式的最右端。 L-属性翻译文法 S-属性翻译文法 其中 ⒈ 设置 语义栈: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.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

文档评论(0)

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

文档来源于网络

1亿VIP精品文档

相关文档