编译原理重点—第七章 自下而上的LR(K)分析方法.pptVIP

编译原理重点—第七章 自下而上的LR(K)分析方法.ppt

  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文档。上传文档
查看更多
编译原理重点—第七章 自下而上的LR(K)分析方法

An Introduction to Database System 中南民族大学计算机科学学院 概述 一. 自底向上的分析方法是一种移进-规约过程,关键问题是:如何确定句柄。 二. LR(k)方法于1965年由Knuth提出。 三. LR(k)分析器:从左到右扫描输入串,进行规范归约。分析过程中,至多向前查看k个输入符号,即可决定当前的动作是归约还是移进。若为归约,能选择唯一一个产生式进行归约。 概述(续1) 四. LR(k)分析器功能较强,主要优缺点为: 1.优点: (1)对文法的限制比较少(与自顶向下的LL(K)、自底向上的优先分析方法相比而言)。 (2)分析速度快,能准确、即时地指出出错位置。 2.缺点:对于一个实用语言文法的分析器来说,构造工作量很大。 概述(续2) 五. LR(k)分析器由一个总控程序和一个分析表以及2个分析栈构成。 六. 4种分析表的构造方法: LR(0),SLR(1),LR(1),LALR(1) 7.1 LR分析方法概述 LR(k)分析器由一个总控程序和一个分析表以及2个分析栈构成。 LR分析器的总控程序相同。 不同文法,分析表不同;同一文法,采用不同LR分析法,分析表也不同。 分析表可分为动作表(ACTION)和状态转换表(GOTO)。 分析栈包括文法符号栈和相应的状态栈。 LR(k)分析器的工作过程为: LR分析器工作过程示意图 LR分析器工作过程示意图的说明 移进 ai 和s=goto[sm,ai]进栈 action[sm,ai]= 归约 rj : A?Xm-r+1Xm-r+2…Xm s=goto[sm-r , A] 接受 出错 goto[Si, X] = Sj X为文法符号 回顾:移进-规约分析 例1 文法G[S]: (1) S → aAcBe (2) A → b (3) A → Ab (4) B → d 移进-归约中的问题 在步骤3中,用A→b归约 在步骤5中,用A→Ab归约 问题:何时移进?何时归约?用哪个产生式归约? 在优先分析方法中如何解决这个问题的? 移进-归约中的问题分析 分析:已分析过的部分在栈中的前缀不同,而且移进和归约后栈中的状态会发生变化 我们引入一个新的状态栈来表示符号栈中的符号目前状态,用LR分析表来表示不同状态下对于各输入符号应采取的动作 7.2 LR(0)分析 例1 文法G[S]: (1) S → aAcBe (2) A → b (3) A → Ab (4) B → d 对输入串abbcde#的LR(0)分析过程 输入串abbcde#的分析过程 LR(0)分析的问题 对于一个文法,会有一些什么样的状态呢?这些状态又是如何确定的? LR分析表是如何得到的? 可归前缀与活前缀 文法G[S]: (1) S → aAcBe[1] (2) A → b[2] (3) A → Ab[3] (4) B → d[4] 活前缀(Viable Prefixes)的定义 活前缀: S’ =* ?A? =???是文法G中的一个规范推导,如果符号串γ是??的前缀,则称γ是G的一个活前缀。 其中,S’是对原文法拓广后的开始符号,即有: S’ - S 识别活前缀的有限自动机 LR方法中,并不是直接分析文法符号栈中的符号是否形成句柄,但是,我们可以把文法的终结符和非终结符都看成有穷自动机的输入符号,每次把一个符号进栈看成已识别过了该符号,同时状态进行转换,当识别到可归前缀时,相当于在栈中形成句柄,认为达到了识别句柄的终态。 即用自动机中的状态来刻画分析过程中的某一种情形。 如何构造识别活前缀的有限自动机 已经有了活前缀如何构造有限自动机? 活前缀及其可归前缀的一般计算方法 构造识别文法活前缀的DFA的三种方法 一、根据形式定义求出活前缀的正规表达式,然后由此正规表达式构造NFA再确定化为DFA(不实用,略) 二、求出文法的所有项目,按一定规则构造识别活前缀的NFA再确定化为DFA(了解) 三、使用闭包函数(CLOSURE)和转向函数(GOTO(I,X))构造文法G’的LR(0)的项目集规范族,再由转换函数建立状态之间的连接关系得到识别活前缀的DFA(掌握) 构造识别活前缀的有限自动机 例子 识别活前缀的有限自动机 例子 例1中abbcde#分析过程所对应的自动机 LR(0)项目集规范族 由文法的产生式直接构造识别活前缀和可归前缀的有限自动机 项目(item):在每个产生式的右部适当位置添加一个圆点构成项目 LR(0)中构造识别活前缀的NFA 项目圆点的左部表示分析过程的某个时刻用该产生式归约时句柄已识别的部分,圆点右部表

文档评论(0)

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

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

1亿VIP精品文档

相关文档