编译原理第5章-自底向上优先分析.ppt

  1. 1、本文档共65页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理第5章-自底向上优先分析概要

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

文档评论(0)

wyjy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档