06语义处理讲课版1_语法制导翻译.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
06语义处理讲课版1_语法制导翻译

第6单元 语义处理 (含中间代码生成) 6.1 概述 通过前面章节的学习,我们知道: 词法分析:把源程序分割为一个个单词。 目的:保证程序在书写上是正确的; 语法分析:由单词流构造(一棵)语法分析树。 目的:保证程序在语法上是正确的; 但是:它们都不能保证程序在语义上是正确的。所以,需要进一步进行语义处理。 目标:把语法树翻译为中间代码或目标代码。 如果语义分析结果正确,则可以进行真正的语义翻译工作,即: 或者,将源程序翻译成程序的一种中间表示形式(中间代码); 或者,将源程序直接翻译成目标代码。 2. 语法制导翻译 —— 语义处理的基本方法 将静态检查和中间代码生成结合到语法处理过程的技术,称为语法制导翻译。 基本思想: 在进行语法分析的同时,完成相应的语义处理。也就是说,一旦语法分析器识别出一个语法结构,就立即对其进行翻译。这里的翻译是根据语言的语义进行的,并通过调用事先为该语法结构编写的语义子程序来实现。 (1)理论基础 —— 使用上下文无关文法(CFG)引导语言翻译 CFG的非终结符代表了程序设计语言的某个构造; 程序设计语言的构造由更小的构造组合而成。 因而,一个构造的语义也可以由小构造的含义综合而来。比如: 表达式x+y的类型由x、y的类型和运算符+决定。 也可以从附近的构造继承而来。比如: 声明int x;中x的类型由它左边的类型表达式决定。 (2)基本思想 为文法的每个产生式配上一组语义规则。 在语法分析过程中,随着分析的步步进展,每当进行推导或归约时,同步执行每个产生式所附带的语义规则描述的语义动作(或称语义子程序),故称语法制导翻译【即由语法分析来主导进程】。 6.2 语法制导定义 所谓语法制导定义:是指附带有属性和语义规则的上下文无关文法(CFG)。 属性:蕴含与文法符号相关联的语义信息; 语义规则:指明与产生式相关联的语义动作。 一、属性 2. 属性确定 写属性文法,首先应确定对于每个文法符号都有哪些属性,然后给每个属性起个名字,接着确定每个属性的类别。 二、语义规则 为文法产生式配备一组属性的计算规则,则称为语义规则。 其形式定义: ? A→? ? P,写出一套形如下式的属性计算规则: b = f(c1,c2,…,ck) 即:属性变量 = 属性表达式 其中f是映射函数,b和ci可取下述两种情况之一: b是左部A的一个综合属性,且c1,c2,…,ck是产生式右部?的文法符号的属性; b是产生式右部?的某个文法符号的继承属性,且c1,c2,…,ck是A或产生式右部?的任何文法符号的属性。 在这两种情况下,都称b依赖于c1、c2、…、ck。 例如: 已知产生式规则:E→E1+T 对应的语义规则:(假设只有int/float类型) E.type = if (E1.type==T.type) T.type else float E.place = newTempPlace(); //返回一个新的内存位置 产生式规则:F → id 对应的语义规则: F.type = lookupIDTable(id.lexValue)-type; F.place = lookupIDTable(id.lexValue)-address; lookupIDTable用于在符号表中查找指定值的元素。 6.3 属性计算 属性与变量一样,可以进行计算和传递。属性加工的过程即是语义处理的过程。 1. 综合属性的计算 使用自底向上分析法,在每一个结点处使用语义规则计算综合属性的值,即“在用哪个产生式进行归约后,就执行那个产生式的语法制导定义计算属性的值。”从叶结点到根结点逐步进行。 对于产生式左部非终结符: 综合属性:由所在产生式左部符号的继承属性,或某个右部符号的属性进行计算,这有助于在产生式范围内“封装”属性的依赖性。 对于产生式右部非终结符: 综合属性值不由所给产生式的属性计算规则进行计算,而是由其它产生式的属性规则计算,即取其下面产生式左部同名非终结符的综合属性值。 例 6.2 设综合属性 val 表示表达式 E、项 T和因子 F的值。 (P165 表6-1) 产生式 语义规则 L→En print(E.val) E→E1+T E.val = E1.val + T.val E→T E.val = T.val T→T1*F T.val = T1.val * F.val T→F T.val = F.val F→(E) F.val = E.val F→digit F.val = digit.lexval 在语法树中,一个结点的继承属性由此结点的父结点或兄弟结点的某些属性来确定。

您可能关注的文档

文档评论(0)

zhuliyan1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档