如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第九章语法制导翻译技术9.0本章导言9.1翻译文法和语法制导翻译1.E→E+T@+4.T→F2.E→T5.F→(E)3.T→T*F@*6.F→i@i下面给出输入文法和翻译文法的概念:输入文法:未插入动作符号时的文法。由输入文法可以通过推导产生输入序列。翻译文法:插入动作符号的文法。由翻译文法可以通过推导产生活动序列。输入序列动作序列用相应的翻译文法推导,可得:ETT*F@*F*F@*(E)*F@*(E+T@+)*F@*定义9.1翻译文法是上下文无关文法,其终结符号集由输入符号和动作符号组成。由翻译文法所产生的终结符号串称为活动序列。上例题中的翻译文法为:GT=(Vn,Vt,P,E)Vn={E,T,F}Vt={i,+,*,(,),@+,@*,@i}P={E→E+T@+,E→T,T→T*F@*,T→F,F→(E),F→i@i}语法导制翻译的实现方法:9.2属性翻译文法9.2.1综合属性根据给定的文法,可写出该输入序列的语法树说明:p,q,r为属性变量名。属性变量名局部于每个产生式,也可使用不同的名字。考虑下列文法:G[<说明>]:1.<说明>→Typeid<变量表>2.<变量表>→,id<变量表>3.<变量表>→ε翻译文法:1.<说明>→Typeid@set_table<变量表>2.<变量表>→,id@set_table<变量表>3.<变量表>→εTypett中放类型值idnn中放变量名填表动作符号也可带有属性:@set_table↓t1,n1↓t1,n1可从前面得到,所以称为继承属性,继承前面的值<变量表>↓t2↓t2同上例:intA,BCTypeintidA,idBC语法树:<说明>TypeintidA@set_table↓int,A<变量表>↓int,idBC@set_table↓intBC<变量表>↓intε符号表9.2.3(1)L-属性翻译文法(L-ATG)这是属性翻译文法中较简单的一种。其输入文法要求是LL(1)文法,可用自顶向下分析构造分析器。在分析过程中可进行属性求值。属性的求值规则:综合属性:(1)产生式右部非终结符号的综合属性值,取其下部产生式左部同名非终结符号的综合属性值。(2)产生式左部非终结符号的综合属性值,用该产生式左部符号的继承属性或某个右部符号的属性进行计算。(3)动作符号的综合属性用该符号的继承属性或某个右部符号的属性进行计算。例:A→BC求值顺序:(2)简单赋值形式的L_属性翻译文法(SL-ATG)一般属性值计算:x:=f(y,z)SL-ATG属性值计算:x:=某符号的属性值或常量。例x:=y,x,y,z:=17——称为复写规则定义9.4一个L-ATG被定义为简单赋值形式的(SL-ATG),当且仅当满足如下条件:1.产生式右部符号的继承属性是一个常量,它等于左部符号的继承属性值或等于出现在所给符号左边符号的一个综合属性值。2.产生式左部非终结符号的综合属性是一个常量,它等于左部符号的继承属性值或等于右部符号的综合属性值。L-ATGSL-ATG给定一个L-ATG,如何找一个等价的赋值形式的L-ATG?第一步:设动作符号“@f”表示函数f求值,该动作符号有两个继承属性和一个综合属性。@fI1,I2S1且S1:=f(I1,I2)注意:无参函数过程作为常数处理,如<A>→<B>x<C>yx,y:=NEWT9.3.1翻译文法的自顶向下翻译——递归下降翻译器9.3.2属性翻译文法的自顶向下翻译的实现——递归下降属性翻译器例:输入文法1.<S>a<A><S>2.<S>b3.<A>c<A><S>b4.<A>ε主程序ifCLASS=aorbthenPROCS;ifCLASS≠右界符thenERROR;ACCEPT;过程PROCScaseCLASSofa:P1;b:P2;其它:ERROR;endofcase;P1:/*产生式1的代码*/NEXTSYM;PROCA;PROCS;RETURN;P2:/*产生式2的代码*/NEXTSYM;RETURN;过程PROCA…方法:对于每个非终结符号都编写一个翻译子程序(过程)。根据该非终结符号具有的属性数目,设置相应的参数。过程调用语句的实参:继承属性:继承属性值综合属性:属性变量名(传地址,返回时有值)下面通过一个例子,较详细地介绍如何构造属性文法的递归下降翻译器。1.<S>↓R→aT<A>Q@x↓T,R<S>↓Q2.<S>↓R→b@z↓R,3.<A>P→Cu@y↓u<A>Q<