第5章自下而上语法方法总汇.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文档。上传文档
查看更多
2、 LR(0)分析器 例如,对于文法: 若 则 2、 LR(0)分析器 GO函数(状态转换函数) 假设I是一个项目集,X是文法G的一个文法符号,则定义状态转换函数GO(I, X)如下: GO(I, X)=CLOSURE(J) 其中 J={任何形如A→αX?β的项目| A→α?Xβ属于I} 例如,对于文法: 设 则 2、 LR(0)分析器 LR(0)项目集规范族的构造 通过函数CLOSURE和GO很容易构造一个文法的拓广文法的LR(0)项目集规范族C,步骤如下: Step1:初始化:令C=CLOSURE({S?→?S}); Step2:对C中每一个项目集I和文法中任意文法符号X应用状态转换函数GO(I, X),得到新的项目集J,若J非空且不在C中,则将其加入到C中; Step3:重复Step2直到C不再增大为止。 2、 LR(0)分析器 LR(0)项目集规范族的构造 为了能够有效地使用以上步骤计算LR(0)项目集规范族C,我们借助一个项目栈来存储构造过程中加入的每一个新的项目集,计算的每一步是先将栈顶项弹出,记为I,然后对文法中每个文法符号X,如果GO(I,X)非空且不属于C中,则将GO(I,X)加入到C中,并将其压入栈中,重复以上过程,直到栈空为止。形式化算法描述如下: 2、 LR(0)分析器 形式化算法描述 void ItemSets(G?){ //计算文法的项目集规范族C I=CLOSURE({S?→?S}); C={I}; //初始规范族C Push(I); //将项目集I压入栈中 while(!Empty(ItemStack)){ //只要栈不空就执行以下步骤 Pop(I); //将当前栈顶项目集弹出并置于I中 for(G中每个文法符号X){ J=GO(I,X); //计算GO函数 if(J非空且J不属于C中){ 将J加入到C中; Push(J);//将项目集J压入栈中 } } } } 2、 LR(0)分析器 LR(0)分析表的构造 “移进-归约”冲突和“归约-归约”冲突 若同时存在移进项目和归约项目,即有形如A→α?aβ和B→γ?的项目,则称文法G含有移进-归约冲突。此时,当面临输入符号a时,分析程序的控制器不能确定是把a移进符号栈还是把γ归约成B。 若同时存在一个以上的归约项目,即有形如A→ω?和B→γ?的项目,则称文法G含有归约-归约冲突。此时,不论面临什么样的输入符号,分析程序的控制器不能确定是把ω归约成A,还是把归γ约成B。 若一个文法G的拓广文法G?的识别可归前缀的DFA的每一个状态(项目集)不存在任何冲突,即不存在移进-归约冲突和归约-归约冲突,则称G是一个LR(0)文法。 2、 LR(0)分析器 LR(0)分析表的构造   假定C={I0,I1,…,In},由于我们已经习惯用数字表示状态,因此,令每个项目集Ik的下标k作为分析器的状态。特别地,令那个包含项目S?→?S的集合Ik的下标k为分析器的初态。分析表的ACTION子表和GOTO子表可按如下方法构造: 规则一:若项目A→α?aβ(a∈VT)属于Ik且GO(Ik,a)=Ij,则置ACTION[k,a]=sj,表示将(j,a)移进分析栈。 规则二:若项目A→α?属于Ik,且文法G?中产生式A→α的编号为j,则对任何终结符a(包括输入串结束符#),置ACTION[k,a]=rj,表示按文法的第j个产生式(A→α)进行归约。 规则三:若项目S?→S?属于Ik,则置ACTION[k,#]=acc,表示“接受”。 规则四:若GO(Ik,A)=Ij,A∈VN,则置GOTO[k,A]=j。 规则五:分析表中凡不能用规则1至4填入信息的空白格均置上“出错标志”。 2、 LR(0)分析器   由于假定LR(0)文法规范族的每个项目集不含任何冲突项目,因此按上述方法构造的分析表的每个入口都是唯一的(即不含多重定义)。我们称如此构造的分析表是一张LR(0)表。使用LR(0)表的分析器叫做一个LR(0)分析器。 【例5.12】 设文法G[S]为:   试构造文法G[S]的LR(0)分析表。 2、 LR(0)分析器 解:(1)拓广文法:将G[S]拓广为G[S?],并对各产生式进行编号: S?→S S→aA S→bB A→cA A→d B→dB B→e 2、 LR(0)分析器 (2)构造LR(0)项目集规

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档