第04章 文法与语法分析(下).pptVIP

  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文档。上传文档
查看更多
第04章 文法与语法分析(下)

第04章 文法与语法分析 主要内容: LR(1)分析方法 LALR(1)分析方法 进行语法分析的几种方法 语法错误处理 4.5.6 LR(1)方法 前两种的不足之处: 1)LR(0)方法:不依赖输入流,直接判定归约,容易出现冲突。 2)SLR(1)方法:简单的把非终极符的follow集做为可归约的依据,不区分相同符号的不同出现,故并不精确。 LR(1)基本思想:对非终极符的每个不同出现求其后继符集(展望符集Reducelookup),故减少了移入/归约冲突。 例:下列文法的部分LRSM如右图: Z ? E E ? (L,E) E ? S L ? L,E L ? E S ? id S ? (S) LR(1)分析中的相关定义 LR(1)归约活前缀:定义为三元组(β,p,ss)形式,其中β是活前缀,p是产生式号,ss是展望符集。 LR(1)归约活前缀定理:设 Z?S# 为增广产生式,则定理可描述如下: [1] (S,0,{#})是LR(1)归约活前缀; [2] 若(αAβ,p,ss)是LR(1)归约活前缀,A?π是Q产生式,First2(β,ss)=ss1,则(απ,Q,ss1)也是LR(1)归约活前缀。 LR(1)项目:定义为[A?α·β,ss],其中A?α·β是项目的心,而ss为展望符集。 LR(1)项目的产生途径: [1] 发射:[A→??X?,a] ? [A→?X??,a] [2] 扩展:[A→??B?,a] ? [B→??,b] 其中B→?是产生式 , b?First(?a)} 展望符的计算原理:设Z?S为增广产生式,#为结束符,?(A)为A的后继符,则: [1] ?(Z)={#} [2] 若?(A)=ss,A?αB?,则 ?(B)=First2(?,ss) 其中,当???时,First2(?,ss)=First(?)-{?} ∪ss;否则First2(?,ss)=First(?) shift函数:假设给定项目集IS,则: shift(IS)={[A→?X??,a]|[A→??X?,a]?IS} 它表示IS中“·”右移一位所得的项目集。 LR(1)项目集的闭包:假设IS是LR(1)项目集,则称下面close_lr(IS)为IS的闭包集: [1] IS?close_lr(IS); [2] 若[A→α?B?,ss]?close_lr(IS), B→??G, First2(β,ss)=ss1, 则[B→??,ss1]?close_lr(IS); goto函数:假设给定项目集IS,则: goto(IS,X)=close_lr(shift(project(IS,X))) 它表示IS状态的X输出边所指向状态的项目集闭包。 例:已知文法G[Z]: Z → S , S → L= R , S → R , L → aR , L → b , R → L 设:IS = { [Z??S ,#]} 则: close_lr ( IS ) ={[Z??S ,#] ,[S??L=R,#] , [S??R ,#] ,[L??aR , =] , [L??b ,=] ,[R??L ,#] } LR(1)状态机的构造 [1]初始化:ss0=close({[Z→?S#,?]}); AllStateSet={ss0}; UnHandledStateSet={ss0}; [2]判断结束:若UnHandledStateSet空,则结束,否则转[3]; [3]从UnHandledStateSet选择一个状态ss,并做对每个符号a 做下面动作: 1) 求ss1 = goto(ss,a),若ss1空,则TT[ss,a]=空; 2) 否则,检查在AllStateSet中有无ss1; ① 若无,则把ss1追加到UnHandledStateSet和 AllStateSet中,并构造ss?(a)ss1; ② 否则,构造ss?(a)ss1; [4]从UnHandledStateSet中删除状态ss,并转向步骤[2]。 LR(1)分析表的构造 Action表 Action(S,a)= Shift j ....当S有到Sj的a输出

文档评论(0)

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

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

1亿VIP精品文档

相关文档