- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章 语法制导翻译和中间代码生成 教学要求:本章介绍编译程序的第三个阶段语义分析及中间代码生成的设计原理和实现方法,要求理解语法制导翻译、语义动作的基本概念;掌握语义规则和中间代码的表示形式。 教学重点:语义规则,中间代码的表示形式,自下而上分析制导翻译概述。 语义处理功能: 1、静态语义审查:验证语法结构合理的程序是否真正有意义。 2、解释执行动态语义、生成代码:执行真正的翻译(生成中间代码或目标代码)。 1、属性文法(说明语言语义的工具)定义 属性文法是一个三元组:A=(G,V,F),其中: G:是一个上下文无关文法。 V:有穷的属性集,每个属性与文法的一个终结符或非终结符相连。如它的类型、值、代码序列、符号表内容等等。 F:关于属性的属性断言或一组属性的计算规则(称为语义规则) . 断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相联的属性. 8.1 属性文法 例1:定义表达式的文法如下: E?E+E E?(E) E?n 给出定义表达式值的属性文法。 为文法符号E引进属性符号val,用E.val表示E的值,属性计算规则以赋值语句的形式给出,附在每个产生式后,并用大括号括起来。为了明确E的不同出现位置,用上角标区别。终结符n的值是词法分析程序提供的,这里用n.lex表示。下面给出属性文法: E?E1+E2 {E.val := E1.val +E2.val} E?(E1) {E.val := E1.val } E?n {E.val := n.lex} 属性文法的主要思想有两点: 首先对于每个文法符号引进相关的属性符号; 其次对于每个产生式写出属性值计算的规则。 2、属性分类 综合属性:一个结点的属性值是从其子结点的属性值计算出来的。 继承属性:一个结点的属性值是由该结点兄弟结点和父结点的属性值计算出来的。 3、属性的计算 综合属性计算 自底向上按照语义规则来计算各结点的综合属性值 继承属性计算 根据依赖关系决定计算顺序 例1 台式计算器程序的语法制导定义 产生式 语义规则 {print(E?val)} {E?val:=E1?val+T?val} {E?val:=T?val} {T?val:=T1?val*F?val} {T?val:=F?val} {F?val:=E?val} {F?val:=digit?lexval} 1、与L→E相连的语义规则是一个过程,打印E的值,理解为L的属性是虚的或空的。 2、E,T,F的属性val都为综合属性。 3、lexval 是单词 digit 的属性(由词法程序提供)。 L?E E?E1+T E?T T?T1*F T?F F?(E) F?digit L E.val=21 E.val=15 T.val=6 T.val=15 F.val=6 T.val=3 F.val=3 F.val=5 digit.lexval=6 digit.lexval=5 digit.lexval=3 + * 3*5+6的带注释的分析树和属性计算 L?E E?E1+T E?T T?T1*F T?F F?(E) F?digit {print(E?val)} {E?val:=E1?val+T?val} {E?val:=T?val} {T?val:=T1?val*F?val} {T?val:=F?val} {F?val:=E?val} {F?val:=digit?lexval} 例2:说明语句语法制导定义(属性文法) L.in:=T.type T.type:=integer T.type:=real L1.in:=L.in addtype(id.entry,L.in) addtype(id.entry,L.in) entry 单词id的属性 addtype 在符号表中为变量填加标识符的类型信息 D→TL T→int T→real L→L1,id L→id D L.in= real L.in= real L.type= real T.type=real real id2 id1 id3 . . Real id1,id2,id3的带注释的语法树属性计算 , , {L.in:=T.type} {T.type:=integer} {T.type:=real} {L1.in:=L.in} {addtype(id.entry,L.in)} {addtype(id.entry,L.in)} D→TL T→int
您可能关注的文档
最近下载
- 七年级上册语文第一单元重点内容整合练习含答案及解析.pdf
- 植物界 一、植物界的主要类群.ppt VIP
- 【36页PPT】CQI23模塑系统评估.pptx VIP
- 全科医生转岗培训模拟练习题附答案6.doc
- 2022-LY-022林地保护利用规划林地落界技术规程.pdf VIP
- (高清版)W-S-T 403-2024 临床化学检验常用项目分析质量标准.pdf VIP
- YYT1437-2023 医疗器械 GBT42062应用指南.pdf VIP
- 2025年全国导游资格证考试《全导+地导》真题卷(含答案).pdf VIP
- CBT 3000-2019 船舶生产企业生产条件基本要求及评价方法.docx VIP
- 交通事故案例分析.ppt VIP
文档评论(0)