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

编译原理 语法制导翻译和中间代码生成.pptVIP

编译原理 语法制导翻译和中间代码生成.ppt

  1. 1、本文档共177页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算术表达式和赋值语句中的类型检查 【例】设 x,y 为实型,i,j 为整型, 则表达式 x = y+i*j 的三地址码是: E?E1+E2的带语义检查的三地址码的语义动作 优先级 1、布尔表达式的翻译方法 讨论下述文法G[E]生成的布尔表达式: E→E∧E∣E∨E∣┐E∣(E)∣i∣i rop i 副作用的考虑 数值表示法 【例】 数值表示法 【例】根据数值表示法对布尔表达式 ab ∨ cd ∧ ef 翻译为三地址代码. 采取某种优化措施 2、控制语句中布尔表达式的翻译 定义一组控制转向的四元式 【例】语句 if ab then s 分析语句 if ab ∨c then S1 else S2 语句 while E do S 语句 if ab ∨c then S1 else S2的回填描述 需要的公共变量、过程、函数 E→E(1)∨E(2)的分析 【例】表达式 A∨BD 的翻译 控制语句的文法 条件语句 if 的翻译 条件语句 if 的文法和语义子程序的设计 C→if E then 的翻译 S→CS(1) 的翻译 Tp→CS(1) else的翻译 S→TPS(2)的翻译 循环语句while的文法和语义子程序设计 W→while 的翻译 Wd→W E do 的翻译 S→Wd S(1) 的翻译 【例】 while A∨BD do if (X6) then X = X-1 else Y = X+1 三种基本控制结构的翻译 G[S]中各产生式对应的语义子程序 8.4.4 for 循环语句的翻译 改写文法 (1) F1→for i=E(1) 的翻译 (2) F2→F1 step E(2) 的翻译 (3) F3→F2 until E(3) 的翻译 (4) S→F3 do S(1) 的翻译 翻译示例 for i=1 step 10 until N do k=k+1; 8.4.4-1 开关语句 switch常见的一种中间代码形式 8.4.4-2 语句标号和转移语句的翻译 向后引用、向前引用 翻译 goto L 翻译语句 L:S 翻译goto语句时,还有两点必须注意 8.4.5 简单说明语句的翻译 最简单的说明语句的语法描述 改造文法G[D]为G‘[D]: 文法G‘[D]和相应的语义子程序 ★过程中的说明语句 (单层) 作用域信息(嵌套) 带嵌套的过程说明的说明语句的文法 需要的操作 设计两个栈 tblptr和offset 带嵌套的过程说明语句的翻译 ★ 记录中的域名 8.4.6含数组元素的赋值语句的翻译 数组的一般定义 赋值语句中数组元素的翻译 改写文法 设置如下的语义变量和函数: 含有数组元素的赋值语句的文法G[A]及相应的语义子程序(省略语义检查): 【例】对于数组 a[2,3] 即 d1=2,d2=3 数组说明的翻译 例如,数组 int A[l1:u1, l2:u2,…,ln:un]相应的内情向量见表为 8.5 递归下降语法制导的翻译 制导翻译程序 实现数组元素的地址计算时,将产生两组四元式序列: 对数组元素的引用和赋值就有如下两种不同的四元式: 变址存数:若有 T1[T]=X,则可以用四元式 ([]=,X,_,T1[T])表示。 变址取数:若有 X=T1[T],则可用四元式 (=[],T1[T],_,X)表示。 一组计算 bap,其值存放在临时变量 T 中; 一组计算 Vap,其值存放在临时变量 T1 中, 即用 T1[T]表示数组元素的地址。 程序语言中直接改变控制流程的语句是 goto L 语句; 其中 L 是源程序中的语句标号。 标号 L 在源程序中可以以两种方式出现: 定义性出现。定义性出现的语句形式为 L:S 此时,带标号的语句 S 所生成的第一个四元式地址即为标号 L 的值。 引用性出现。引用性出现的语句形式为 goto L 它引用 L 的值作为四元式(goto,_,_,L)中转向的目标地址。 当标号 L 定义性出现时,应将标号此时对应的四元式地址(即标号 L 的值)登录到符号表中 L 所对应的项; 当标号 L 引用性出现时,则引用符号表中该标号 L 的值。 对标号 L 的处理方法是: 如果标号的定义性出现在前而引用性出现在后,即先定值后引用(称为向后引用),则填、查符号表及将转移语句翻译成四元式很容易。 如果标号引用性出现在前而定义性出现在后(称为向前引用),则引用时不可能从符号表中获得标号 L 的值,此时只能生成有待回填的四元式(goto,_,_,0),等到向前翻译到标号 L 定义性出现时,再将标号 L 的值回填到待填的四元式中。 翻译 goto L 语句时需要查符号表,看 L 是否为定值,有以下几种情况: (1) L 已经定值,即 L.value 为符号表中所记录的 L 值,这时生成(

文档评论(0)

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

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

1亿VIP精品文档

相关文档