网站大量收购独家精品文档,联系QQ:2885784924

第四章节7-LR(1)文法.ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * 主要内容: LR(1)分析方法 Z ? E E ? (L,E) E ? S L ? L,E L ? E S ? id S ? (S) Z ? ?E E??(L,E) E??S S??id S? ?(S) 0 E?(?L,E) S?(?S) L??L,E L??E E??(L,E) E??S S??id S??(S) 1 E?S? S?(S?) 2 ( S ?1(S2, ) ) = {Shift, Reduce3} 即| ?1(S2,) ) | ≤ 1 不成立(Follow(E)={#,),,}) 非SLR(1)文法 LR(0)方法不依赖输入流,直接判定归约,容易出现冲突。 SLR(1)方法简单地把非终极符的follow集做为可归约的依据,并不精确。 一个非终极符在不同的位置上出现,它所允许的后继符是不同的,而SLR(1)没有加以区分。LR(1)针对不同产生式上的非终极符,分别定义其后继符集(展望符集Reducelookup),减少了移入/归约冲突。 任何SLR(1)都一定是LR(1)文法。 1、构造文法的LR(1)自动机 2、由LR(1)自动机构造LR(1)分析表(Action表和 Goto表) 3、根据当前状态和输入符号查分析表确定要执行的操作,进行相应的语法分析 LR(1)分析步骤 LR(1)分析方法 LR(1)方法研究的对象是二元组:(? , b),其中?是活前缀,而b是一个输入符号。我们称上述(?,b)为LR1前缀模式。 活前缀? 规范活前缀:若规范前缀?不含句柄或含一个句柄并且具有形式?=???(?是句柄),则称规范前缀?为规范活前缀(简称活前缀)。  (前缀中若有句柄,则句柄在前缀的最右端) 物理含义:在归约过程中,若符号栈中的内容为活前缀,则表示到目前为止,语法正确。可以继续进行移入或归约操作。 LR(1)分析方法 LR(1)方法研究的对象是二元组:(? , b),其中?是活前缀,而b是一个输入符号。我们称上述(?,b)为LR1前缀模式。 如果?是文法的归约活前缀,b是?的合法后继续符,则称(?,b)为LR1归约前缀模式。 归约活前缀? 移入活前缀:如果活前缀不中不包含简单短语(句柄),则称为移入型活前缀。  因为此时只能进行移入操作,不能进行归约操作。 归约活前缀:若活前缀?是含句柄的活前缀,即有?=???,且?是句柄,则称活前缀?为归约规范活前缀。 (即含有句柄的规范活前缀。是可以归约的) 不确定活前缀:如果一个活前缀既是移入型的又是归约型的,则称为不确定活前缀。 例: S ? abc S ?ab 则ab既是移入型活前缀,又是归约型活前缀。 LR(1)分析方法 LR(1)方法研究的对象是二元组:(? , b),其中?是活前缀,而b是一个输入符号。我们称上述(?,b)为LR1前缀模式。 如果?是文法的归约活前缀,b是?的合法后继续符,则称(?,b)为LR1归约前缀模式。 LR1归约前缀的派生定理 假设?0是拓广产生式的右部,#是输入流的结束符,则有: ( ?0[p], # )是LR1归约前缀模式。 设( ?A?[p], b )是LR1归约前缀模式,且A→?是q产生式,则(??[q] , a)也是LR1归约前缀模式,其中a?First(?b)。 派生定理的目的是要求得项目集合的闭包CLOSURE ( IS ) LR(1)项目:[A→???, a ]。LR(0)项目及一个VT?{#}的展望符(输入符)集合。 IS:LR(1)项目集 IS(X): (目的:产生下一个状态) IS(X) = {[A→?X??,a] |[A→??X?,a]?IS } CLOSURE ( IS ) = IS∪ {[B→??,b] |[A→??B?,a]? CLOSURE(IS), B→?是产生式 , b?First(?a)} 目的:产生派生项目 LRSM1的构造算法 初始项目集: ISS=CLOSURE({ [Z→ ?S,{ # } ]}) 若所有状态都处理完,则结束 选一未处理完状态IS,对所有语法符号 X?(VT?VN?{#}),求ISX,令 IS’ = CLOSURE(ISX),若IS’不为空: 若IS’为新状态,则增加IS IS’,把IS’加 入LRSM1中;否则为图中某个状态ISj,则在IS 和ISj之间增加一条转换边:IS ISj 转到步骤2 X X 非SLR(1)文法: Z → S S → L=

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档