编译原理语义1(属性文法和语法制导翻译).pptx
《编译原理语义1(属性文法和语法制导翻译).pptx》由会员分享,可在线阅读,更多相关《编译原理语义1(属性文法和语法制导翻译).pptx(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第 9 9 讲讲西北农林科技大学本科教程西北农林科技大学本科教程 主讲教师:赵建邦主讲教师:赵建邦 第四章第四章 语义分析和中间代码生成语义分析和中间代码生成l4.1 4.1 语义分析概述语义分析概述l4.2 4.2 属性文法属性文法l4.3 4.3 几种常见的中间语言几种常见的中间语言l4.4 4.4 表达式及赋值语句的翻译表达式及赋值语句的翻译l4.5 4.5 控制语句的翻译控制语句的翻译l4.6 4.6 数组元素的翻译数组元素的翻译l4.7 4.7 过程或函数调用语句的翻译过程或函数调用语句的翻译l4.8 4.8 说明语句的翻译说明语句的翻译l4.9 4.9 递归下降语法制导翻译方法简
2、介递归下降语法制导翻译方法简介u第四章第四章语义分析和中间代码生成语义分析和中间代码生成l4.1 4.1 语义分析概述语义分析概述l4.2 4.2 属性文法属性文法l4.3 4.3 几种常见的中间语言几种常见的中间语言u重点掌握重点掌握l语法翻译制导思想语法翻译制导思想l逆波兰表示法逆波兰表示法l三地址代码(四元式、三元三地址代码(四元式、三元式)式)本讲目标本讲目标 4.1 4.1 语义分析概述语义分析概述u4.1.1 语义分析的内容语义分析的内容l语义分析包括两部分:语义分析包括两部分:1.1.静态静态语义审查(编译阶段)语义审查(编译阶段)(1)类型检查:检查运算的合法性和运算分量类型的
3、相容性,类型检查:检查运算的合法性和运算分量类型的相容性,必要时进行类型转换。必要时进行类型转换。(2)控制流检查:保证控制语句有合法的转向点。控制流检查:保证控制语句有合法的转向点。(3)一致性一致性检查:变量重复声明、检查:变量重复声明、case语句相同入口等。语句相同入口等。2.2.生成生成目标代码或目标代码或中间代码中间代码 生成中间代码的好处:生成中间代码的好处:(1)使得编译结构在逻辑上更为简单明确使得编译结构在逻辑上更为简单明确 (2)容易实现目标代码的优化容易实现目标代码的优化 4.1 4.1 语义分析概述语义分析概述u4.1.1 如何实现语义分析?如何实现语义分析?l语义分析
4、不像词法分析和语法分析那样,分别可以用正规文语义分析不像词法分析和语法分析那样,分别可以用正规文法和上下文无关文法形式化地进行描述法和上下文无关文法形式化地进行描述l语义分析的描述工具:属性文法语义分析的描述工具:属性文法l语义分析的实现方式:语法制导翻译语义分析的实现方式:语法制导翻译 其中,属性文法是语法制导翻译的基础其中,属性文法是语法制导翻译的基础4.1 4.1 语义分析概述语义分析概述u4.1.2 语法制导翻译方法(原理)语法制导翻译方法(原理)l语法制导翻译的方法就是语法制导翻译的方法就是为每个产生式配上一个翻译子程序为每个产生式配上一个翻译子程序(称语义动作或称语义动作或语义子程
5、序语义子程序),并在语法分析的同时执行这些,并在语法分析的同时执行这些子程序。子程序。l语义子程序的作用:描述一个产生式所对应的翻译工作。语义子程序的作用:描述一个产生式所对应的翻译工作。如:改变变量的值,查、填符号表、发现语义错误、如:改变变量的值,查、填符号表、发现语义错误、产生中间代码等。产生中间代码等。l所以所以,在语法分析过程中,当每一个产生式获得匹配(,在语法分析过程中,当每一个产生式获得匹配(对应对应自顶向下推导自顶向下推导)或成功规约()或成功规约(对应于自底向上对应于自底向上)时,此产生)时,此产生式相应的语义子程序进入工作,最终完成翻译工作。式相应的语义子程序进入工作,最终
6、完成翻译工作。l那么,语法制导翻译分为自顶向下和自底向上两种。那么,语法制导翻译分为自顶向下和自底向上两种。4.1 4.1 语义分析概述语义分析概述u4.1.2 语法制导翻译方法(实例)语法制导翻译方法(实例)l假定有一个自底向上的假定有一个自底向上的LRLR分析器,原始功能是规约输入串。分析器,原始功能是规约输入串。如:如:“#7+9*5#”。现在将它的功能加以扩大,使其在规约输。现在将它的功能加以扩大,使其在规约输入串的同时调用语义子程序计算输入串的语义。入串的同时调用语义子程序计算输入串的语义。产生式产生式 语义动作语义动作(0)SE print valTOP(1)EE(1)+E(2)v
7、alTOP=valTOP+valTOP+2(2)EE(1)*E(2)valTOP=valTOP*valTOP+2(3)E(E(1)valTOP=valTOP+1(4)Ei valTOP=lexval (注:注:lexval为为i的整型内部值的整型内部值)图图4-1 扩充后的扩充后的LR分析栈分析栈注意语义栈的功能:完成语义动作后,保存语义值注意语义栈的功能:完成语义动作后,保存语义值1.1.状态栈、符号栈和状态栈、符号栈和语义栈三者同步变化语义栈三者同步变化2.2.在用某一规则进行在用某一规则进行归约,栈顶保存归约,栈顶保存文法文法符号符号之后之后,调用相应,调用相应语义子程序完成语义语义子程
8、序完成语义动作,将改变的动作,将改变的语义语义值值保存在语义栈中保存在语义栈中表表4.1 表达式表达式“7+9*5#”的语义分析和计值过程的语义分析和计值过程产生式产生式 语义动作语义动作(0)SE print valTOP(1)EE(1)+E(2)valTOP=valTOP+valTOP+2(2)EE(1)*E(2)valTOP=valTOP*valTOP+2(3)E(E(1)valTOP=valTOP+1(4)Ei valTOP=lexval (注:注:lexval为为i的整型内部值的整型内部值)规约时,先对产生式右部的语义值进行综合,其结果作为左部符规约时,先对产生式右部的语义值进行综合
9、,其结果作为左部符号的语义值保存在语义栈中。号的语义值保存在语义栈中。4.2 4.2 属性文法属性文法u4.2.1 文法的属性文法的属性 属性属性是指与是指与文法符号的类型和值等有关的一些信息,文法符号的类型和值等有关的一些信息,在编译在编译中用属性描述处理对象的中用属性描述处理对象的特征特征 对于对于一棵等待翻译的语法树,它的各个结点都是文法中的一一棵等待翻译的语法树,它的各个结点都是文法中的一个个符号符号:X:X,该,该X X可以是可以是终结符终结符或或非终结符非终结符l文法符号文法符号X X的属性一般包括三种:的属性一般包括三种:X.type:X的类型的类型X.place:X的存储位置的
10、存储位置X.val:X的值的值u4.2.1 文法的属性文法的属性l文法符号的属性文法符号的属性按照语法分析方向(推导还是规约)分为两按照语法分析方向(推导还是规约)分为两种:继承属性和综合属性种:继承属性和综合属性 1.1.继承属性继承属性:用于:用于“自顶向下自顶向下”传递传递信息,信息,继承属性由相应继承属性由相应语法树中结点的父结点属性计算得到,即语法树中结点的父结点属性计算得到,即沿语法树向下传递沿语法树向下传递,由根结点到分枝由根结点到分枝(子子)结点,它反映了对上下文依赖的结点,它反映了对上下文依赖的特性。特性。2.2.综合属性综合属性:用于用于“自底向上自底向上”传递传递信息,综
11、合信息,综合属性由相应属性由相应语法分析树中语法分析树中结点的分枝结点结点的分枝结点(即子结点即子结点)属性计算得到属性计算得到,其传,其传递方向与继承属性相反,即递方向与继承属性相反,即沿语法分析树向上传递沿语法分析树向上传递,从分枝结,从分枝结点到根点到根结点。结点。4.2 4.2 属性文法属性文法u4.2 属性文法属性文法l属性文法属性文法是经过扩展了的常规文法,适用于定义语义。即在是经过扩展了的常规文法,适用于定义语义。即在语言的文法中增加了属性信息:语言的文法中增加了属性信息:1.1.将文法符号的语义以将文法符号的语义以“属性属性”的形式附加到各个文法符号的形式附加到各个文法符号上;
12、上;2.2.根据产生式所包含的含义,给出每个文法符号属性的求值根据产生式所包含的含义,给出每个文法符号属性的求值规则。规则。l所以,从而形成一种带有语义属性的上下文无关文法,即所以,从而形成一种带有语义属性的上下文无关文法,即属属性文法。性文法。属性有助于更详细地指定文法中的代码生成动作属性有助于更详细地指定文法中的代码生成动作。4.2 4.2 属性文法属性文法例如,简单算术表达式求值的属性文法如下:例如,简单算术表达式求值的属性文法如下:产生式产生式 语义规则语义规则 (1)SE print(E.val)(2)EE(1)+T E.val=E(1).val+T.val (3)ET E.val=
13、T.val (4)TT(1)*F T.val=T(1).val*F.val (5)TT(1)T.val=T(1).val (6)F(E)F.val=E.val (7)Fi F.val=i.lexvallexval是词法分析送来的整型内部值是词法分析送来的整型内部值4.2 4.2 属性文法(综合属性)属性文法(综合属性)表达式左侧的非终结符语义值来自于右侧语义的计算,表达式左侧的非终结符语义值来自于右侧语义的计算,因此称为综合属性因此称为综合属性再举一例说明属性文法。一简单变量类型说明的文法再举一例说明属性文法。一简单变量类型说明的文法GD如下:如下:GD:Dint L|float L LL,i
14、d|id4.2 4.2 属性文法(继承属性)属性文法(继承属性)产生式产生式语义规则语义规则代码段代码段(1)DTLL.in=T.type(2)TintT.type=intvaltop=int(3)TfloatT.type=floatvaltop=float(4)LL(1),id L(1).in=L.in;addtype(id.entry,L.in)addtype(valtop,valtop+3)(5)Lidaddtype(id.entry,L.in)addtype(valtop,valtop+1)4.2 4.2 属性文法(继承属性)属性文法(继承属性)属性属性L.inL.in被确定后将随被确
15、定后将随语法树的逐步生成而传语法树的逐步生成而传递到下边的有关结点使递到下边的有关结点使用,这种结点属性称为用,这种结点属性称为继承属性继承属性输入串输入串语义栈语义栈产生式产生式int a,ba,b inta,b TTint,b Ta,b TLLidb TL,TL,bTLLL,idDDTLinta,b的分析过程u4.3.1 抽象语法树抽象语法树l抽象语法树是一种较为流行的中间语言表示形式。抽象语法树是一种较为流行的中间语言表示形式。l每一个叶子结点表述运算对象,其它内部结点表示运算符。每一个叶子结点表述运算对象,其它内部结点表示运算符。l抽象语法树由语法树去掉一切不必要的信息得来。抽象语法树
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 语义 属性 文法 语法 制导 翻译
限制150内