属性文法定义p161 ■属性文法是Knuth在1968年提出的。 ■属性文法的特点: ◆是一种接近形式化的语义描述方法。 ◆每个文法符号有相应的属性V一一属性集合 0代表与文法符号相关的信息; 0例如类型、值、代码序列等。 ◆每个产生式配有相应的语义规则F一一规则集合 0作用:计算属性的规则,可以产生代码、在符号表中存 放信息、给出错误信息或执行任何其它动作,实现翻译; 0形式:b:=f(c1c2,.,Ck)。 ■属性文法:三元组A=(G,V,F) ◆在上下文无关文法的基础上,把每个文法符号和一 组属性相关联,并给产生式附加以语义规则。 2023/2/28 节目录 11
2023/2/28 11 属性文法定义 p161 属性文法是Knuth在1968年提出的。 属性文法的特点: 是一种接近形式化的语义描述方法。 每个文法符号有相应的属性 V——属性集合 Ø 代表与文法符号相关的信息; Ø 例如类型、值、代码序列等。 每个产生式配有相应的语义规则 F——规则集合 Ø 作用:计算属性的规则,可以产生代码、在符号表中存 放信息、给出错误信息或执行任何其它动作,实现翻译; Ø 形式:b:=f(c1,c2,.,ck)。 属性文法:三元组A=(G,V,F) 在上下文无关文法的基础上,把每个文法符号和一 组属性相关联,并给产生式附加以语义规则。 节目录
属性分类p162 产生式A→a语义规则b:=f(c1,c2,.,ck) ■综合属性用于“自下而上”传递信息 ◆b是A的综合属性,c1,C2,.,Ck是右边文法符号的属性 ·从其子结点的属性值计算出来的 ◆终结符只有综合属性,由词法分析器提供 ◆例如E.valT.valF.val ■继承属性用于“自上而下”传递信息 ◆b是右边某个文法符号的继承属性,c1,c2,.,ck是A或右边 任何文法符号的属性 ◆从其兄弟结点和父结点的属性值计算出来 ◆开始符号的继承属性作为属性计算前初值 ◆例如L.n 非终结符既可有综合属性也可有继承属性,一般对于 出现在产生式右边的继承属性和出现在产生式左边 的综合属性都必须提供一个计算规则 23/2/28 节目绿☒ 12
2023/2/28 12 属性分类 p162 产生式 A→α 语义规则 b:=f(c1,c2,.,ck) 综合属性 用于“自下而上”传递信息 b是A的综合属性, c1,c2,.,ck是右边文法符号的属性 从其子结点的属性值计算出来的 终结符只有综合属性,由词法分析器提供 例如 E.val T.val F.val 继承属性 用于“自上而下”传递信息 b是右边某个文法符号的继承属性, c1,c2,.,ck是A或右边 任何文法符号的属性 从其兄弟结点和父结点的属性值计算出来 开始符号的继承属性作为属性计算前初值 例如 L .in 非终结符既可有综合属性也可有继承属性,一般对于 出现在产生式右边的继承属性和出现在产生式左边 的综合属性都必须提供一个计算规则 节目录
语法制导翻译法 ■由源程序的语法结构所驱动的处理办法 ■为文法中每个产生式配上一组语义规则,并 且在语法分析的同时执行这些语义规则,完 成相应的语义处理 ■问题:何时执行语义规则? ◆每当用一个产生式推导或归约时,就执行对应 的语义规则 23/2/28 ☒D 13
2023/2/28 13 语法制导翻译法 由源程序的语法结构所驱动的处理办法 为文法中每个产生式配上一组语义规则,并 且在语法分析的同时执行这些语义规则,完 成相应的语义处理 问题:何时执行语义规则? 每当用一个产生式推导或归约时,就执行对应 的语义规则
翻译模式p172 ■语法制导翻译的两种描述形式 ◆属性文法(语法制导定义) (Grammar Directed Definition) 语义的抽象说明,隐去实现细节 ◆翻译模式(Translation Scheme) 规定实现方法,表明计算次序 ■翻译模式的特征 ◆规定在语法分析中使用语义规则进行计算的次序 ◆保证当动作使用某属性时,该属性必须是可用的 ■翻译模式的构造方法 ◆将{语义动作}插入到产生式中的某个位置 ¥023/2/28 ☒D 14
2023/2/28 14 翻译模式 p172 语法制导翻译的两种描述形式 属性文法(语法制导定义) (Grammar Directed Definition) 语义的抽象说明,隐去实现细节 翻译模式 (Translation Scheme) 规定实现方法,表明计算次序 翻译模式的特征 规定在语法分析中使用语义规则进行计算的次序 保证当动作使用某属性时,该属性必须是可用的 翻译模式的构造方法 将{语义动作}插入到产生式中的某个位置
表达式文法的翻译模式p173 1.E→E1+T E.val:=E1.val+T.val} 2.E→T E.val:=T.val} 3.T→T1*F {T.val:=T1.val*F.val} 4.T→F {T.val:=F.val} 5.F→(E) F.val:=E.val} 6.F→1 F.val:=i.lexval} 023/2/28 节目绿可D15
2023/2/28 15 表达式文法的翻译模式 p173 1. E→E1+T {E.val:=E1.val+T.val} 2. E→T {E.val:=T.val} 3. T→T1*F {T.val:=T1.val*F.val} 4. T→F {T.val:=F.val} 5. F→(E) {F.val:=E.val} 6. F→i {F.val:=i.lexval} 节目录