版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第 6 章章 语义分析语义分析n学习目标学习目标:掌握掌握:依赖图依赖图, 属性计算算法属性计算算法理解理解:属性文法的概念属性文法的概念, 合成和继承属性合成和继承属性, s-属属性文法性文法, l-属性文法属性文法, 符号表符号表 语义分析概述语义分析概述1 语义语义2 语义分析语义分析3 语义分析的典型实现语义分析的典型实现4 语义分析的方法语义分析的方法1 语义语义与被翻译过程的最终含义密切相关的信与被翻译过程的最终含义密切相关的信息息两种语义两种语义a)静态语义静态语义 被静态定义,在执行前可以确被静态定义,在执行前可以确定定.编译器实现静态语义分析编译器实现静态语义分析b)动态语
2、义动态语义 只有在执行时才能确定只有在执行时才能确定2 语义分析语义分析 要求根据编成语言的规则建立正确性,要求根据编成语言的规则建立正确性,并保证其正确执行。并保证其正确执行。典型的语义分析有典型的语义分析有:a)静态类型检查静态类型检查:运算符的分量类型是否相同?运算符的分量类型是否相同?赋值号的左右边类型是否相同?赋值号的左右边类型是否相同?形参与实参类型是否相同?形参与实参类型是否相同?数组下标的类型是否为所允许的类型?数组下标的类型是否为所允许的类型?函数说明中的函数类型和返回值的类型函数说明中的函数类型和返回值的类型是否一致?是否一致?b)其他语义分析其他语义分析:ve中的中的v是
3、不是变量,而且是数组类是不是变量,而且是数组类型?型?v.i中的中的v是不是变量,而且是记录类型?是不是变量,而且是记录类型?i是不是该记录的域名?是不是该记录的域名?每个使用性标识符是否都有声明?有无每个使用性标识符是否都有声明?有无标识符的重复声明?标识符的重复声明?3 语义分析的典型实现语义分析的典型实现构造符号表、记录声明中建立的名字的构造符号表、记录声明中建立的名字的含义含义在表达式和语句中进行类型推断和类型在表达式和语句中进行类型推断和类型检查以及在语言的类型规则作用域内判检查以及在语言的类型规则作用域内判断它们的正确性。断它们的正确性。4 语义分析的方法语义分析的方法描述描述属性
4、文法属性文法 用来描述语义用来描述语义实现实现语法制导语义分析语法制导语义分析程序的语义内容与它的语法紧密相关的程序的语义内容与它的语法紧密相关的n属性文法属性文法属性文法包括一组属性文法包括一组属性属性和和属性等式属性等式或或语义规语义规则则属性是必须进行计算的语言实体的属性属性是必须进行计算的语言实体的属性属性等式(或语义规则)描述这些属性的计属性等式(或语义规则)描述这些属性的计算如何与语言的文法规则相关算如何与语言的文法规则相关6.1 属性和属性文法属性和属性文法6.2 属性计算算法属性计算算法6.3 符号表符号表6.4 程序的语义分析程序的语义分析6.1 属性和属性文法属性和属性文法
5、1 属性属性n定义定义属性是编程语言结构的任意特性属性是编程语言结构的任意特性属性的典型例子有属性的典型例子有: 变量的数据类型变量的数据类型 表达式的值表达式的值 存储器中变量的位置存储器中变量的位置 程序的目标代码程序的目标代码2 属性文法属性文法n属性属性属性直接与语言的文法符号相联系(终结属性直接与语言的文法符号相联系(终结符和非终结符)符和非终结符)如果如果x 是一个文法符号,是一个文法符号,a 是是x的一个属的一个属性,那么我们把与性,那么我们把与x关联的关联的 a 的值记作的值记作x.an属性等式(或语义规则)属性等式(或语义规则)若有一个属性集合若有一个属性集合 a1 , .
6、. . , ak对于每个文法规则对于每个文法规则 x0x1 x2 . . . x n,每个文法符号每个文法符号xi 的属性值的属性值xi .aj 与规则与规则中其他文法符号的属性值是有关的。中其他文法符号的属性值是有关的。属性等式形如属性等式形如xi .aj = fij (x0.a1 , . . . , x0.ak ,x1.a1 , . . . , x1.ak , . . . , xn .a1 , . . . , xn .ak ) 其中其中 fij 是一个数学函数是一个数学函数n属性文法属性文法属性属性a1,ak 的属性文法是对语言的所的属性文法是对语言的所有文法规则的所有这类等式的集合有文法
7、规则的所有这类等式的集合一般地,将属性文法写成表格形式一般地,将属性文法写成表格形式文法规则文法规则语义规则语义规则规则规则 1相关的属性等式相关的属性等式规则规则 n相关的属性等式相关的属性等式例例1无符号数的属性文法:无符号数的属性文法:数的属性是它的值数的属性是它的值文法规则文法规则语义规则语义规则number1-number2 digit number1.val=number2.val*10+digit.valnumber-digitnumber.val=digit.valdigit-0digit.val=0digit-9digit.val=9使用字符串的语法树可以形象化地表示使用字符
8、串的语法树可以形象化地表示特殊符号串的属性等式的意义。特殊符号串的属性等式的意义。3numbernumberdigitnumberdigitdigit45“345”的语法树显示了属性计算的语法树显示了属性计算(val=3)(val=3)(val=4)(val=3*10+4=34)(val=5)(val=34*10+5=345)例例 2变量声明的属性文法:变量声明的属性文法:变量的属性是数据类型变量的属性是数据类型文法规则文法规则语义规则语义规则decl-type varlistvarlist.dtype=type.dtypetype-inttype.dtype=integertype-floa
9、ttype.dtype=realvarlist1-id,varlist2 id.dtype=varlist1.dtypevarlist2.dtype =varlist1.dtypevar-list-idid.dtype=varlist.dtype串串 “float x,y” 的语法树显示了的语法树显示了dtype属性属性decltypevarlistid(x)varlist,floatid(y)(dtype=real)(dtype=real)(dtype=real)(dtype=real)(dtype=real)例例 3表达式类型检查的属性文法:表达式类型检查的属性文法:表达式的属性是它的类型
10、表达式的属性是它的类型文法规则文法规则语义规则语义规则et1+t2t1.tint and t2.tintet1 or t2t1.tbool and t2.tbooltnumt.t :intttruet.t :booltfalset.t :booln可能出现在属性等式中的表达式类型可能出现在属性等式中的表达式类型数值表达式、逻辑表达式以及一些其他数值表达式、逻辑表达式以及一些其他种类的表达式种类的表达式if-then-else 表达式表达式, case 或或 switch表表达式达式也可以是函数,函数的定义可以在别处也可以是函数,函数的定义可以在别处给出,作为属性文法的补充的定义。给出,作为属性
11、文法的补充的定义。6.2 属性计算算法属性计算算法n将属性等式转换为计算规则的方式将属性等式转换为计算规则的方式属性在语法分析器构造语法树后计算属性在语法分析器构造语法树后计算 (6.2.2)属性在语法分析时计算属性在语法分析时计算 (6.2.3)n基于属性文法的处理过程基于属性文法的处理过程从概念上讲,基于属性文法的处理过程通常是从概念上讲,基于属性文法的处理过程通常是这样的:对单词符号串进行语法分析,构造语这样的:对单词符号串进行语法分析,构造语法分析树,然后根据需要遍历语法树并在语法法分析树,然后根据需要遍历语法树并在语法树的各结点处按语义规则进行计算。树的各结点处按语义规则进行计算。输
12、入串输入串-语法树语法树-依赖图依赖图-语义规则计算次序语义规则计算次序属性等式本身指示了属性计算时的顺序约束,属性等式本身指示了属性计算时的顺序约束,我们使用我们使用 相关依赖图相关依赖图 表示这些约束来明确顺表示这些约束来明确顺序的约束序的约束6.2.1 相关依赖图和赋值顺序相关依赖图和赋值顺序n相关依赖图相关依赖图 给定一个属性文法,每个文法规则有一个相给定一个属性文法,每个文法规则有一个相关依赖图关依赖图 每个文法符号的每个属性每个文法符号的每个属性 xi.aj 对应一个节对应一个节点点 对每个属性等式对每个属性等式 xi.aj=fij(,xm.ak,) ,从,从右边的每个节点右边的每
13、个节点xm.ak 到节点到节点 xi.aj有一条边有一条边(表示表示xi.aj 对对xm.ak的依赖的依赖) 由上下文无关文法得到的一个合法字符串的由上下文无关文法得到的一个合法字符串的依赖图依赖图 就是字符串语法树中选择表示每个就是字符串语法树中选择表示每个(非叶子)节点文法规则依赖图的联合。(非叶子)节点文法规则依赖图的联合。例例 1无符号数的属性文法:无符号数的属性文法:文法规则的依赖图文法规则的依赖图:number1-number2 digitnumber1.val=number2.val*10+digit.valnumber1.valnumber2.valdigit.valnumbe
14、r-digitnumber.val=digit.valnumber.valdigit.val串串 “345”的依赖图的依赖图3numbernumberdigitnumberdigitdigit35number.valnumber.valdigit.valnumber.valdigit.valdigit.val例例 2变量声明的属性文法:变量声明的属性文法:文法规则的依赖图文法规则的依赖图:varlist1-id,varlist2id.dtype=varlist1.dtypevarlist2.dtype=varlist1.dtypevarlist.dtypeid.dtypevarlist.dty
15、pevarlist-idid.dtype=varlist.dtypevarlist.dtypeid.dtypedecl-type varlist varlist.dtype=type.dtypetype.dtypevarlist.dtype我们通常重叠在相应的文法规则的语法树片我们通常重叠在相应的文法规则的语法树片段上绘制相关依赖图,这就使和相关有关的段上绘制相关依赖图,这就使和相关有关的文法规则更加清晰。文法规则更加清晰。串串 “float x,y”的依赖图的依赖图id(x)varlist,decltypevarlistfloatid(y)dtypedtypedtypedtypedtype6
16、.2.2 合成和继承属性合成和继承属性属性赋值依赖于分析树或语法树明确或属性赋值依赖于分析树或语法树明确或不明确的遍历。不明确的遍历。不同种类的遍历处理的属性相关,在项不同种类的遍历处理的属性相关,在项目和能力的种类上都不同。目和能力的种类上都不同。必须根据它们具有的相关依赖种类对属必须根据它们具有的相关依赖种类对属性分类性分类v合成属性合成属性v继承属性继承属性1 合成属性合成属性n定义定义一个属性是合成的,如果在语法树中它一个属性是合成的,如果在语法树中它所有的相关都从子节点指向父节点。所有的相关都从子节点指向父节点。等价地,一个属性等价地,一个属性a 是合成的,如果给是合成的,如果给定一
17、个文法规则定一个文法规则a-x1x2xn, 左边仅左边仅有一个有一个a 的相关属性等式,形如的相关属性等式,形如a.a=f(x1.a1,.x1.ak,xn.a1,xn.ak)例例 1 无符号数的属性文法无符号数的属性文法文法规则文法规则语义规则语义规则number1-number2 digitnumber1.val=number2.val*10+digit.valnumber-digitnumber.val=digit.valdigit-0digit.val=0digit-9digit.val=9val 属性是合成的属性是合成的例例 2简单整数算术表达式的属性文法简单整数算术表达式的属性文法文
18、法规则文法规则语义规则语义规则ee1+te.val :e1.val +t.valete.val :t.valtt1*ft.val :t1.val * f.valtft.val :f.valf(e)f.val :e.valfnumf.val :num.valval 属性是合成的。属性是合成的。ns-属性文法属性文法一个属性文法的所有属性是合成的,一个属性文法的所有属性是合成的,则这个文法叫则这个文法叫s属性文法属性文法例如例如无符号数的属性文法无符号数的属性文法简单整数算术表达式的属性文法简单整数算术表达式的属性文法都是都是 s属性文法属性文法n合成属性的计算合成属性的计算 给定由分析程序构造的
19、分析树或语法树给定由分析程序构造的分析树或语法树s属性文法的属性值可以通过对树进行简属性文法的属性值可以通过对树进行简单的自底向上或后序遍历来计算,这可单的自底向上或后序遍历来计算,这可以用以下递归的属性赋值程序来表示:以用以下递归的属性赋值程序来表示:procedure posteval(t:treenode)beginfor each child c of t doposteval(c);compute all synthesized attributes of t;end;2 继承属性继承属性n定义定义一个属性不是合成,则称作继承属性一个属性不是合成,则称作继承属性无论在分析树中从祖先到
20、孙子的继承属无论在分析树中从祖先到孙子的继承属性还是从同属的继承属性都有依赖。性还是从同属的继承属性都有依赖。继承属性的两种依赖图继承属性的两种依赖图a ba ca a(a)从祖先到子孙的继承从祖先到子孙的继承a ba ca(b)同属之间的继承同属之间的继承例例 1 变量声明的属性文法变量声明的属性文法dtype 属性是继承的属性是继承的文法规则文法规则语义规则语义规则decl-type varlistvarlist.dtype=type.dtypetype-inttype.dtype=integertype-floattype.dtype=realvarlist1-id,varlist2 i
21、d.dtype=varlist1.dtypevarlist2.dtype =varlist1.dtypevar-list-idid.dtype=varlist.dtypen继承属性的计算继承属性的计算继承属性的计算可以通过对分析树或语法树的继承属性的计算可以通过对分析树或语法树的前序遍历或前序前序遍历或前序/中序遍历的组合来进行。中序遍历的组合来进行。可以用下面的伪代码表示为:可以用下面的伪代码表示为:procedure preeval(t:treenode);beginfor each child c of t do compute all inherited attributes of c
22、; preeval(c);end;注释注释:与合成属性不同,子孙继承属性计算的与合成属性不同,子孙继承属性计算的顺序是重要的顺序是重要的因为在子孙的属性中继承属性可能有依因为在子孙的属性中继承属性可能有依赖关系。赖关系。例如例如变量声明的属性文法为:变量声明的属性文法为:文法规则文法规则语义规则语义规则decl-type varlistvarlist.dtype=type.dtypetype-inttype.dtype=integertype-floattype.dtype=realvarlist1-id,varlist2 id.dtype=varlist1.dtypevarlist2.dty
23、pe=varlist1.dtypevar-list-idid.dtype=varlist.dtype假设从文法明确构造了分析树假设从文法明确构造了分析树所有需要的节点所有需要的节点dtype 属性的递归程序的伪代属性的递归程序的伪代码如下:码如下:procedure evaltype(t:treenode);begincase nodekind of t ofdecl: /decl-type varlist varlist.dtype=type.dtypeevaltype(type child of t);varlist.dtype=type.dtype; evaltype(varlist c
24、hild of t);type: /type-int type.dtype=integer/type- floattype.dtype=realif child of t=int then t.dtype:=integerelse t.dtype:=real;varlist:/varlist-id,varlistid.dtype=varlist1.dtype varlist2.dtype=varlist1.dtype/varlist-idid.dtype=varlist.dtypeassign t.dtype to first child of t;if third child of t is
25、 not nil thenassign t.dtype to third child;evaltype(third child of t);end case;end evaltype;串串“float x,y” 的分析树及的分析树及dtype 属性的属性的依赖图依赖图编号显示了遍历顺序编号显示了遍历顺序id(x)varlist,decltypevarlistfloatid(y)dtypedtypedtypedtypedtype3 属性值的存储属性值的存储1)属性值作为字段存储在语法树的节点中)属性值作为字段存储在语法树的节点中例如例如3numbernumberdigitnumberdigitd
26、igit45(val=3)(val=3)(val=4)(val=3*10+4=34)(val=5)(val=34*10+5=345)如果许多属性值是相同的或仅用于临时如果许多属性值是相同的或仅用于临时计算其他属性值,则使用语法树的空间计算其他属性值,则使用语法树的空间在每个节点存储属性值就没有什么意义在每个节点存储属性值就没有什么意义了。了。例如:八进制和十进制数的属性文法例如:八进制和十进制数的属性文法属性是属性是 value 和和 base文法规则文法规则语义规则语义规则based-num- num basecharbased-num.val=num.valnum.base=basecha
27、r.basebasechar-obasechar.base=8basechar-dbasechar.base=10num1-num2 digitnum1.val=if digit.val=error or num2.val=error then errorelse num2.val*num1.base+digit.valnum2.base=num1.basedigit.base=num1.base文法规则文法规则语义规则语义规则num-digitnum.val=digit.valdigit.base=num.basedigit-0digit.val=0digit-7digit.val=7dig
28、it-8digit.val=if digit.base=8 then error else 8digit-9digit.val=if digit.base=8 then error else 9数数 345o的属性计算的属性计算val=229val=28*8+5=229base=8base=8val=3*8+4=28base=8val=5base=8val=3 base=8val=4base=8val=3 base=8based-numnumbasecharnumdigitnumdigitdigit345o2)作为参数和返回值的属性)作为参数和返回值的属性 事实上,递归遍历程序用前序计算继承事
29、实上,递归遍历程序用前序计算继承属性,而用后序计算合成属性属性,而用后序计算合成属性 在子节点把继承属性作为参数传递给递在子节点把继承属性作为参数传递给递归函数调用,并接收合成属性作为那些归函数调用,并接收合成属性作为那些相同调用的返回值相同调用的返回值例如例如: 八进制和十进制数的属性文法:八进制和十进制数的属性文法:base是继承属性,是继承属性, val 是合成属性是合成属性属性计算的递归函数是:属性计算的递归函数是:function evalwithbase(t:treenode;base:int):intvar temp,temp2:int;begin case nodekind o
30、f t ofbase-num: /based-num-num basechartemp:=evalwithbase(right child of t,base);return evalwithbase(left child of t,temp);num: /num1-num2 digitnum-digittemp:=evalwithbase(left child of t,base);if right child of t is not nill thentemp2:=evalwithbase(right child of t,base);if temperror and temp2error
31、 thenreturn base*temp+temp2else return error;else return temp;digit: /digit-0 |1 |9if base=8 and child of t=8 or 9 then errorelse return numval(child of t);end case;end evalwithbasebasechar: /basechar-o | dif child of t=o then return 8else return 10;3)使用外部数据结构存储属性值)使用外部数据结构存储属性值 当属性值有重要的结构时,在翻译时可当属性
32、值有重要的结构时,在翻译时可能专门需要,把属性值存储在语法树节能专门需要,把属性值存储在语法树节点也是不合理的点也是不合理的 在这些情况下,如查表、图以及其他一在这些情况下,如查表、图以及其他一些数据结构对于获得属性值的正确活动些数据结构对于获得属性值的正确活动和可用性都是有用的。和可用性都是有用的。 一种主要的数据结构是符号表,结合程一种主要的数据结构是符号表,结合程序中声明的常量、变量和过程存储属性。序中声明的常量、变量和过程存储属性。6.2.3 语法分析时属性的计算语法分析时属性的计算属性计算通常有两类:属性计算通常有两类:1、树遍历的属性计算方法(、树遍历的属性计算方法(6.2.2):
33、假设语法):假设语法树已经建立了,并且数中已带有开始符号的树已经建立了,并且数中已带有开始符号的继承属性和终结符的综合属性,然后以某种继承属性和终结符的综合属性,然后以某种次序遍历语法树,直至计算出所有属性。如次序遍历语法树,直至计算出所有属性。如果需要的话,可使用多次遍历。果需要的话,可使用多次遍历。2、语法分析的同时计算属性值:在语法分析的、语法分析的同时计算属性值:在语法分析的同时计算属性值,无需等到语法树构造后进同时计算属性值,无需等到语法树构造后进行属性计算,是一遍扫描的处理方法。行属性计算,是一遍扫描的处理方法。例如例如算术表达式的属性文法算术表达式的属性文法1)ee1+t e.v
34、al :e1.val +t.val 2)et e.val :t.val 3)tt1*number t.val :t1.val * number.val 4)tnumber t.val :number.val +*523tt.val=2t1t.val=3e1e.val=2自底向上的语法分析过程和串自底向上的语法分析过程和串 “2+3*5”的分析树的分析树当语法分析完成时,同时计算了属性值当语法分析完成时,同时计算了属性值ee.val=17tt.val=151 语法分析时哪些属性能计算?语法分析时哪些属性能计算?n这取决于使用分析方法的能力和性质。这取决于使用分析方法的能力和性质。所有主要的分析方
35、法都从左向右处理输所有主要的分析方法都从左向右处理输入程序。入程序。它等价于要求属性能通过从左向右遍历它等价于要求属性能通过从左向右遍历分析树进行赋值。分析树进行赋值。对于合成属性这不是一个限制,因为节对于合成属性这不是一个限制,因为节点的子节点可以用任意顺序赋值。点的子节点可以用任意顺序赋值。但是对于继承属性,这就意味着在相关图中没但是对于继承属性,这就意味着在相关图中没有有“向后向后”的依赖(在分析树中从右指向左)。的依赖(在分析树中从右指向左)。属性文法确保的这个特性称作属性文法确保的这个特性称作l-属性(从左向属性(从左向右)。右)。n2、l-属性属性定义定义属性属性 a1,.,ak
36、的属性文法是的属性文法是 l-属性属性, 如果对每如果对每个继承属性个继承属性aj 和每个文法规则和每个文法规则x0-x1x2xnaj 的相关等式都有以下形式:的相关等式都有以下形式:xi.aj=fij(x0.a1,x0.ak,x1.a1,x1.ak,xi-1.a1,xi-1.ak)也就是说,在也就是说,在xi 处处aj 的值只依赖于在文法规则的值只依赖于在文法规则中中xi 左边出现的符号左边出现的符号x0,xi-1 的属性的属性作为一个特例,作为一个特例, s-属性文法是属性文法是l-属性文法属性文法3 语法分析时属性的计算语法分析时属性的计算自上而下语法分析时的属性计算:通过把继承自上而下
37、语法分析时的属性计算:通过把继承属性转换成参数以及把合成属性转换成返回值,属性转换成参数以及把合成属性转换成返回值,递归下降的分析程序可以对所有的属性赋值。递归下降的分析程序可以对所有的属性赋值。自底向上语法分析时的属性计算:自底向上语法分析时的属性计算:lr 分析程分析程序适合于处理主要的合成属性。序适合于处理主要的合成属性。n递归下降分析时的属性计算递归下降分析时的属性计算例如例如ete e+te tft t*ftf(e)i“3+4+5” 的语法树:的语法树:+534“3+4+5” 的语义树:的语义树:ete+te+tefti(3)fti(5)fti(4)文法规则文法规则语义规则语义规则e
38、-tee.tree=e.tree e.left=t.treee1-+te2e1.tree=e2.tree e2.left=mkopnode(+,e1.left,t.tree)e-e.tree=e.leftt-ftt.tree=t.tree t.left=f.treet1-*ft2t1.tree=t2.tree t2.left=mkopnode(*,t1.left,f.tree)t-t.tree=t.leftf-(e)f.tree=e.treef-if.tree=mknumnode(i.lexval)/etee.tree=e.tree e.left=t.treefunction e:syntax
39、tree; var temp:syntaxtree;begin temp:=t; return e(temp);end; function e(treesofar:syntaxtree):syntaxtreevar temp: syntaxtree; begin if token=+ then /e1-+te2 e1.tree=e2.tree begin e2.left=mkopnode(+,e1.left,t.tree) temp:=makeopnode(+); match(+); leftchild(temp):=treesofar;rightchild(temp):=t; return
40、e(temp) end; else /e-e.tree=e.left beginif token) and token$ then error;return treesofar;end; end;nlr语法分析时合成属性的计算语法分析时合成属性的计算由一个值栈存储合成属性由一个值栈存储合成属性值栈将和分析栈并行操作值栈将和分析栈并行操作分析栈出现归约时,值栈发生属性等式分析栈出现归约时,值栈发生属性等式的计算的计算移进看作是把记号值同时推进分析栈和移进看作是把记号值同时推进分析栈和值栈值栈1)l eprint(e.val)2)ee1+t e.val :e1.val +t.val 3)et e.
41、val :t.val 4)tt1*numt.val :t1.val * num.val 5)tnum t.val :num.val action goto n+*#et0s3 12 1s4 acc2r3 s5r3 33r5r5 r54s3 75s6 6 r4r4 r47r2s5r2例如例如 :算术表达式的属性文法算术表达式的属性文法s5*5$2+3$ 0 e 1 + 4 t 76acc$17$ 0 e 1101r2$2+15$ 0 e 1 + 4 t 7 9gotoaction7r4$2+3*5$ 0 e 1 + 4 t 7 *5568s65$2+3*$ 0 e 1 + 4 t 7 *577r
42、5*5$2+3$ 0 e 1 + 4 3 35s33*5$2+$ 0 e 1 + 44s43*5$2$ 0 e 131r33*5$2$ 0 t 222r53*5$2$0 2 31s323*5$00输入串输入串栈值栈值分析栈分析栈“2+3*5”的分析过程的分析过程nlr分析中处理继承属性的技术分析中处理继承属性的技术lr分析中继承前面计算的合成属性分析中继承前面计算的合成属性与规则右边非终结符相关的动作可以把与规则右边非终结符相关的动作可以把符号的合成属性使用到规则的左边符号的合成属性使用到规则的左边例如例如产生式产生式 a-bc c 有一个继承属性有一个继承属性 i 和以某种方式依赖于和以某种
43、方式依赖于b:c.i=f(b.s) 的合成属性的合成属性s通过在通过在b和和c之间引入一个之间引入一个-产生式安排值栈产生式安排值栈栈顶的存储,在识别栈顶的存储,在识别c之前的之前的c.i 值可以存进值可以存进一个变量中:一个变量中:文法规则文法规则语义规则语义规则a-bdcb-计算计算 b.sd- saved_i=f(valstacktop)c-现在现在saved_i 是可用的是可用的文法规则文法规则语义规则语义规则e-tee.tree=e.tree e.left=t.treee1-+te2e1.tree=e2.tree e2.left=mkopnode(+,e1.left,t.tree)例
44、如例如e.left 是继承属性,并依赖合成属性是继承属性,并依赖合成属性t.tree文法规则文法规则语义规则语义规则e-txee.tree=e.tree e.left=t.treex- saved_t=valstacktoplr分析中处理继承属性的技术分析中处理继承属性的技术v使用外部数据结构,例如符号表或非局部变量使用外部数据结构,例如符号表或非局部变量来保存继承属性值来保存继承属性值v并增加并增加-产生式,考虑在适当的时刻这些数据产生式,考虑在适当的时刻这些数据结构的变化结构的变化6.3 符号表符号表n符号表的作用符号表的作用符号表存储与程序中声明的常量、变量符号表存储与程序中声明的常量、
45、变量和过程相关的属性和过程相关的属性n符号表主要的操作符号表主要的操作:插入插入当处理新定义的名字时,插入操作用于当处理新定义的名字时,插入操作用于存储这些名字定义所提供的信息。存储这些名字定义所提供的信息。查找查找当相关的代码使用名字时,查找操作找当相关的代码使用名字时,查找操作找出与名字对应的信息。出与名字对应的信息。删除删除当不在运用名字的定义时,需要用删除当不在运用名字的定义时,需要用删除操作除去名字定义提供的信息。操作除去名字定义提供的信息。n需要存储到符号表中的信息有需要存储到符号表中的信息有:数据类型信息数据类型信息应用区域信息(作用域)应用区域信息(作用域)存储器中的最终定位信息存储器中的最终定位信息例如例如 :程序的声明部分程序的声明部分const a=35,b=49;var c,d,e;procedure p;var g符号表的信息符号表的信息na
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版诉讼离婚与协议离婚婚姻家庭纠纷调解合同3篇
- 光伏发电站设计及要求六篇
- 厂房租赁合同书范本
- 新闻合作协议
- 厂房转租合同书模板
- 2025-2030全球高强度螺栓连接副行业调研及趋势分析报告
- 2025-2030全球万瓦级光纤激光冷水机行业调研及趋势分析报告
- 2025年全球及中国自动包裹处理系统行业头部企业市场占有率及排名调研报告
- 2025-2030全球细胞核与细胞质分离试剂盒行业调研及趋势分析报告
- 2025版换热站运行维护与能源优化合同范本3篇
- 股权架构完整
- 山东省泰安市2022年初中学业水平考试生物试题
- 注塑部质量控制标准全套
- 人教A版高中数学选择性必修第一册第二章直线和圆的方程-经典例题及配套练习题含答案解析
- 毕业设计(论文)-液体药品灌装机的设计与制造
- 银行网点服务礼仪标准培训课件
- 二年级下册数学教案 -《数一数(二)》 北师大版
- 晶体三极管资料
- 银行内部举报管理规定
- 石群邱关源电路(第1至7单元)白底课件
- 平面几何强化训练题集:初中分册数学练习题
评论
0/150
提交评论