属性文法举例- 简单计算器p171 ■用语义规则描述表达式求值。 ■该属性文法描述如下: 产生式 语义规则(属性计算规则) 1.L→En print(E.val)(虚属性) 2.E→E1+T( E.vaD:=E1.val+T.val 非终结符设有 3.E→T E.val:=T.val 综合属性,代 4.T→T1*F( ①.va):=T1.val*p.val 表表达式的值 5.T→F T.val:F.val 6.F→(E) F.val:=E.val 终结符i设有综 7.F→i F.val:i.lexval 合属性,其值由 词法分析器提供 2025/4/3 6
2025/4/3 6 属性文法举例——简单计算器 p171 用语义规则描述表达式求值。 该属性文法描述如下: 产生式 语义规则(属性计算规则) 1. L→En print( E .val ) (虚属性) 2. E→E1+T E.val:=E1.val+T.val 3. E→T E.val:=T.val 4. T→T1*F T.val:=T1.val*F.val 5. T→F T.val:=F.val 6. F→(E) F.val:=E.val 7. F→i F.val:=i.lexval 非终结符设有 综合属性,代 表表达式的值 终结符i设有综 合属性,其值由 词法分析器提供
说明语句的设计p171 例real idl,.id2,id3 说明语句的文法 1.D→TL T.type .in 类型2. 个 real int real 描述3. real real 变量4. → Li,id Li.in id3 real 表5. real id ■要解决的问题 L2.in id2 ◆记录标识符的类型 real real ◆类型信息传递 idi 继承属性自上 real 而下传递信息 2025/4/3 ☒7
2025/4/3 7 说明语句的设计 p171 例 real id1,id2,id3 说明语句的文法 1. D → T L 2. T → int 3. T → real 4. L → L1,id 5. L → id D T L real L1 , id3 L2 , id2 id1 要解决的问题 记录标识符的类型 类型信息传递 real real real .type real .in real .in real .in real 继承属性自上 而下传递信息 类型 描述 变量 表
说明语句的属性文法p171 ■用语义规则描述变量说明。 ■该属性文法描述如下: 产生式 语义规则(属性计算规则) 继承属性 1. D→TL ①.iy:=T.type 2. T→int T.type:=integer 3. T→real T.type real 综合属性 4. L→L1,idL1.in:=L.in addtype(id.entry,L.in 5. L→id addtype(id.entry,L.in entry 单词id的属性,id在符号表的入口 addtype在符号表中为变量添加类型信息 2025/4/3 节目绿 8
2025/4/3 8 1. D→TL L.in := T.type 2. T→int T .type := integer 3. T→real T.type := real 4. L→L1 ,id L1 .in := L.in addtype( id.entry, L.in ) 5. L→id addtype( id.entry, L.in ) entry 单词 id 的属性,id在符号表的入口 addtype 在符号表中为变量添加类型信息 用语义规则描述变量说明。 该属性文法描述如下: 产生式 语义规则(属性计算规则) 说明语句的属性文法 p171 综合属性 继承属性 节目录
属性文法定义p169 ■属性文法是Knuth在1968年提出的。 ■属性文法的特点: ◆是一种接近形式化的语义描述方法。 ◆每个文法符号有相应的属性V一一属性集合 0代表与文法符号相关的信息: 0例如类型、值、代码序列等。 ◆每个产生式配有相应的语义规则F一一规则集合 0作用:计算属性的规则,可以产生代码、在符号表中存 放信息、给出错误信息或执行任何其它动作,实现翻译; 0形式:b:=f(C1,c2,.,ck)。 ■属性文法:三元组A=(G,V,F) ◆在上下文无关文法的基础上,把每个文法符号和 组属性相关联,并给产生式附加以语义规则。 2025/4/13 节目录 KO
2025/4/3 9 属性文法定义 p169 属性文法是Knuth在1968年提出的。 属性文法的特点: 是一种接近形式化的语义描述方法。 每个文法符号有相应的属性 V——属性集合 Ø 代表与文法符号相关的信息; Ø 例如类型、值、代码序列等。 每个产生式配有相应的语义规则 F——规则集合 Ø 作用:计算属性的规则,可以产生代码、在符号表中存 放信息、给出错误信息或执行任何其它动作,实现翻译; Ø 形式:b:=f(c1,c2,.,ck)。 属性文法:三元组A=(G,V,F) 在上下文无关文法的基础上,把每个文法符号和 一组属性相关联,并给产生式附加以语义规则。 节目录
属性分类 p170 产生式A→a语义规则b:=f(c1,c2,.,ck) ■综合属性用于“自下而上”传递信息 ◆b是A的综合属性,C1,c2,.,Ck是右边文法符号的属性 ◆从其子结点的属性值计算出来的 ◆终结符只有综合属性,由词法分析器提供 ◆例如E.valT.valF.val ■纟 继承属性用于“自上而下”传递信息 ◆b是右边某个文法符号的继承属性,C1,c2,.,Ck是A或右边 任何文法符号的属性 ·从其兄弟结点和父结点的属性值计算出来 ◆开始符号的继承属性作为属性计算前初值 ◆例如L.in ■非终结符既可有综合属性也可有继承属性,一般对于 出现在产生式右边的继承属性和出现在产生式左边 的综合属性都必须提供一个计算规则 Z0251413 节目绿可 10
2025/4/3 10 属性分类 p170 产生式 A→α 语义规则 b:=f(c1,c2,.,ck) 综合属性 用于“自下而上”传递信息 b是A的综合属性, c1,c2,.,ck是右边文法符号的属性 从其子结点的属性值计算出来的 终结符只有综合属性,由词法分析器提供 例如 E.val T.val F.val 继承属性 用于“自上而下”传递信息 b是右边某个文法符号的继承属性, c1,c2,.,ck是A或右边 任何文法符号的属性 从其兄弟结点和父结点的属性值计算出来 开始符号的继承属性作为属性计算前初值 例如 L .in 非终结符既可有综合属性也可有继承属性,一般对于 出现在产生式右边的继承属性和出现在产生式左边 的综合属性都必须提供一个计算规则 节目录