编译原理语义_1(属性文法和语法制导翻译)课件.ppt

编译原理语义_1(属性文法和语法制导翻译)课件.ppt

ID:57166075

大小:419.00 KB

页数:33页

时间:2020-08-02

编译原理语义_1(属性文法和语法制导翻译)课件.ppt_第1页
编译原理语义_1(属性文法和语法制导翻译)课件.ppt_第2页
编译原理语义_1(属性文法和语法制导翻译)课件.ppt_第3页
编译原理语义_1(属性文法和语法制导翻译)课件.ppt_第4页
编译原理语义_1(属性文法和语法制导翻译)课件.ppt_第5页
资源描述:

《编译原理语义_1(属性文法和语法制导翻译)课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第9讲编译原理西北农林科技大学本科教程主讲教师:赵建邦第四章语义分析和中间代码生成4.1语义分析概述4.2属性文法4.3几种常见的中间语言4.4表达式及赋值语句的翻译4.5控制语句的翻译4.6数组元素的翻译4.7过程或函数调用语句的翻译4.8说明语句的翻译4.9递归下降语法制导翻译方法简介第四章《语义分析和中间代码生成》4.1语义分析概述4.2属性文法4.3几种常见的中间语言重点掌握语法翻译制导思想逆波兰表示法三地址代码(四元式、三元式)本讲目标4.1语义分析概述4.1.1语义分析的内容语义分析包括两部分:1.静态语义审

2、查(编译阶段)(1)类型检查:检查运算的合法性和运算分量类型的相容性,必要时进行类型转换。(2)控制流检查:保证控制语句有合法的转向点。(3)一致性检查。2.生成目标代码或中间代码生成中间代码的好处:(1)使得编译结构在逻辑上更为简单明确(2)容易实现目标代码的优化4.1语义分析概述4.1.1如何实现语义分析?语义分析不像词法分析和语法分析那样,分别可以用正规文法和上下文无关文法形式化地进行描述语义分析的描述工具:属性文法语义分析的实现方式:语法制导翻译其中,属性文法是语法制导翻译的基础4.1语义分析概述4.1.2语法制

3、导翻译方法(原理)语法制导翻译的方法就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并在语法分析的同时执行这些子程序。语义子程序的作用:描述一个产生式所对应的翻译工作。如:改变变量的值,查、填符号表、发现语义错误、产生中间代码等。所以,在语法分析过程中,当每一个产生式获得匹配(对应自顶向下推导)或成功规约(对应于自底向上)时,此产生式相应的语义子程序进入工作,最终完成翻译工作。那么,语法制导翻译分为自顶向下和自底向上两种。4.1语义分析概述4.1.2语法制导翻译方法(实例)假定有一个自底向上的LR分析器,原

4、始功能是规约输入串。如:“#7+9*5#”。现在将它的功能加以扩大,使其在规约输入串的同时调用语义子程序计算输入串的语义。产生式语义动作(0)S'→Eprintval[TOP] (1)E→E(1)+E(2)val[TOP]=val[TOP]+val[TOP+2] (2)E→E(1)*E(2)val[TOP]=val[TOP]*val[TOP+2] (3)E→(E(1))val[TOP]=val[TOP+1] (4)E→ival[TOP]=lexval (注:lexval为i的整型内部值)图4-1扩充后的LR分析栈注意语义

5、栈的功能:完成语义动作后,保存语义值状态栈、符号栈和语义栈三者同步变化2.在用某一规则进行归约之后,调用相应语义子程序完成语义动作,将改变的语义值保存在语义栈中表4.1表达式“7 + 9*5#”的语义分析和计值过程产生式语义动作(0)S'→Eprintval[TOP] (1)E→E(1)+E(2)val[TOP]=val[TOP]+val[TOP+2] (2)E→E(1)*E(2)val[TOP]=val[TOP]*val[TOP+2] (3)E→(E(1))val[TOP]=val[TOP+1] (4)E→ival[T

6、OP]=lexval (注:lexval为i的整型内部值)规约时,先对产生式右部的语义值进行综合,其结果作为左部符号的语义值保存在语义栈中。4.2属性文法4.2.1文法的属性属性是指与文法符号的类型和值等有关的一些信息,在编译中用属性描述处理对象的特征对于一棵等待翻译的语法树,它的各个结点都是文法中的一个符号:X,该X可以是终结符或非终结符文法符号X的属性一般包括三种:X.type:X的类型X.place:X的存储位置X.val:X的值4.2.1文法的属性文法符号的属性按照语法分析方向(推导还是规约)分为两种:继承属性和

7、综合属性1.继承属性:用于“自顶向下”传递信息,继承属性由相应语法树中结点的父结点属性计算得到,即沿语法树向下传递,由根结点到分枝(子)结点,它反映了对上下文依赖的特性。2.综合属性:用于“自底向上”传递信息,综合属性由相应语法分析树中结点的分枝结点(即子结点)属性计算得到,其传递方向与继承属性相反,即沿语法分析树向上传递,从分枝结点到根结点。4.2属性文法4.2属性文法属性文法是经过扩展了的常规文法,适用于定义语义。即在语言的文法中增加了属性信息:1.将文法符号的语义以“属性”的形式附加到各个文法符号上;2.根据产生式

8、所包含的含义,给出每个文法符号属性的求值规则。所以,从而形成一种带有语义属性的上下文无关文法,即属性文法。属性有助于更详细地指定文法中的代码生成动作。4.2属性文法例如,简单算术表达式求值的属性文法如下:产生式语义规则(1) S→Eprint(E.val)(2) E→E(1)+TE.val = E(1).val+T.

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

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

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