第五章构造LR(0)活前缀状态机LRSM的算法.pptVIP

第五章构造LR(0)活前缀状态机LRSM的算法.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(0)活前缀状态机LRSM的算法 Step1.构造初始状态IS0:IS0=CLOSURE({Z→?S}),并给IS0标上NO。 Step2.从已构造的LRSM部分图选择被标为NO的任一状态IS,删除NO, 对每个符号X?VT?VN,做下面动作: 1) 令ISj = CLOSURE( IS(X)) 。 2) 若ISj非空: ①如果在LRSM部分图中已有ISj项目集, 则在IS和ISj之间画有向X边:IS ISj 。 ②如果在LRSM部分图中没有ISj项目集, 则将ISj作为LRSM的一个新的状态节点,并给ISj标上NO, 同在IS和ISj之间画有向X边: IS ISj 。 重复Step2 ,直至没有被标记为NO的状态结点为止。 LRSM给出了所有的可归活前缀 LRSM中的每个状态将对应一个饱和项目集: (1)其中一部分是由先驱状态分出来 (称为基本项目); (2)一部分则是由基本项目扩展出来的 (称为扩展项目或派生项目)。派生部 分项目的特点是其中的“?”出现在产 生式右部的最左侧。 LR(0)分析表 Action矩阵:行代表状态,列代表输入符,而矩阵元素则表示相应的分析动作:Shift / Reduce / Accept / Error GoTo矩阵:行代表状态,列则代表非终极符,而矩阵元素则表示归约后的转向状态。 LR(0)分析表的构造 假设ISk为LR(0)项目集,则: 若A???a??ISk,且GO(ISk, a)= ISi,a?VT,则action(ISk,a)=Si,表示把状态ISi和展望符a入栈。 若A????ISk,则对任意a?VT?{#},令action(ISk, a)=Rj,其中产生式A??的编号为j,表示用编号为j的产生式进行归约。 若Z????ISk,且Z为拓广产生式的左部非终极符,则action(ISk, #)=Accept。 若GO(ISk, A)=ISi,A?VN,则goto(ISk, A)=i。 其它情形,则Error(n),表示出错标志,也可不填。 LR(0)驱动程序 首先置状态栈、符号栈和输入流的开始格局为: (S1, #, a1a2…an#) 则: 若当前格局为: (S1S2…Sn, #X1X2…Xn, aiai+1…an#), 且action(Sn, ai)=Sj,ai?VT,则ai入符号栈,第j个状态Sj入状态栈。即移入后的格局变为: (S1S2…Sn Sj, #X1X2…Xnai, ai+1…an#) LR(0)驱动程序(续1) 若当前格局为: (S1S2…Sn, #X1X2…Xn, aiai+1…an#) 且action(ISn, a)=Rj,a?VT?{#},则按照第j个产生式进行归约,符号栈和状态栈相应元素退栈,归约后的文法符号和S入栈。假设第j个产生式为A??,k=|?| (?=Xn-k+1…Xn),则归约后的格局变为: (S1S2…Sn-kS, #X1X2…Xn-kA, aiai+1…an#) 其中S=goto(Sn-k, A)。 LR(0)驱动程序(续2) 若状态栈的栈顶状态为Si,输入流当前值为#,且action(Si, #)=Accept,则分析成功。 若状态栈的栈顶状态为Si,输入流当前值为a,且action(Si, a)=Error或空,则转向出错处理程序。 LR分析模型 分析表 例3:构造LR(0)状态机 S ? E $[1] E ? E + T[2] E ? T[3] T ? id[4] T? ( E ) [5] LR(0)分析实例 分析: i+i$ LR(0)文法 形如A→??[P]的项目称为归约型项目 形如A→???[P]的项目称为移入型项目 若LRSM0中存在一个状态(项目集)既包含移入型项目又包含归约型项目,则说有移入-归约冲突;如果同时存在两个或两个以上归约型项目,则说有归约-归约冲突。 若LRSM0中任何状态都不存在冲突,则称该文法为LR(0)文法。 * * 5.3 LR分析法 5.3.2 LR(0)分析方法 x x 例1:构造下列文法的LR(0)状态机。 G[S]: S

文档评论(0)

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

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

1亿VIP精品文档

相关文档