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

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

ID:40407767

大小:903.56 KB

页数:129页

时间:2019-08-01

东北大学秦皇岛分校编译原理课件第八章_第1页
东北大学秦皇岛分校编译原理课件第八章_第2页
东北大学秦皇岛分校编译原理课件第八章_第3页
东北大学秦皇岛分校编译原理课件第八章_第4页
东北大学秦皇岛分校编译原理课件第八章_第5页
资源描述:

《东北大学秦皇岛分校编译原理课件第八章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第八章语法制导翻译和中间代码生成8.1概述8.2属性文法和语法制导翻译8.3语义分析8.4中间代码8.5一些语句的翻译概述语义处理程序设计语言的语义:按语法规则构成的各个语法成分的含义。静态语义是对程序约束的描述,这些约束无法通过抽象语法规则来妥善地描述,实质上就是语法规则的形式条件,它可以分为类型规则和作用域/可见性规则两大类,如:类型相容性变量先声明后引用名称相关要求动态语义程序单位描述的计算编译程序的语义处理工作:静态语义审查、解释执行动态语义(计算)生成代码...语法分析后的源程序Þ语义处理语义形式化语义建模文法模型----属性文法命令式或操作式模型-----操作语义学应用式模型--

2、---指称语义学公理式模型-----公理语义学程序设计语言的语义分为两类:静态语义:编译时刻便可确定的语法成分的含义。动态语义:运行时刻才能理解与确定的语法成分的含义。语法制导是指在语法规则的指导下,通过计算语义规则,完成对输入符号串的语义翻译处理。语义分析的功能确定类型。确定标识符所关联的数据类型。(有时这个工作直接由词法分析完成)类型检查。按照语言的类型规则,对运算及进行运算的运算分量进行类型检查,检查运算的合法性与运算分量类型的一致性(相容性),必要时作相应的类型转换。识别含义。根据程序设计语言的语义定义(形式的或非形式的),确认(识别)程序中各构成组合到一起的含义,并作相应的语义处理

3、。这时对可执行语句生成中间表示或目标代码。控制流检查。控制流语句必须转移到合法的地方,如C中,break语句使得控制跳离包括该语句的最小while、for或switch语句,如果不存在包括它的这样的语句,则报错。一致性检查。在很多场合要求对象只能被说明一次,如PASCAL规定同一标识符在一个分程序中只能被说明一次等。相关名字检查。有的语言,如Ada,循环或程序块可以有一个名字,它出现在这些结构的开头或结尾,编译程序必须检查这两个地方用的名字是否相同。其它。如名字的作用域分析等也是语义分析的工作。语法制导翻译语法制导翻译的概念:P157语法制导翻译的基本思想:给文法中的每一个产生式添加一个成分

4、,这个成分通常称为语义动作或翻译子程序,在执行语法分析的同时,执行相应产生式的语义动作。这些语义动作不仅指明了该产生式所生成的符号串的含义,而且还根据这种意义规定了对应的加工动作,包括查填各类符号表、改变编译程序的某些变量的值,接着就执行相应的语义动作,完成规定的翻译工作。在这种情况下,语法分析工作和语义分析工作是穿插进行的。在自上而下语法分析中,若一个产生式匹配输入串成功,或者,在自下而上分析中,当一个产生式被用于归约时,此产生式相应的语义规则就被计算,完成有关语义分析和代码生成的工作。属性文法表达式文法ET+T

5、TorT Tn

6、bET1+T2{T1.type=intT2.type=

7、T1.typeE.type:=int}ET1orT2{T1.type=boolT2.type=T1.typeE.type:=bool}Tn{T.type:=int}Tb{T.type:=bool}属性文法语法制导翻译是通过属性文法来实现的。属性:对文法的每一个符号,引进一些属性,这些属性代表与文法符号相关的信息,例如类型、值、代码序列、符号表内容等。属性一般用标识符(或数)表示,它的意义局部于它所在的产生式。与这些属性相关的信息,即属性值,可以在语法分析过程中通过文法中的产生式而层层计算和传递(有时从产生式的左边向右传递,有时从产生式的右边向左边传递),当语法树最终构造完成时,就得到文

8、法开始符号的属性值,它也是该文法所描述的对象的最终语义,属性加工的过程即语义处理过程。属性又分为综合属性和继承属性。综合属性用于“自下而上”传递信息,也称推导型属性;而继承属性用于“自上而下”传递信息,也称归约型属性。通常规定:每个文法符号的继承属性和综合属性之交集为空。在语法树分析中,一个结点的综合属性的值由其子结点的属性值确定,而一个结点的继承属性的值由该结点的兄弟和/或父结点的属性值来计算。语义规则为文法的每一个规则配备的计算属性的计算规则,称为语义规则。语义规则的工作可以包括:属性计算、静态语义检查、符号表操作、代码生成等。语义规则可能产生副作用(如产生代码),也可能不是变元的严格函

9、数(如某个规则给出可用的下一个数据单元的地址)。这样的语义规则通常写成过程调用或过程段。属性文法:对于某个压缩了的上下文无关文法,当为每个文法符号引进一组属性,并且让该文法中的产生式附加以对属性进行处理的语义规则时,称该上下文无关文法为属性文法。根据不同的语法成分的语义,可以设计对不同的语法成分进行翻译的属性文法。其间要注意在不同时刻对不同信息的保存与获取,而这些也是通过属性文法中对文法符号属性的处理来实现的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。