编译原理 第六章属性文法和语法制导翻译
编译原理 第六章 属性文法和语法制导翻译
编泽原理 属饮文法和语法制导翻译 量介绍有关语义分析及翻译的问题。 语义描述和语义处理的方法主要是属性文法和语 法制导翻译方法。 本章中,将首先介绍属性文法的基本概念,然后 介绍基于属性文法的处理方法,讨论如何在自上 而下分析和自下而上分析中实现属性的计算。 第2觉
编译原理 第2页 属性文法和语法制导翻译 介绍有关语义分析及翻译的问题。 语义描述和语义处理的方法主要是属性文法和语 法制导翻译方法。 本章中,将首先介绍属性文法的基本概念,然后 介绍基于属性文法的处理方法,讨论如何在自上 而下分析和自下而上分析中实现属性的计算
编译原理 马位文洁和语洁制导制译 本章内容概要 墨属性文法 到综合属性 当继承屋性 基于属性文法的处理方法 依赖圄 雪属性的计算次序 售树遍历的属性计算方法 一遍扫描的处理方法 墨抽象语法树 S-属性文法的自下而上计算 慧分折找中的综合属性 第3页
编译原理 第3页 属性文法和语法制导翻译 本章内容概要 属性文法 综合属性 继承属性 基于属性文法的处理方法 依赖图 属性的计算次序 树遍历的属性计算方法 一遍扫描的处理方法 抽象语法树 S-属性文法的自下而上计算 分析栈中的综合属性
编泽原理 具使文洁和语法制导制译 L属性文法和自顶向下翻译 雪翻译模式 衡自顶向下翻逢 售递归下隆翻译器的设计 售自下而上计算继承属性 售从翻译模式中去掉嵌入在产生式中间的动作 菌分析栈中的继承属性 雪模拟继承属性的计算 售用综合属性代替继承属性 第4觉
编译原理 第4页 属性文法和语法制导翻译 L属性文法和自顶向下翻译 翻译模式 自顶向下翻译 递归下降翻译器的设计 自下而上计算继承属性 从翻译模式中去掉嵌入在产生式中间的动作 分析栈中的继承属性 模拟继承属性的计算 用综合属性代替继承属性
编泽原理 马位文洁和语洁制导制译 属性文法 属性翻译文法是在上下文无关文法的基础上,为每个 文法符号(终结符或非终结符)配备若干相关的“值” (称为属性)。 墨这些属性代表与文法符号相关信息,例如它的类型、 值、代码序列、符号表内容等等。 属性与变量一样,可以进行计算和传递。 属性加工的过程即是语义处理的过程。对于文法的每 个产生式都配备了一组属性的计算规则,称为语义规 则。 第5页
编译原理 第5页 属性文法和语法制导翻译 属性文法 属性翻译文法是在上下文无关文法的基础上,为每个 文法符号(终结符或非终结符)配备若干相关的“值” (称为属性)。 这些属性代表与文法符号相关信息,例如它的类型、 值、代码序列、符号表内容等等。 属性与变量一样,可以进行计算和传递。 属性加工的过程即是语义处理的过程。对于文法的每 个产生式都配备了一组属性的计算规则,称为语义规 则
编泽原理 具使文洁和语法制导制译 属性通常分为两类: 综合属性和继承属性。 综合属性用于“自下而上”传递信息,而继承属性用于“自上 而下”传递信息。 在一个属性文法中,对应于每个产生式A→α都有一套与之相 关联的语义规则,每条规则的形式为 b:=f(c1,c2,,ck)这里,是一个函数,而且或者 (1)b是A的一个综合属性并且c1,c2,,ck是产生式右边 文法符号的属性;或者 (2)b是产生式右边某个文法符号的一个继承属性并且c1, c2,,ck是A或产生式右边任何文法符号的属性。 在两种情况下,我门都说属性b依赖于属性c1,c2,.,ck 第6列
编译原理 第6页 属性文法和语法制导翻译 属性通常分为两类: 综合属性和继承属性。 综合属性用于“自下而上”传递信息,而继承属性用于“自上 而下”传递信息。 在一个属性文法中,对应于每个产生式A→α都有一套与之相 关联的语义规则,每条规则的形式为 b:=f(c1,c2,…,ck)这里,f是一个函数,而且或者 (1)b是A的一个综合属性并且c1,c2,…,ck 是产生式右边 文法符号的属性;或者 (2) b是产生式右边某个文法符号的一个继承属性并且c1, c2,…,ck 是A或产生式右边任何文法符号的属性。 在两种情况下,我们都说属性b依赖于属性 c1,c2,…,ck
编泽原理 马位文洁和语洁制导制译 (1)终结符只有综合属性,它们由词法分析器提供; (2) 非终结符既可有综合属性也可有继承属性,文法开始符 号的所有继承属性作为属性计算前的初始值。 售对出现在产生式右边的继承属性和出现在产生式左边的综 合属性都必须提供一个计算规则。 属性计算规则中只能使用相应产生式中的文法符号的属性, 这有助于在产生式范围内“封装”属性的依赖性。然而, 出现在产生式左边的继承属性和出现在产生式右边的综合 属性不由所给的产生式的属性计算规则进行计算,它们由 其它产生式的属性规则计算或者由属性计算器的参数提供。 第7页
编译原理 第7页 属性文法和语法制导翻译 (1)终结符只有综合属性,它们由词法分析器提供; (2)非终结符既可有综合属性也可有继承属性,文法开始符 号的所有继承属性作为属性计算前的初始值。 对出现在产生式右边的继承属性和出现在产生式左边的综 合属性都必须提供一个计算规则。 属性计算规则中只能使用相应产生式中的文法符号的属性, 这有助于在产生式范围内“封装”属性的依赖性。然而, 出现在产生式左边的继承属性和出现在产生式右边的综合 属性不由所给的产生式的属性计算规则进行计算,它们由 其它产生式的属性规则计算或者由属性计算器的参数提供
编泽原理 属文法和语法制导翻译 语义规则所描述的工作可以包括属性计算、静态语义检查、 符号表操作、代码生成等等。 第8列
编译原理 第8页 属性文法和语法制导翻译 语义规则所描述的工作可以包括属性计算、静态语义检查、 符号表操作、代码生成等等
编译原理 马位文洁和语洁制导制译 重例如,考虑非终结符A,B和C,其中,A有一个继承 属性a和一个综合属性b,B有综合属性c,C有继承 属性d。产生式A→BC可能有规则 C.d:=B.c+1 A.b:=A.a+B.c 而属性A.a和B.c在其它地方计算。 第9页
编译原理 第9页 属性文法和语法制导翻译 例如,考虑非终结符A,B和C,其中,A有一个继承 属性a和一个综合属性b,B有综合属性c,C有继承 属性d。产生式A→BC可能有规则 C .d:=B.c+1 A .b:=A.a+B.c 而属性A .a和B.c在其它地方计算
编泽原理 风歧文洁和语法制导翻译 表6.1一个简单台式计算器的属性文法 产生式 语义规则 L→Ea point (E.val) E→E1+T E.val:=E1.val+T.val E→T E.val:=T.val T→+T护 T.al:=T1.val*柙.al F+(E) T.val:=F.val F→digit F.val:=digit.lexval 第10觉
编译原理 第10页 属性文法和语法制导翻译