4.5章语法制导翻译及中间代码生成.pptVIP

4.5章语法制导翻译及中间代码生成.ppt

  1. 1、本文档共81页,可阅读全部内容。
  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文档。上传文档
查看更多
4.5章语法制导翻译及中间代码生成

第四、五章 语法制导翻译和中间代码生成 ;概述 ;中间代码的形式: 逆波兰式 树形表示法 三元式 四元式:最常用的形式;二、翻译方法 1、属性文法制导翻译 将文法的终结符、非终结符及动作 符号附加以语义参数,这些参数称作为文法符号的属性,从而构成属性文法。 注:1)在属性文法中是利用各种属性作为语义动作之间的通信介质 2)一个文法符号可以和多个语义参数相关联 ;3)属性可分为两种:继承属性和综合属性。继承属性值的计算规则是自上而下——产生式右部符号的某些值是根据其左部符号的属性和右部其它符号的某些属性计算而得。 4)综合属性值的计算规则是自下而上——产生式左部符号的某些属性值是根据其右部符号的属性和左部其它符号的某些属性计算而得。 5)属性翻译的依据是属性规则。 6)属性规则嵌入在产生式右部适当位置。;2、语法制导翻译 在语法分析的基础上进行边分析边翻译。 注:1)语法制导翻译时会根据文法产生式右部符号串的含义,进行翻译,翻译的结果是生成相应中间代码。 2)语法制导翻译的依据是语义子程序。 3)具体做法:为每个产生式配置一个语义子程序,当语法分析进行归约或推导时,调用语义子程序,完成一部分翻译任务。 4)语法分析完成,翻译工作也告结束。;语法制导翻译适用于多种语法分析。 语法制导翻译种类 1、自上而下语法制导翻译:对每个文法符号配以语义动作。 2、自下而上语法制导翻译:我们主要讨论LR语法制导翻译。;三、语义子程序 1、作用 用来描述一个产生式所对应的翻译工作。 如:改变某些变量的值;查填各种符号表;发现并报告源程序错误;产生中间代码等。 注:这些翻译工作很大程度上决定了要产生什么形式的中间代码。;2、写法 语义子程序写在该产生式后面的花括号内。 Eg: X ?α {语义子程序1} 注:在一个产生式中同一个文法符号可能出现多次,但他们代表的是不同的语义值,要区分可以加上角标。如:E ?E(1)+E (2) 3、语义值 为了描述语义动作,需要为每个文法符号赋予不同的语义值:类型、地址、代码值等。;4、语义栈 各个符号的语义值放在语义栈中 当产生式进行归约时,需对产生式右部符号的语义值进行综合,其结果作为左部符号的语义值保存到语义栈中。 下推栈包含3部分: 状态栈、符号栈和语义栈 注:语义栈与状态栈和符号栈是同步变化的。;注: 1)若把语义子程序改成产生某种中间代码的动作,就能在语法分析制导下,随着分析的进展逐步生成中间代码。 2)若把语义子程序改成产生某种机器的汇编语言指令,就能随着分析的进展逐步生成某机器的汇编语言代码。;例如: 产生式 语义子程序 (0)S` ?E {PRINT E?VAL} (1)E ?E (1)+E(2) {E?VAL= E (1) ?VAL +E(2) ?VAL } (2)E ?E (1)*E(2) {E?VAL= E (1) ?VAL *E(2) ?VAL } (3)E ?(E (1)) {E?VAL= E (1) ?VAL } (4)E ? i {E?VAL= LEXVAL } 注:LEXVAL指的是词法分析送来的机内二进制整数 ;四、常见的中间代码形式 1、四元式形式: (Operator,Operand1,Operand2,Result) 注: 1) Operand1,Operand2,Result 可能是用户自定义的变量,也可能是编译时引进的变量。 这里Operator是双目运算符,若只有一个运算量,则是单目运算符。 ;2)四元式中变量采用符号表入口的地址,而不用变量的地址,因为语义分析不仅需要变量的地址,还需要从符号表查到的变量的属性、类型和地址等。 3)四元式的优点是容易转换为目标代码和容易进行优化。;2、三元式 (Operator,Operand1,Operand2) 注: 1)这里三元式本身作为存放结果的单元。 2)为了在其它三元式中利用当前三

文档评论(0)

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

分享好文档!

1亿VIP精品文档

相关文档