ImageVerifierCode 换一换
格式:PPTX , 页数:79 ,大小:686.30KB ,
资源ID:98358      下载积分:15 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/98358.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Chapt6_第6章 语法制导翻译技术.pptx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、第6章 语法制导翻译技术,No cross,no crown.不经历风雨,怎么见彩虹.,6.1 翻译文法6.2 语法制导翻译6.3 自顶向下语法制导翻译6.4 属性翻译文法6.5 属性文法的自顶向下翻译6.6 自底向上语法制导翻译,第6章语法制导翻译技术,语法制导翻译翻译文法、属性翻译文法及其应用,学习重点,第6章语法制导翻译技术,例如下列Test语言代码:int a;b=a+1;write b;,语义:是程序设计语言中按语法规则所构成的各 个语法成分的含义。一个源程序经历了词法分析与语法分析,表明它 在书写上和语法上是正确的,但不能保证其在语义 上是正确。,语义分析的任务:分析程序的含义,并

2、作相应的语义处 理。,第6章语法制导翻译技术,语义分析的功能确定类型:确定标识符所关联数据对象的数据类型(有时由词法分析完成)。类型和运算合法性检查:检查运算的合法性与运算 分量类型的一致性(或相容性),必要时作相应的类 型转换。例如,a+b,要求a和b都是算术型(整型或实 型),当a和b不是同一种类型时,需进行类型转换。识别含义:确定程序中各构造成分组合到一起的含 义,并作相应的语义处理。这时对可执行语句生成中 间代码或目标代码。,第6章语法制导翻译技术,语义分析的功能控制流检查:控制流语句必须转移到合法的地方。例如,在C语言中,break语句使得控制跳离包括该语 句的while、for或s

3、witch语句,如果不存在包括它的这 样的语句,则报告错误。一致性检查:在很多程序设计语言中要求对象只能 被说明一次。其它语义检查:如对象的作用域等。,第6章语法制导翻译技术,语义分析的实现语义分析是以语法分析的输出(语法分析树或其它 等价的内部中间表示)作为输入,输出则是中间代码,甚至是目标代码。一般情况下,语义分析仅产生中间代 码,即语义分析与目标代码生成分成两遍来进行。,第6章语法制导翻译技术,语义往往是上下文有关的,只宜于用口语描述,语义形式化很困难。目前,比较流行的语义描述和语义 处理方法是语法制导翻译技术。语法制导翻译技术基础:形式描述的属性翻译文法特点:把语法与语义分开,但又在语

4、法分析的同时进行相应的语义工作提高了实用性,6.1翻译文法,例:设计一个翻译器,它能将中缀表达式翻译成波兰后 缀表达式。假设输入串是a+b*c,则,翻译器,输入串a+b*c,输出串abc*+,问题:如何实现这个翻译过程呢?先看输入串a+b*c的推导过程:,中缀表达式文法:,EE+T ET TT*F TF,F(E)Fa Fb Fc,EE+TE+T*FE+T*cE+F*c E+b*c T+b*c F+b*c a+b*c,由推导过程EE+TE+T*FE+T*c E+F*c E+b*c T+b*c F+b*c a+b*c,得到输入串的语法树:,记住翻译目标是:abc*+,E,E,+,T,T,T,*,F

5、,添加叶子结点,用 表示输出操作(输出 其后的字符)。,E,E,+,T,T,T,*,F,*,+,Fa将符号的叶子结点从左到右连起来,得到abc*+(注意,这种带有的符号串称为动作序列。)执行这个符号序列,得到abc*+,这就是翻译 结果!,TFa,E,问题:如何得到这棵带动作符号的语法树呢?,在中缀表达式文法(输入文法)的基础上加入动作符号,,得到翻译文法。E,F(E),EE+T ET Fa,TT*F TF,Fb Fc,EE+T+ET TT*F*,F(E)Faa Fbb,TF,Fcc,输入文法,翻译文法,例 用输入文法推导a+b*c的过程如下:EE+TE+T*FE+T*c E+F*c E+b*

6、c T+b*c F+b*c a+b*c,用翻译文法进行相同的推导:,EE+T,F(E),ET Fa,TT*F TF,EE+T+ET TT*F*,F(E)Faa Fbb,Fb Fc TF Fcc,输入文法,翻译文法,输入序列,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入翻语义译动文作法得到的。为了区分文法符号与语义动作,在文法的表示中,将代表语义动作的符 号前面加动作符

7、号标记来表示。输入序列:用输入 文法通过推导可以得 到的终结符号串。活动序列:用翻译 文法通过推导得到的 符号串。动作序列:从某活 动序列中去掉所有输 入序列,即由所有动 作符号组成的符号串。,6.1翻译文法,6.1翻译文法,上例的翻译文法可表示成:G(E)=Vn,Vt,P,E,其中Vn=E,T,FVt=a,b,c,+,*,+,*,a,b,c P=EE+T+,ET,TF,Faa,TT*F*,Fbb,Fcc 在高级程序设计语言的翻译中有各种各样的翻译文法 其中的动作符号代表不同的语义动作。在翻译文法中,如果的动作就是输出其后的符号,可 称该文法为符号串翻译文法。符号串翻译文法是翻译 文法中的一种

8、特定类型。,6.2语法制导翻译,其中:a+b*cabc*+,为输入序列 为动作序列,如果执行该动作序列中的动作,则产生输出序列abc*+,这就是输入序列a+b*c的翻译结果。由于这种翻译结果是通过翻译文法获得的,所以就称 为语法制导翻译。,语法制导翻译:就是给定一输入序列,根据翻译文法获 得翻译该符号串的活动序列,从活动序列中分离出动作符号串,然后执行该动作符号串所规定的动作,从而得到翻 译结果。例:根据前面的算术表达式翻译文法,对于输入符号串a+b*c,推导出的活动序列为:aa+bb*cc*+,6.2语法制导翻译,按 语法制导翻译的方法来实现语言的翻译首先要根据输入语言的文法,分析各条产生式

9、的语义,即分析他们要求计算机所完成的操作。分别编出完成这些操作的子程序或程序段(称为语义子 程序或语义动作)把这些子程序或程序段的名字作为动作符号插入到输 入文法各产生式右部的适当位置上,从而实现翻译文 法。,6.3自顶向下语法制导翻译自顶向下的语法制导翻译有递归下降翻译和LL(1)翻译。递归下降翻译:递归下降翻译器的实现思路与 递归下降分析基本相同,要求也一样,即不能有 左递归,头符号集不能相交,只需在适当的位置 插入实现动作符号的子程序。,6.3自顶向下语法制导翻译,例 算术表达式 翻译文法如下:EE+T+ET,TT*F*TF F(E)Fii注:为输出,其后的符号串。,解:去掉文法 中的左

10、递归,修改后文法为: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)考虑下面的输入 文法:AaBcD Ab Bc BaA DcD Db,输入文法的LL(1

11、)分析表,设其翻译文法为:AvawBxcyDz Bcr DcDn,Ab BamA Dsb,6.3自顶向下语法制导翻译,翻译文法的LL(1)分析表,注意:对于翻译文法,动作符号像其它符号一样入栈。但 当动作符号处于栈顶时,无论当前的输入符号是什么,都 要执行由该动作符号所规定的操作,并将该动作符号从栈 顶弹出,且不移动读符号指针。,6.3自顶向下语法制导翻译,假如翻译器的分析栈的栈顶符号为A,且当前输入符号为 a,那么将发生的动作是弹出A,zDycxBwav入栈。由于此时栈顶为动作符号v,因此v出栈,并执行由该动作 符号所规定的操作,对于该符号串翻译文法就是要输出v,即 out(v)。紧接着,a

12、出栈,读下一个符号c。然后,动作符号w 为栈顶,因此w出栈,并执行由该动作符号所规定的操作,对于该符号串翻译文法就是要输出w,即out(w)。,ac#,v出栈并执行,a出栈,读入 c,w出栈并执 行,ac#,6.3自顶向下语法制导翻译,翻译文法的LL(1)翻译的总控程序总结:1)当翻译器的控制执行程序根据栈顶符号和当前输 入符号查该表得到元素为空时,则转错误处理程序。2)若控制执行程序识别栈顶符号为动作符号时,不 管当前输入符号是什么,将该动作符号从栈中弹出并 转相应的子程序以完成所需的翻译(执行动作)。对 于符号串翻译文法,其语义动作为输出动作符号中的 符号串。,6.4属性翻译文法,引例声明

13、语句文法:TYPE ID;,ID 其中TYPE代表类型,其值可为int或 real或bool。问题:将输入符号串“int a,b;”翻译为:int aint b思考:能否通过在文法产生式右部添加动作符号 实现该翻译?,6.4,引例声明语句文法:TYPE ID;,ID,属性翻译文法输入:int a,b;输出:int a,int b,其中TYPE代表类型,其值可为int或 real或bool。输入串int a,b;”的推导过程:,TYPEID;TYPEID,ID;,TYPEID,ID问题:无法将文法符号TYPE、ID与输入符号int、a、b 关联起来!,6.4属性翻译文法,6.4属性翻译文法,属性

14、:对文法符号引进一些属性,这些属性代表与 文法符号相关的信息,如类型、值、代码序列、符号 表内容等。属性值可以在语法分析过程中计算和传递。属性一般用标识符表示,通常写在相应文法符号的 下边,它的意义局限于它所在的产生式。属性加工的 过程就是语义的处理过程。属性的分类综合属性继承属性通常规定,每个文法符号的综合属性和继承属性 的交集为空。,6.4属性翻译文法,综合属性:综合属性的计算规则是按“自下而上”方式进行,即文法产生式左部符号的某些属性根据其右部符号的属性和/或自己的其它属性计算而得。在语法树中,如果一个结点的某一属性,其值由子 结点的属性值来计算,则该属性为综合属性。综合属性可用“”来表

15、示。对终结符号其综合属 性具有指定的初始值 该初始值由词法分析程序提供。,例 ApXq,rYs,t p=q+s,r=p+t其中,p是综合属性,r不是综合属性,q,s,t不能 确定,需参考其它产生式的属性计算规则才能确定。,6.4属性翻译文法,继承属性:继承属性的计算规则是按“自上而下”方式进行,即文法产生式右部符号的某些属性根据其左部符号的属性和/或右部的其它符号的某些属性计算 而得。在语法中,如果一个结点的某一属性,其值由该结点的父结点和/或兄弟结点的属性值来计算,则该属性 为继承属性。继承属性可用“”来表示。开始符号的继承属性具有初始值。例 ApXq,rYs,t p=q+s,r=p+t显然

16、,r是继承属性。,6.4属性翻译文法,例 算术表达式的属性翻译文法:,SEqANSWERr Ep Eq+Tr EpTq,r=q p=q+r p=q,Fp NUMq,p=q,6.4属性翻译文法语义规则(语义动作或翻译子程序):为输入文 法配备计算属性的计算规则,称为语义规则。如上例中,p=q+r就是语义规则。产生式只能产生符号串,它并未指明所产生的 符号串的含义是什么。语义规则给出了一个产生 式所产生的符号串的含义,而且还根据这种含义 规定了对应的加工动作。这些加工动作包括查填各类表格、改变编译程 序的某些变量的值、打印各种错误信息以及生成 中间形式代码等。,6.4属性翻译文法,属性翻译文法(或属性文 法):对于某个压缩的上下文无关文法,当为文法符号 引进一组属性,且让该文 法中的产生式附加上语义 规则时,称该上下文无关 文法为属性翻译文法。,6.4属性翻译文法,语义分析的翻译过程:步骤1分析输入符号串,建立语法树;步骤2从语法树得到描述结点属性间依赖关系的依赖 图,由此依赖图得到语义规则的计算次序;步骤3进行语义规则计算,得到翻译结果。语义分析翻译过程的分类:自顶向下的翻译自底向上的翻

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

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