第4章白底黑字LR0.ppt

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

4.5.2 LR(0)分析法 ⑵ 活前缀中只含有句柄的一部分符号,此时意味着形如 A→α1α2 规则的右部子串 α1已出现在栈顶,α2正期待着从余留的输入串中进行归约得到。 ⑶ 活前缀中全然不含有句柄的任何符号,此时意味着期望从余留输入串能看到由某规则 A→α 的右部 α 所推出的符号串。 4.5.2 LR(0)分析法 为了刻画在分析过程中, 文法的一个规则右部符号串已有多大一部分被识别,我们可在文法中每个规则右部适当位置上加一个圆点来表示。针对上述三种情况,标有圆点的规则分别为: A→α· A→ α1 · α2 A→·α 我们把文法G中右部标有圆点的规则称为G的一个LR(0)项目。 值得注意的是对空规则 A→ε,仅有LR(0)项目A→? 。 文法G的全部LR(0)项目是构造识别文法所有规范句型活前缀的DFA的基础。我们将会看到这种DFA的每一个状态和有穷个LR(0) 项目的集合相关联。 一个LR(0)项目指明了对文法规范句型活前缀的不同识别状态, 由于不同的LR(0)项目反映了在分析过程中栈顶的不同情况,因此,我们可以根据圆点位置和圆点后是终结符还是非终结符,将一个文法的全部LR(0)项目进行分类。 4.5.2 LR(0)分析法 直观上说, 4.5.2 LR(0)分析法 LR(0)项目分类如下: 归约项目 移进项目 待约项目 接受项目 4.5.2 LR(0)分析法 ① 归约项目,形如A→α?,其中α∈(VN∪VT)*,即圆点在最右端的项目,它表示一个规则的右部已分析完, 句柄已形成,应该按此规则进行归约。 ② 移进项目,形如A→α? aβ,其中α, β∈(VN∪VT)* ,即圆点后面为终结符的项目, 它表示期待从输入串中移进一个符号,以待形成句柄。 4.5.2 LR(0)分析法 ③ 待约项目,形如A→α? Bβ,其中α, β∈(VN∪VT) * , B ∈VN*,即圆点后面为非终结符的项目,它表示期待从余留的输入串中进行归约得到B,然后分析A的右部。 ④ 接受项目,形如S→S? ,其中S为文法的开始符号,即文法开始符号的归约项目。 S为左部的规则仅只有一个,它是归约项目的特殊情况,它表示整个句子已经分析完毕,可以接受。 4.5.2 LR(0)分析法 构造识别文法所有规范句型活前缀DFA的方法 : 在这个项目集中,所有的LR(0)项目识别的活前缀是相同的,我们可以利用闭包函数(CLOSURE)来求DFA一个状态的项目集。 对于构成识别文法规范句型活前缀DFA的每一个状态是由若干个LR(0)项目所组成的集合,称为LR(0)项目集 , 4.5.2 LR(0)分析法 为了使“接受”项目唯一,我们总对文法G进行拓广。假定文法G的开始符号为S,在文法G中引入一个新的开始符号S,并加进一个新的规则S →S,从而得到文法G的拓广文法G。 (1) 定义闭包函数 设I是拓广文法G的一个LR(0)项目集,定义和构造I的闭包CLOSURE(I)如下: 4.5.2 LR(0)分析法 I中的任何一个项目都属于 CLOSURE(I)。 (b) 若A→α? Bβ属于CLOSURE(I), 则每一形如 B →?γ的项目 也属于CLOSURE(I)。 (c) 重复(b)直到CLOSURE(I)项目不再增加为止。 4.5.2 LR(0)分析法 例如,对例1中的文法 令I={S→·S },则 即为初态的项目集I0 Closure(I) { S→·S, S→·A, S→·B, A→·aAb A→·c, B→

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档