第5章语法-自底向上的语法导论.pptVIP

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
§5.4 LR(0)分析器 5.4.4 LR(0)分析表的构造 假设已经构造出LR(0)的项目集规范族:C={C0,C1,…,Cn},其中Ci为项目集的名字,对应状态为i,假设S→.δ是文法开始符号所在的规则,令包含项目S→.δ的项目集Ck对应的状态k为开始状态。 (1)若项目 ,且GO[Ci,a]=Cj,其中a为终结符号,置ACTION[i,a]=“把状态j和符号a移近栈”,记Sj; (2)若项目 ,则对于任何输入符号a,a为终结符或#,置ACTION[i,a]=“用产生式A→ α进行归约”,记为Rj; §5.4 LR(0)分析器 5.4.4 LR(0)分析表的构造 (3)若项目S→δ.∈Ci,置ACTION[i,#]=“接受”,记为“ACCEPT”。 (4)若GO[i,A]=Cj,A为非终结符,则置GOTO[i,A]=j。 (5)分析表中凡不能用(1) ~(4)填入信息的单元为空或均置为ERROR,表示有错。 §5.4 LR(0)分析器 5.4.4 LR(0)分析表的构造 (0)S→A (1)A→(A) (2)A→a S2 S3 1 ACCEPT S2 S3 4 R2 R2 R2 R2 R1 R1 R1 R1 S5 §5.4 LR(0)分析器 5.4.5 LR(0)分析器的工作过程 (1)若ACTION[S,a]=Sj,a为终结符,则把a移入符号栈,j入状态栈; (2)若ACTION[S,a]=Rj,a为终结符或#,则用第j个产生式归约,k为第j个产生式右部符号串长度,将符号栈、状态栈顶的k个元素出栈,将产生式左部符号入符号栈; (3)若ACTION[S,a]=“ACCEPT”,a为#,则为接受,表示分析成功。 (4)若GOTO[S,A]=j,A为非终结符号并且符号栈的栈顶,表示前一个动作是归约,A是归约后移入符号栈的非终结符,则将状态j移入状态栈; (5)若ACTION[S,a]=空白,则转入错误处理。 §5.4 LR(0)分析器 5.4.5 LR(0)分析器的工作过程 例5-9:分析输入符号串((a)) 步骤 状态栈 符号栈 输入符号串 ACTION GOTO 1 2 3 4 5 6 7 8 9 0 02 022 0223 0224 02245 024 0245 01 # #( #(( #((a #((A #((A) #(A #(A) #A ((a))# (a))# a))# ))# ))# )# )# # # S2 S2 S3 R2 S5 R1 S5 R1 ACCEPT 4 4 1 §5.4 LR(0)分析器 5.4.6 LR(0)文法 一个项目集包含不同类型的项目,但必须满足下面两个条件: (1)不能有移进项目和归约项目并存→移进-归约冲突 (2)不能有多个归约项目并存 →归约-归约冲突 如果一个文法的项目集规范族不存在具有“移进-归约冲突”或“归约-归约冲突”的项目集,那么该文法为LR(0)文法。 §5.5 SLR(1)分析器 练习: 求该文法的项目集规范族及转换函数 (0)S→E (1)E→E+T (2)E→T (3)T→T*F (4)T→F (5)F→(E) (6)F→i 状态 项目集 转换函数 2 E→T. T→T.*F R2 GO[2,*]=7 存在移进-归约冲突,不是LR(0)文法 §5.5 SLR(1)分析器 (0)S→E (1)E→E+T (2)E→T (3)T→T*F (4)T→F (5)F→(E) (6)F→i §5.5 SLR(1)分析器 5.5.1 SLR解决方法的思想 项目集{ } 存在移进-归约冲突和归约-归约冲突 若FOLLOW(B)、FOLLOW(A)和b互不相交,当状态为Si,输入符号为a(a为终结符或#)时,利用下列方法可解决冲突: (1)若a=b,则移进a; (2)若a∈FOLLOW(B),则用产生式 归约; (3)若a∈FOLLOW(C),则用产生式 归约; (4)其它报错。 通过向前查看一个输入符号来协助解决冲突,该文法就是SLR(1)文法。 §5.5 SLR(1)分析器 5.5.2 SLR(1)分析表的构造 假设G’项目集规范族:C={C0,C1,…,Cn},其中Ci为项目集的名字,对应状态为i,令包含项目S’→.s的项目集Ck对应的状态k为开始状态。 (1)若项目 ,且GO[Ci,a]=Cj,其中a为终结符号,置ACTION[i,a]=“把状态j和符号a移近栈”,记Sj; (2)若项目 ,则对a ∈ F

文档评论(0)

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

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

1亿VIP精品文档

相关文档