编译原理第4章3.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文档。上传文档
查看更多
编译原理第4章3

4.3 自下而上分析法的一般原理 自下而上分析法的一般原理: 4.3 自下而上分析法的一般原理 4.3 自下而上分析法的一般原理 例1 设有文法G[S]: 4.3 自下而上分析法的一般原理 首先设一个符号栈并将输入符号串的左界符‘$’移入栈,分析时将输入符号串按从左到右扫描顺序移入栈中,其整个分析过程如下表所示。 4.3 自下而上分析法的一般原理 实现自下而上分析法的关键问题是如何精确定义可归约串这个直观概念,以及怎样识别“可归约串”? 4.3 自下而上分析法的一般原理 对“可归约串”的不同定义形成不同的自下而上的分析方法,在规范归约分析法中,是用句柄来刻画可归约串,而在算符优先分析法中,是用最左素短语来刻画可归约串。 4.3 自下而上分析法的一般原理 识别可归约串的不同方法,也同样形成不同的自下而上的分析方法, 简单优先分析法和LR分析法都是规范归约分析法,即都是用句柄刻画可归约串。 4.3 自下而上分析法的一般原理 但它们识别句柄的方法不同, LR分析法是根据历史、现实、展望三者信息来确定栈顶符号串是否形成句柄,而简单优先分析法是根据文法符号之间的优先关系来确定栈顶符号串是否形成句柄。 4.3 自下而上分析法的一般原理 下面,我们将介绍两种常用的自下而上的分析方法即算符优先分析法和LR分析法。在这两种分析法中,重点讨论怎样识别栈顶符号串是可归约串以及如何进行归约。 4.4 算符优先分析法 方法概述 4.4.1 方法概述 例如:文法G[E]为: 4.4.1 方法概述 句子id+id*id的两种不同的规范归约过程如下: 4.4.1 方法概述 分析上述归约过程,句型 E+E*id 在第一个规范归约中id是它的句柄; 而在第二个规范归约中E+E是它的句柄。此现象是由于没有定义运算符+和*的优先关系而引起的。 在第一个规范归约中是假定*优先于+, 所以不能立即把E+E归约为E ; 而在第二个规范归约中是假定+ 优先于* , 因此必须先把E+E归约为E。 4.4.1 方法概述 可见上述归约过程中起决定作用的是相邻两个终结符号之间的优先关系。于是算符优先分析法的关键在于用合适的方法去定义任何两个可能相邻出现的终结符号a和b之间的优先关系。 4.4.1 方法概述 2. 任何两个相邻终结符号a 和 b之间的优 先关系有三种: 4.4.1 方法概述 通常表达式中运算符的优先关系有 4.4.1 方法概述 4.4.1 方法概述 4.4.2 算符优先文法的定义 算符优先文法的定义 4.4.2 算符优先文法的定义 也就是说,在算符文法中,任何一个规则右部都不存在两个非终结符相邻的情况。 4.4.2 算符优先文法的定义 设G是一个算符文法,a和b是任意两个终结符,P、Q、R是非终结符,算符优先关系 、 、 定义如下: 4.4.2 算符优先文法的定义 4.4.2 算符优先文法的定义 3.算符优先文法的定义 4.4.2 算符优先文法的定义 对前述算术表达式的文法: 4.4.2 算符优先文法的定义 因为该文法的任一规则右部都不包含两个相邻的非终结符,所以该文法是算符文法。 4.4.2 算符优先文法的定义 即运算符+和*之间存在两种不同的优先关系,所以该表达式的文法仅是算符文法而不是算符优先文法。 4.4.2 算符优先文法的定义 若算术表达式的文法为: 4.4.3 算符优先关系表的构造 算符优先关系表的构造 4.4.3 算符优先关系表的构造 首先对文法每个非终结符A定义两个集合: 4.4.3 算符优先关系表的构造 使用这两个集合,构造文法G的优先关系表的算法如下: 4.4.3 算符优先关系表的构造 方法: 4.4.3 算符优先关系表的构造 3. 对 FIRSTVT(S)中的所有b,置$ b; 4.4.3 算符优先关系表的构造 例 设有表达式的文法G[E]: 4.4.3 算符优先关系表的构造 首先计算每个非终结符的FIRSTVT和LASTVT: 4.4.3 算符优先关系表的构造 4.4.3 算符优先关系表的构造 4.4.3 算符优先关系表的构造 4.4.3 算符优先关系表的构造 4.4.3 算符优先关系表的构造 输入:算符优先文法G 输出:关于文法G的优先关系表 1.为每个非终结符A计算FIRSTVT(A)和LASTVT(A) 2 .执行程序 for ( 每个产生式 A→x1x2…xn ) for ( i=1; i = n-1 ; i++ ) { if ( xi和xi+1均?VT) 置 xi xi+1 = . if (

文档评论(0)

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

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

1亿VIP精品文档

相关文档