东北大学秦皇岛分校编译原理课件第八章.ppt

东北大学秦皇岛分校编译原理课件第八章.ppt

  1. 1、本文档共129页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章语法制导翻译和中间代码生成 概述 语义处理 语义形式化 语义建模 文法模型---- 属性文法 命令式或操作式模型 ----- 操作语义学 应用式模型-----指称语义学 公理式模型-----公理语义学 程序设计语言的语义分为两类: 静态语义:编译时刻便可确定的语法成分的含义。 动态语义:运行时刻才能理解与确定的语法成分的含义。 语法制导是指在语法规则的指导下,通过计算语义规则,完成对输入符号串的语义翻译处理。 语义分析的功能 确定类型。确定标识符所关联的数据类型。(有时这个工作直接由词法分析完成) 类型检查。按照语言的类型规则,对运算及进行运算的运算分量进行类型检查,检查运算的合法性与运算分量类型的一致性(相容性),必要时作相应的类型转换。 识别含义。根据程序设计语言的语义定义(形式的或非形式的),确认(识别)程序中各构成组合到一起的含义,并作相应的语义处理。这时对可执行语句生成中间表示或目标代码。 控制流检查。控制流语句必须转移到合法的地方,如C中,break语句使得控制跳离包括该语句的最小while、for或switch语句,如果不存在包括它的这样的语句,则报错。 一致性检查。在很多场合要求对象只能被说明一次,如PASCAL规定同一标识符在一个分程序中只能被说明一次等。 相关名字检查。有的语言,如Ada,循环或程序块可以有一个名字,它出现在这些结构的开头或结尾,编译程序必须检查这两个地方用的名字是否相同。 其它。如名字的作用域分析等也是语义分析的工作。 语法制导翻译 语法制导翻译的概念:P157 语法制导翻译的基本思想:给文法中的每一个产生式添加一个成分,这个成分通常称为语义动作或翻译子程序,在执行语法分析的同时,执行相应产生式的语义动作。这些语义动作不仅指明了该产生式所生成的符号串的含义,而且还根据这种意义规定了对应的加工动作,包括查填各类符号表、改变编译程序的某些变量的值,接着就执行相应的语义动作,完成规定的翻译工作。 在这种情况下,语法分析工作和语义分析工作是穿插进行的。在自上而下语法分析中,若一个产生式匹配输入串成功,或者,在自下而上分析中,当一个产生式被用于归约时,此产生式相应的语义规则就被计算,完成有关语义分析和代码生成的工作。 属性文法 表达式文法 E ? T+T| T or T T ? n | b E?T1 + T2 { T1.type = int T2.type= T1.type E.type :=int} E ?T1 or T2 { T1.type = bool T2.type= T1.type E.type :=bool} T ? n { T.type := int} T ? b { T.type := bool} 属性文法 语法制导翻译是通过属性文法来实现的。 属性:对文法的每一个符号,引进一些属性,这些属性代表与文法符号相关的信息,例如类型、值、代码序列、符号表内容等。 属性一般用标识符(或数)表示,它的意义局部于它所在的产生式。 与这些属性相关的信息,即属性值,可以在语法分析过程中通过文法中的产生式而层层计算和传递(有时从产生式的左边向右传递,有时从产生式的右边向左边传递),当语法树最终构造完成时,就得到文法开始符号的属性值,它也是该文法所描述的对象的最终语义,属性加工的过程即语义处理过程。 属性又分为综合属性和继承属性。综合属性用于“自下而上”传递信息,也称推导型属性;而继承属性用于“自上而下”传递信息,也称归约型属性。 通常规定:每个文法符号的继承属性和综合属性之交集为空。 在语法树分析中,一个结点的综合属性的值由其子结点的属性值确定,而一个结点的继承属性的值由该结点的兄弟和/或父结点的属性值来计算。 语义规则 为文法的每一个规则配备的计算属性的计算规则,称为语义规则。 语义规则的工作可以包括:属性计算、静态语义检查、符号表操作、代码生成等。 语义规则可能产生副作用(如产生代码),也可能不是变元的严格函数(如某个规则给出可用的下一个数据单元的地址)。这样的语义规则通常写成过程调用或过程段。 属性文法:对于某个压缩了的上下文无关文法,当为每个文法符号引进一组属性,并且让该文法中的产生式附加以对属性进行处理的语义规则时,称该上下文无关文法为属性文法。 根据不同的语法成分的语义,可以设计对不同的语法成分进行翻译的属

文档评论(0)

wendan118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档