如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难●▂●1第五章语法制导翻译翻译的任务:首先是语义分析和正确性检查,若正确,则翻译成中间代码或目标代码。使用的方法称作语法制导翻译。基本思想是,根据翻译的需要设置文法符号的属性,以描述语法结构的语义。例如,一个变量的属性有类型,层次,存储地址等。表达式的属性有类型,值等。属性值的计算和产生式相联系。随着语法分析的进行,执行属性值的计算,完成语义分析和翻译的任务。天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难●▂●2属性值根据计算的依赖关系分成不相交的两类:综合属性(synthesizedattribute)和继承属性(inheritedattribute)。在分析树中,一个结点的综合属性值是从其子结点的属性值计算出来的;而一个结点的继承属性值是由该结点兄第结点和父结点???属性值计算出来的。一般来说,语义翻译可按图5.1的流程处理。实际上,编译中语义翻译的实现并不是按图5.1的流程处理的;而是随语法分析的进展,识别出一个语法结构,就对它的语义进行分析和翻译。天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难●▂●3要求:随着语法分析,分析树逐步被构造出来,进展到每一步,定义的文法符号的属性值是可以计算出来的。一个重要的属性定义类称作"L-属性"定义,满足上述要求。天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难●▂●4输入符号串分析树依赖图语义规则的计算图5.1语法制导翻译的概观天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难●▂●55.1语法制导定义(Syntax-directeddefinitions)◆语法制导定义是对上下文无关文法的推广综合属性继承属性◆依赖图语义规则建立了属性之间的依赖关系,这些关系可以用图来表示,这样的图称为依赖图。◆属性天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难●▂●65.1.1语法制导定义的形式在一个语法制导定义中,A→P都有与之相关联的一套语义规则,规则形式为b:=f(c1,c2,...,ck),f是一个函数,而且或者1.b是A的一个综合属性并且c1,c2,...,ck是中的符号的属性,或者2.b是中的符号的一个继承属性并且c1,c2,...,ck是A或中的任何文法符号的属性。在两种情况下,都说属性b依赖于属性c1,c2,...,ck。天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难●▂●7例5.1台式计算器程序的语法制导定义(表5.1)产生式语义规则LEnprint(Eval)EE1+TEval:=E1val+TvalETEval:=TvalTT1*FTval:=T1val+FvalTFTval:=FvalF(E)Fval:=EvalFdigitFval:=digitlexval天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难●▂●8每个文法符号和一个属性值val联系,属性值的设置和语法结构的语义以及翻译程序的需要有关。例如,把例5.1中的类型扩充到int和real。5.1.2综合属性S-属性定义唯独只使用综合属性的语法制导定义。结点属性值的计算正好和自底向上分析建立分析树结点同步进行。例5.2输入:3*5+4n天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难●▂●9digitlexval:=3Fval:=3Tval:=3digitlexval:=5Fval:=5Tval:=15*Eval:=15+digitlexval:=4Fval:=4Tval:=4Eval:=19Ln天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难●▂●10??综合属性值的计算方法对于s-属性定义,通常使用自底向上的分析方法,在建立每一个结点处使用语义规则来计算综合属性值,即在用哪个产生式进行归约后,就执行那个产生式的s-属性定义计算属性的值,从叶结点到根结点进行计算。5.1.3继承属性继承属性值是由此结点的父结点和//或兄弟结点的某些属性值来决定的。例5.3变量说明的类性定义inta,b,c天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难●▂●11表5.2带有继承属性L.in的语法制导定义产生式语义规则DTLLin:=TtypeTintTtype:=integerTrealTtype:=realLL1,idL1in:=Linaddtype(identry,Lin)Lidaddtype(identry,Lin)天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难●▂●12TLLid3Lid2Did1real,,1entry2entry3entry4typein56in78in910天下事有难易乎,为之,则难者亦易矣;不