编译原理 第七章答题.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 LR分析法;*;*;*; LR分析法是1965年由Knuth提出的一种自底向上分析方法,它的适用范围很广,很受计算机理论界的重视。; LR(K)表示“从左至右,每步向前(右)查看K个输入符号”。K=0表示不需要向右查看输入符号;LR分析法的优点: ① 对文法限制少,适用范围广。 ② 分析速度快 ③ 能准确及时地报错; 本章主要介绍LR分析的基本思想,及当K≤1时,LR分析器的基本构造原理和方法。着重介绍LR(0)、SLR(1)、LALR(1)、LR(1)四种分析器的构造方法。;7.1 LR分析概述;二 LR分析器工作过程; SP:栈指针 S[i]:状态栈 X[i]:文法符号栈 ACTION表和GOTO表分别为动作表和状态转换表。 ;GOTO[Si,X]=Sj表示栈顶状态为Si遇到当前文法符号为X时应转向状态Sj。;(2) 归约:当栈顶形成句柄为β时,把β归约为相应的非终结符A(A→β为文法中的产生式)。设β的长度为r(即 |β| =r),则从状态栈和文法符号栈中自顶向下去掉r个符号(即栈指针SP-r),把A移入文法符号栈,Sj=GOTO[Si,A]移进状态栈,Si为修改指针后的栈顶状态。;(3)接受acc:文法符号栈中只有开始符S′,输入串只 有#,则为分析成功。; LR分析器的关键部分是分析表的构造,下面将针对每种不同的LR分析器详细介绍其构造思想及方法。; 拓广文法:对原文法G[S]增加一产生式S′→S,S′只在左部出现。 对文法进行拓广的目的:为了对某些右部含有开始符的文法,在归约过程中能分清是否已归约到文法的最初开始符,还是在文法右部出现的开始符。拓广文法的开始符S′只在左部出现,这样确保不会混淆。; 可归前缀:如果有S′=〉??,?为终结符串 (或空),?含有句柄,且句柄在?的后端,称?为可归前缀。;定义7.1 若S′=〉αAω = 〉αβω是文法G中的一个规范推导( β 为句柄),如果符号串γ是αβ的前缀,则称γ 是G的一个活前缀,γ 的右端不超过句柄的末端。;例如:G[S]:(1) S →aAcBe (2) A →b (3) A →Ab (4) B → d ;由以上分析我们很容易理解,在LR分析过程中,实际上是把αβ的前缀列出放在符号栈中,一旦在栈中出现αβ(可归前缀),即句柄已经形成,则用产生式A→β进行归约。(参考P125-表7.2) ;7.2.2 识别活前缀的有限自动机(略) 7.2.3 活前缀及其可归前缀的一般计算方法(略) 7.2.4 LR(0)项目集规范族的构造 ; 例如:S→aAc对应有4个项目: (右部长度3加1) [0] S→?aAc [1] S→a ?Ac [2] S→aA ?c [3] S→aAc ? ; 每个项目的含义与圆点的位置有关,概括地说,圆点的左部表示分析过程的某时刻用该产生式归约时句柄已识别的部分,圆点的右部表示待识别部分。 ;项目 S→ ?aAc : 希望用S的右部归约,当前输入串中符号应为a 项目S→a ?Ac : 已与第一个符号a匹配,需分析A的右部 项目S→aA?c : A的右部已分析完归约成A,希望输入串中符号为c 项目S→aAc ? : S的右部分析完毕,句柄已形成,可以进行归约。 ;根据圆点所在位置和圆点后是终结符还是非终结符,把项目分为以下几种: ;归约项目:圆点在最右部的项目,如A→α?,表明一个产生式的右部已分析完,句柄已形成,可以归约。 ;(3) LR(0)项目集规范族的构造 ; 定义和构造项目集 I 的闭包函数 CLOSURE(I) ; 定义转换函数GO(I,X)如下 :;圆点不在产生式右部最左边的项目称为核(拓广文法S′→ ? S除外) GO(I,X)转换函数得到的J为转向后状态所含项目集的核。 ;使用CLOSURE和GO(I,X)构造文法G′的LR(0)项目集规范族: ;例如:G[S]: S′→S S→aAc A→Abb A → b;c;LR(0)项目集规范族的项目分为四种:移进项目、归约项目、待约项目和接受项目。 ;移进项目和归约项目同时存在 形如 称移进—归约冲突。 ; LR(0)文法:一个文法的LR(0)项目集规范族不存在移进—归约或归约—归约冲突时,这个文法为LR(0)文法。 ;LR(0)分析表可用一个二维数组表示,行

文档评论(0)

花仙子 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档