《《编译原理》课程简介 (43).pdf》由会员分享,可在线阅读,更多相关《《编译原理》课程简介 (43).pdf(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、编译原理C O M P I L A T I O N P RIN C IP LE第六章 属性文法和语法制导翻译6.1 属性文法的定义6.1 属性文法的定义操作语义学指称语义学公理语义学首先介绍属性文法n虽然形式语义学(如操作语义学、指称语义学、公理语义学等)的研究已取得了许多重大的进展,但目前在实际应用中比较流行的语义描述和语义处理的方法主要还是属性文法和语法制导翻译方法。形式语义学形式语义学属性文法和语法制导翻译6.1 属性文法的定义语义建模语义形式化命令式或操作式模型应用式模型公理式模型文法模型操作语义学指称语义学公理语义学属性文法6.1 属性文法的定义 属性文法(attribute gra
2、mmar)是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的“值”(称为属性)。6.1 属性文法的定义 属性文法(attribute grammar)n属性文法是一个三元组:A=(G,V,F),其中lG:是一个上下文无关文法。lV:有穷的属性集,每个属性与文法的一个终结符或非终结符相连,这些属性代表与文法符号相关信息,如它的类型、值、代码序列、符号表内容等等。属性与变量一样,可以进行计算和传递。属性加工的过程即是语义处理的过程。lF:关于属性的属性断言或一组属性的计算规则(称为语义规则)。断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相联的
3、属性。6.1 属性文法的定义 属性有两类v(1)综合属性v(2)继承属性n用于“自下而上”传递信息n在语法树中,一个结点的综合属性的值,由其子结点的属性值确定。n用于“自上而下”传递信息n在语法树中,一个结点的继承属性由此结点的父节点和/或兄弟结点的某些属性值确定。6.1 属性文法的定义n在一个属性文法中,对应于每个产生式A都有一套与之相关联的语义规则,每条规则的形式为b:=f(c1,c2ck)n这里,f是一个函数,而且或者1b是A的一个综合属性并且c1,c2ck是产生式右边文法符号的属性;或者2b是产生式右边某个文法符号的一个继承属性并且c1,c2ck是A或产生式右边任何文法符号的属性。n在
4、两种情况下,我们都说属性b依赖于属性c1,c2ck。6.1 属性文法的定义 综合属性v例题产产 生生 式式语语 义义 规规 则则EE1+TE.val:=E1.val+T.valT.valE.valE.val+继承属性v例题产产 生生 式式语语 义义 规规 则则D TLL.in:=T.typeL.in=realT.type=realD6.1 属性文法的定义 注意终结符只有综合属性,它由词法分析器提供;非终结符既可有综合属性也可有继承属性,但文法开始符号的继承属性作为属性计算前的初始值;产生式右边符号的继承属性和产生式左边的综合属性都必须提供一个计算规则;产生式左边符号的继承属性和产生式右边的综合
5、属性不由所给定的产生式的属性计算规则进行计算,它们由其它产生式的属性规则计算或者由属性计算器的参数提供。6.1 属性文法的定义 例题n考虑非终结符A,B和C,其中,oA有一个继承属性a和一个综合属性eoB有综合属性boC有继承属性cn产生式 A BC 应该有计算c和e的规则nC.c:=B.b+1nA.e:=A.a+B.bn其中属性A.a和B.b在其他地方计算。6.1 属性文法的定义n属性计算的过程即是对语义处理的过程,对于文法的每一个产生式配备一组属性的计算规则,称为语义规则。n语义规则所描述的工作可以包括属性计算、静态语义检查、符号表操作、代码生成等等。v注意1语义规则可能产生副作用(如产生
6、代码)2也可能是过程,不是变元的严格函数(即不一定有返回值)。6.1 属性文法的定义属性文法的例子-台式计算器程序例题非终结符E、T及F都有一个综合属性val。每个产生式对应的语义规则中,产生式左边的非终结符的属性值从右边的非终结符的属性值计算而来。符号digit有一个综合属性lexval,它的值由词法分析器提供。与产生式LE 对应的语义规则仅仅是打印由E产生的算术表达式的值的一个过程,我们可认为这条规则定义了L的一个虚属性。产产 生生 式式语语 义义 规规 则则LEPrint(E.val)EE1+TE.val:=E1.val+T.valETE.val:=T.valT T1*FT.val:=T
7、1.val F.valTFT.val:=F.valF(E)F.val:=E.valF digitF.val:=digit.lexval虚属性6.1 属性文法的定义v设表达式为35+4,则语义动作打印数值19。digit.lexval=4LE.val=19E.val=15T.val=4T.val=15F.val=4T.val=3F.val=3F.val=5digit.lexval=5digit.lexval=3+*3*5+4的带注释的语法分析树产产 生生 式式语语 义义 规规 则则(1)LEPrint(E.val)(2)EE1+TE.val:=E1.val+T.val(3)ET E.val:=T
8、.val(4)T T1*FT.val:=T1.val F.val(5)TFT.val:=F.val(6)F(E)F.val:=E.val(7)F digitF.val:=digit.lexval 综合属性的例子6.1 属性文法的定义 继承属性n一个结点的继承属性值是由此结点的父结点和/或兄弟结点的某些属性来决定的。n例 题 继承属性L.in产产 生生 式式语语 义义 规规 则则D TLL.in:=T.typeTintT.type:=integerT realT.type:=realL L1,idL1.in:=L.inaddtype(id.entry,L.in)Lidaddtype(id.entry,L.in)6.1 属性文法的定义L.in=realDL.in=realL.in=realT.type=realrealid3,产产 生生 式式语语 义义 规规 则则(1)D TL L.in:=T.type(2)Tint T.type:=integer(3)T real T.type:=real(4)L L1,id L1.in:=L.in addtype(id.entry,L.in)(5)Lid addtype(id.entry,L.in)id2id1vreal id1,id2,id3 继承属性的例子real id1,id2,id3的带注释的语法分析树|编译原理谢 谢Thanks