sun编译原理第5章语法制导翻译技术和中间代码生成(第18-21讲).pptVIP

sun编译原理第5章语法制导翻译技术和中间代码生成(第18-21讲).ppt

  1. 1、本文档共59页,可阅读全部内容。
  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文档。上传文档
查看更多
5.1 概述;5.2 属性文法;■ 属性文法; 文法规则 语义规则 ? 规则 1 相关的属性等式 . . . . 规则 n 相关的属性等式; 1) 已知无符号数文法如下,请改写成值属性文法。 number ? number digit | digit digit ? 0|1|2|3|4|5|6|7|8|9;grammar rule semantic rules exp1 ? exp2+term exp1.val=exp2.val+term.val exp1 ? exp2-term exp1.val=exp2.val-erm.val exp ? term exp.val= term.val term1 ? term2*factor term1.val=term2.val*factor.val term ? factor term.val=factor.val factor ?(exp) factor.val=exp.val factor ? number factor.val=number.val;使用属性文法来计算属性值,即把属性等式转化成计算规则;例: 已知无符号数属性文法,请画出属性等式及345的依赖图。 ;所以字符串345对应的语法树的依赖图:;例2: 已知无符号数属性文法,??画出属性等式及float x,y的依赖图。 ;属性等式id.dtype = var-list.dtype 文法规则var-list?id的依赖图:;type (dtype = real) ;属性分为两类:1. 合成属性(或称综合属性) 2. 继承属性;2.一个属性如果不是合成的,则称作继承属性。;5.3 语法制导翻译概述;■ 语法分析时属性的计算;例: 对3*4+5进行LR分析并进行属性值的计算: E ? E + E|E – E|E * E|(E)|number ;例:已知无符号数文法如下,请改写成值属性文法,并对345进行语义分析。 number ? number digit | digit digit ? 0|1|2|3|4|5|6|7|8|9;number (val=3*10+4=34);例: 已知简单的整数算术表达式文法如下,请改写成值属性文法,并对 (34-3)*42 进行语义分析。 exp ? exp + term | exp-term | term term ? term*factor | factor factor ? (exp) | number ;term (val = 31) ;■ 语法制导翻译举例;词法规则的描述工具: 语法规则的描述工具: 语义规则的常用描述工具:;例: 简单表达式文法: E ? E + E | E – E | E * E | (E) | number ;■ 上讲内容回顾;■ 语法制导翻译举例;例: 利用下列属性文法对 (3+6)*9 进行语义分析。;■ 综合练习;5.4 中间语言;■ 逆波兰式;三元式由3个域和一个序号组成: (i)(op,arg1,arg2) 其中op为运算符,arg1,arg2是2个运算对象。 例:算术表达式的三地址码x=y op z 的三元式为: (1) (op,y,z) (2) (=,x,(1));例:赋值语句a=(c+d)*(c+d)相应的三元式代码为 (1) (+,c,d) (2) (+,c,d) (3) (*,(1),(2)) (3) (=,a,(3));在三元式代码表的基础上另设一张表,该表按运算的次序列出相应三元式在表中的位置,这张表称为间接码表。三元式表只记录不同的三元式语句,间接码表表示由这些语句组成的运算次序。;■树形表示;■ 四元式;■ 三地址码;■ 综合练习;■练习;5.5 自下而上语法制导翻译;■表达式中间代码生成;■表达式中间代码生成;1、表达式(~A+B)*(C+D)的逆波兰表示为( ) 2、写出赋值语句x=(a+b)*c/d的四元式序列。;一、中间代码有如下形式:;■ if语句中间代码生成;■if语句中间代码生成;形式2: if ( E ) S1 else S2;■if语句中间代码生成;■布尔表达式代码生成;布尔量间的运算除了一般的布尔代数运算外,还有一种运算方法,称为“短路布尔操作”。它的意义是:对于一个

文档评论(0)

勤能补拙 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档