- 1、本文档共52页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]第8章 语法制导翻译和中间代码生成
第8章 语法制导翻译和中间代码生成 编译程序的任务是把源程序翻译成目标程序,这个目标程序必须和源程序的语义等同。 编译中的语义处理指以下两个功能: 审查每个语法结构的静态语义 如果静态语义正确则将源程序翻译成中间代码或生成实际的目标代码 第8章 语法制导翻译和中间代码生成 8.1 属性文法 8.2 语法制导翻译概论 8.3 中间代码的形式 8.4 简单赋值语句的翻译 8.5 布尔表达式的翻译 8.6 控制结构的翻译 8.7 说明语句的翻译 8.8 数组的翻译 8.1 属性文法 目前很多编译程序采用属性文法和语法制导翻译方法对语义处理工作进行比较规范的描述。 属性:用于描述事物或人的特征、性质和品质等。 一个属性文法包含一个上下文无关文法和一系列语义规则,这些语义规则附在文法的每个产生式上。 所谓语法制导翻译是指在语法分析过程中,完成附加在所使用的产生式上的语义规则描述的动作。 8.1 属性文法 属性文法(attribute grammar)是一个三元组: A=(G,V,F),其中 G:一个上下文无关文法。 V:一个属性的有穷集,每个属性与文法的一个终结符或非终结符相连,这些属性代表与文法符号相关信息,如它的类型、值、代码序列、符号表内容等等。属性与变量一样,可以进行计算和传递。属性加工的过程即是语义处理的过程。 F:关于属性的断言或一组属性的计算规则(称为语义规则)。断言或语义规则与一个产生式相联,引用该产生式左端或右端的终结符或非终结符相联的属性。 8.1 属性文法 例,文法G: E ? T1+T2 E ? T1 or T2 T ? num T ? true T ? false 8.1 属性文法 属性通常分为两类:综合属性和继承属性。 属性文法中,对应于每个产生式A??都有一套与之相关联的语义规则,每条规则的形式为b:=f(c1,c2…ck) f是一个函数,b和c1,c2…ck是该产生式文法符号的属性. 并且 (1)如果b是A的一个属性,c1,c2…ck是产生式右部文法符号的属性或A的其他属性,则称b是A的综合属性。 (2)如果b是产生式右部某个文法符号X的一个属性,并且c1,c2…ck是A或产生式右边任何文法符号的属性,则称b是文法符号X 的继承属性。 在两种情况下,我们都说属性b依赖于属性c1,c2…ck 8.1 属性文法 非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性。 终结符只有综合属性,它们由词法程序提供。 出现在产生式左边的继承属性和出现在产生式右边的综合属性不由所给定的产生式的属性计算规则进行计算,它们由其它产生式的属性规则计算或者由属性计算器的参数提供。 Eg. 如非终结符A,B和C, 其中A有一个继承属性a和一个综合属性b, B有综合属性c, C有继承属性d 在产生式A?BC的语义规则中可计算 A.b:=f(A.a,B.c,C.d) Eg. A.b:=A.a+B.c C.d:=f(A.a,A.b,B.c) Eg. C.d:=B.c 而属性A.a和 B.c是在其他地方计算的。 8.1 属性文法 语义规则所描述的工作可以包括属性计算、静态语义检查、符号表操作、代码(中间)生成等等。通常把这样的语义规则写成过程调用或过程段。 8.1 属性文法 属性文法和综合属性的示例 简单算术表达式文法及其求值的语义描述 产生式 语义规则 L ? E { Print(E.val) } E ? E1+T { E.val:=E1.val+T.val } E ? T { E.val:=T.val } T ? T1*F { T.val:=T1.val ? F.val } T ? F { T.val:=F.val } F ? (E) { F.val:=E.val } F ? digit { F.val:=digit.lexval } E.Val,T.val,F.val是综合属性。 digit.lexval是综合属性,其值由词法分析程序提供。 8.1 属性文法 属性文法和继承属性的示例 描述说明语句文法及其语句中各种变量的类型信息的语义规则。 产生式 语义规则 D ?TL { L.in:=T.type } T? int {T.type:=integer } T ? real { T.type:=real } L ? L1,id { L1.in:=L.in addtype(id.entry,L.in) } L ? id { addtype(id.entry,L.in) } 过程addtype的功能是把每个标识符的类型信
您可能关注的文档
最近下载
- 浙江杭州余杭交通集团有限公司招聘笔试题库2023.pdf VIP
- 人工胆囊、人工胆囊设备和人工胆囊在胆囊手术中的应用.pdf VIP
- 重力与弹力高一上学期物理人教版2019必修第一册+.pptx VIP
- 胃癌的诊治现状与进展.pptx VIP
- 数控压装压力机 第2部分:技术条件.docx VIP
- 【课件】匀变速直线运动速度与时间的关系+课件-高一上学期物理人教版(2019)必修第一册.pptx VIP
- XX医院职能部门监管手术、麻醉授权管理督导、检查、总结、反馈及持续改进记录表.pdf VIP
- 电力调度数据网络接入技术规范及网络拓扑图.doc VIP
- ZZGA高频开关整流器使用说明书.doc
- 危重患者院内转运PPT.pptx VIP
文档评论(0)