Chapt6_第6章 语法制导翻译技术.pptx

上传人:b****9 文档编号:98358 上传时间:2022-10-03 格式:PPTX 页数:79 大小:686.30KB
下载 相关 举报
Chapt6_第6章 语法制导翻译技术.pptx_第1页
第1页 / 共79页
Chapt6_第6章 语法制导翻译技术.pptx_第2页
第2页 / 共79页
Chapt6_第6章 语法制导翻译技术.pptx_第3页
第3页 / 共79页
Chapt6_第6章 语法制导翻译技术.pptx_第4页
第4页 / 共79页
Chapt6_第6章 语法制导翻译技术.pptx_第5页
第5页 / 共79页
点击查看更多>>
下载资源
资源描述

Chapt6_第6章 语法制导翻译技术.pptx

《Chapt6_第6章 语法制导翻译技术.pptx》由会员分享,可在线阅读,更多相关《Chapt6_第6章 语法制导翻译技术.pptx(79页珍藏版)》请在冰豆网上搜索。

Chapt6_第6章 语法制导翻译技术.pptx

第6章语法制导翻译技术,Nocross,nocrown.不经历风雨,怎么见彩虹.,6.1翻译文法6.2语法制导翻译6.3自顶向下语法制导翻译6.4属性翻译文法6.5属性文法的自顶向下翻译6.6自底向上语法制导翻译,第6章语法制导翻译技术,语法制导翻译翻译文法、属性翻译文法及其应用,学习重点,第6章语法制导翻译技术,例如下列Test语言代码:

inta;b=a+1;writeb;,语义:

是程序设计语言中按语法规则所构成的各个语法成分的含义。

一个源程序经历了词法分析与语法分析,表明它在书写上和语法上是正确的,但不能保证其在语义上是正确。

语义分析的任务:

分析程序的含义,并作相应的语义处理。

第6章语法制导翻译技术,语义分析的功能确定类型:

确定标识符所关联数据对象的数据类型(有时由词法分析完成)。

类型和运算合法性检查:

检查运算的合法性与运算分量类型的一致性(或相容性),必要时作相应的类型转换。

例如,a+b,要求a和b都是算术型(整型或实型),当a和b不是同一种类型时,需进行类型转换。

识别含义:

确定程序中各构造成分组合到一起的含义,并作相应的语义处理。

这时对可执行语句生成中间代码或目标代码。

第6章语法制导翻译技术,语义分析的功能控制流检查:

控制流语句必须转移到合法的地方。

例如,在C语言中,break语句使得控制跳离包括该语句的while、for或switch语句,如果不存在包括它的这样的语句,则报告错误。

一致性检查:

在很多程序设计语言中要求对象只能被说明一次。

其它语义检查:

如对象的作用域等。

第6章语法制导翻译技术,语义分析的实现语义分析是以语法分析的输出(语法分析树或其它等价的内部中间表示)作为输入,输出则是中间代码,甚至是目标代码。

一般情况下,语义分析仅产生中间代码,即语义分析与目标代码生成分成两遍来进行。

第6章语法制导翻译技术,语义往往是上下文有关的,只宜于用口语描述,语义形式化很困难。

目前,比较流行的语义描述和语义处理方法是语法制导翻译技术。

语法制导翻译技术基础:

形式描述的属性翻译文法特点:

把语法与语义分开,但又在语法分析的同时进行相应的语义工作提高了实用性,6.1翻译文法,例:

设计一个翻译器,它能将中缀表达式翻译成波兰后缀表达式。

假设输入串是a+b*c,则,翻译器,输入串a+b*c,输出串abc*+,问题:

如何实现这个翻译过程呢?

先看输入串a+b*c的推导过程:

中缀表达式文法:

EE+TETTT*FTF,F(E)FaFbFc,EE+TE+T*FE+T*cE+F*cE+b*cT+b*cF+b*ca+b*c,由推导过程EE+TE+T*FE+T*cE+F*cE+b*cT+b*cF+b*ca+b*c,得到输入串的语法树:

记住翻译目标是:

abc*+,E,E,+,T,T,T,*,F,添加叶子结点,用表示输出操作(输出其后的字符)。

E,E,+,T,T,T,*,F,*,+,Fa将符号的叶子结点从左到右连起来,得到abc*+(注意,这种带有的符号串称为动作序列。

)执行这个符号序列,得到abc*+,这就是翻译结果!

TFa,E,问题:

如何得到这棵带动作符号的语法树呢?

在中缀表达式文法(输入文法)的基础上加入动作符号,,得到翻译文法。

E,F(E),EE+TETFa,TT*FTF,FbFc,EE+T+ETTT*F*,F(E)FaaFbb,TF,Fcc,输入文法,翻译文法,例用输入文法推导a+b*c的过程如下:

EE+TE+T*FE+T*cE+F*cE+b*cT+b*cF+b*ca+b*c,用翻译文法进行相同的推导:

EE+T,F(E),ETFa,TT*FTF,EE+T+ETTT*F*,F(E)FaaFbb,FbFcTFFcc,输入文法,翻译文法,输入序列,EE+T+E+T*F*+E+T*cc*+E+F*cc*+E+bb*cc*+T+bb*cc*+F+bb*cc*+aa+bb*cc*+活动序列,将活动序列中的输入序列去掉,得到动作序列:

abc*+,翻译文法是上下文无关文法的推广,是在描述语言文法规则的右部适当位6置.加1入翻语义译动文作法得到的。

为了区分文法符号与语义动作,在文法的表示中,将代表语义动作的符号前面加动作符号标记来表示。

输入序列:

用输入文法通过推导可以得到的终结符号串。

活动序列:

用翻译文法通过推导得到的符号串。

动作序列:

从某活动序列中去掉所有输入序列,即由所有动作符号组成的符号串。

6.1翻译文法,6.1翻译文法,上例的翻译文法可表示成:

G(E)=Vn,Vt,P,E,其中Vn=E,T,FVt=a,b,c,+,*,+,*,a,b,cP=EE+T+,ET,TF,Faa,TT*F*,Fbb,Fcc在高级程序设计语言的翻译中有各种各样的翻译文法其中的动作符号代表不同的语义动作。

在翻译文法中,如果的动作就是输出其后的符号,可称该文法为符号串翻译文法。

符号串翻译文法是翻译文法中的一种特定类型。

6.2语法制导翻译,其中:

a+b*cabc*+,为输入序列为动作序列,如果执行该动作序列中的动作,则产生输出序列abc*+,这就是输入序列a+b*c的翻译结果。

由于这种翻译结果是通过翻译文法获得的,所以就称为语法制导翻译。

语法制导翻译:

就是给定一输入序列,根据翻译文法获得翻译该符号串的活动序列,从活动序列中分离出动作符号串,然后执行该动作符号串所规定的动作,从而得到翻译结果。

例:

根据前面的算术表达式翻译文法,对于输入符号串a+b*c,推导出的活动序列为:

aa+bb*cc*+,6.2语法制导翻译,按语法制导翻译的方法来实现语言的翻译首先要根据输入语言的文法,分析各条产生式的语义,即分析他们要求计算机所完成的操作。

分别编出完成这些操作的子程序或程序段(称为语义子程序或语义动作)把这些子程序或程序段的名字作为动作符号插入到输入文法各产生式右部的适当位置上,从而实现翻译文法。

6.3自顶向下语法制导翻译自顶向下的语法制导翻译有递归下降翻译和LL

(1)翻译。

递归下降翻译:

递归下降翻译器的实现思路与递归下降分析基本相同,要求也一样,即不能有左递归,头符号集不能相交,只需在适当的位置插入实现动作符号的子程序。

6.3自顶向下语法制导翻译,例算术表达式翻译文法如下:

EE+T+ET,TT*F*TFF(E)Fii注:

为输出,其后的符号串。

解:

去掉文法中的左递归,修改后文法为:

ET+T+TF*F*,F(E)|ii,处理E的递归下降翻译程序流程图,处理T的递归下降翻译程序流程图,TF*F*,F(E)|ii处理F的递归下降翻译程序流程图,6.3自顶向下语法制导翻译自顶向下的语法制导翻译有递归下降翻译和LL

(1)翻译。

LL

(1)翻译:

LL

(1)翻译器的实现思路与LL

(1)分析法基本相同,要求也一样,即不能有左递归,头符号集不能相交,只需在文法适当的位置插入实现动作符号的子程序,并在LL

(1)分析表中加入相应的动作符号。

6.3自顶向下语法制导翻译,例(P126)考虑下面的输入文法:

AaBcDAbBcBaADcDDb,输入文法的LL

(1)分析表,设其翻译文法为:

AvawBxcyDzBcrDcDn,AbBamADsb,6.3自顶向下语法制导翻译,翻译文法的LL

(1)分析表,注意:

对于翻译文法,动作符号像其它符号一样入栈。

但当动作符号处于栈顶时,无论当前的输入符号是什么,都要执行由该动作符号所规定的操作,并将该动作符号从栈顶弹出,且不移动读符号指针。

6.3自顶向下语法制导翻译,假如翻译器的分析栈的栈顶符号为A,且当前输入符号为a,那么将发生的动作是弹出A,zDycxBwav入栈。

由于此时栈顶为动作符号v,因此v出栈,并执行由该动作符号所规定的操作,对于该符号串翻译文法就是要输出v,即out(v)。

紧接着,a出栈,读下一个符号c。

然后,动作符号w为栈顶,因此w出栈,并执行由该动作符号所规定的操作,对于该符号串翻译文法就是要输出w,即out(w)。

ac#,v出栈并执行,a出栈,读入c,w出栈并执行,ac#,6.3自顶向下语法制导翻译,翻译文法的LL

(1)翻译的总控程序总结:

1)当翻译器的控制执行程序根据栈顶符号和当前输入符号查该表得到元素为空时,则转错误处理程序。

2)若控制执行程序识别栈顶符号为动作符号时,不管当前输入符号是什么,将该动作符号从栈中弹出并转相应的子程序以完成所需的翻译(执行动作)。

对于符号串翻译文法,其语义动作为输出动作符号中的符号串。

6.4属性翻译文法,引例声明语句文法:

TYPEID;,ID其中TYPE代表类型,其值可为int或real或bool。

问题:

将输入符号串“inta,b;”翻译为:

intaintb思考:

能否通过在文法产生式右部添加动作符号实现该翻译?

6.4,引例声明语句文法:

TYPEID;,ID,属性翻译文法输入:

inta,b;输出:

inta,intb,其中TYPE代表类型,其值可为int或real或bool。

输入串inta,b;”的推导过程:

TYPEID;TYPEID,ID;,TYPEID,ID问题:

无法将文法符号TYPE、ID与输入符号int、a、b关联起来!

6.4属性翻译文法,6.4属性翻译文法,属性:

对文法符号引进一些属性,这些属性代表与文法符号相关的信息,如类型、值、代码序列、符号表内容等。

属性值可以在语法分析过程中计算和传递。

属性一般用标识符表示,通常写在相应文法符号的下边,它的意义局限于它所在的产生式。

属性加工的过程就是语义的处理过程。

属性的分类综合属性继承属性通常规定,每个文法符号的综合属性和继承属性的交集为空。

6.4属性翻译文法,综合属性:

综合属性的计算规则是按“自下而上”方式进行,即文法产生式左部符号的某些属性根据其右部符号的属性和/或自己的其它属性计算而得。

在语法树中,如果一个结点的某一属性,其值由子结点的属性值来计算,则该属性为综合属性。

综合属性可用“”来表示。

对终结符号其综合属性具有指定的初始值该初始值由词法分析程序提供。

例ApXq,rYs,tp=q+s,r=p+t其中,p是综合属性,r不是综合属性,q,s,t不能确定,需参考其它产生式的属性计算规则才能确定。

6.4属性翻译文法,继承属性:

继承属性的计算规则是按“自上而下”方式进行,即文法产生式右部符号的某些属性根据其左部符号的属性和/或右部的其它符号的某些属性计算而得。

在语法中,如果一个结点的某一属性,其值由该结点的父结点和/或兄弟结点的属性值来计算,则该属性为继承属性。

继承属性可用“”来表示。

开始符号的继承属性具有初始值。

例ApXq,rYs,tp=q+s,r=p+t显然,r是继承属性。

6.4属性翻译文法,例算术表达式的属性翻译文法:

SEqANSWERrEpEq+TrEpTq,r=qp=q+rp=q,FpNUMq,p=q,6.4属性翻译文法语义规则(语义动作或翻译子程序):

为输入文法配备计算属性的计算规则,称为语义规则。

如上例中,p=q+r就是语义规则。

产生式只能产生符号串,它并未指明所产生的符号串的含义是什么。

语义规则给出了一个产生式所产生的符号串的含义,而且还根据这种含义规定了对应的加工动作。

这些加工动作包括查填各类表格、改变编译程序的某些变量的值、打印各种错误信息以及生成中间形式代码等。

6.4属性翻译文法,属性翻译文法(或属性文法):

对于某个压缩的上下文无关文法,当为文法符号引进一组属性,且让该文法中的产生式附加上语义规则时,称该上下文无关文法为属性翻译文法。

6.4属性翻译文法,语义分析的翻译过程:

步骤1分析输入符号串,建立语法树;步骤2从语法树得到描述结点属性间依赖关系的依赖图,由此依赖图得到语义规则的计算次序;步骤3进行语义规则计算,得到翻译结果。

语义分析翻译过程的分类:

自顶向下的翻译自底向上的翻

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1