- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 表5.15 LR(1)分析表 状态 ACTION GOTO i = + * # S E T 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 S3 ? ? ? S8 S9 ? ? ? ? ? S12 ? S8 ? S16 ? S4 R3 R5 ? ? ? ? ? R5 R4 ? R6 ? S5 R3 R5 ? ? S13 R3 R5 R5 R4 ? R6 R6 ? ? S11 R5 ? ? ? S15 R5 R5 S11 ? R6 R6 ? ? ? R2 ? ? R1 R3 R5 ? ? ? ? ? R4 ? R6 ACCEPT 17 1 ? ? ? 6 2 ? ? ? 7 10 ? ? ? ? ? ? ? 14 * 例5.14 利用表5.14列出的LR(1)分析表,对符号串i=i*i+i分析 步骤 栈内容 符号栈 输入串 动作 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 03 02 01 014 0148 0147 0147150147 0146 014613 01461380146 017 # #i #T #E #E= #E=i #E=T #E=T* #E=T*i #E=T #E=E #E=E+ # E=E+i #E=E+T #E=E #S i=i*i+i# =i*i+i# =i*i+i# =i*i+i# i*i+i# *i+i# *i+i# i+i# +i# +i# +i# i# # # # # S3 R5 R3 S4 S8 R5 S15 S16 R6 R3 S13 S8 R5 R4 R1 ACCEPT * 5.7 LALR(1)分析器 LALR(1):对LR(1)项目集中同核项目合并 对于同核项目集的合并,有下面几个问题需要说明: 合并后的项目集的核保持不变,只是超前符号集为各同核项目集的超前符号集的并集。 原同核项集之间的GO转换函数也要合并。 * 小结 (1)四种LR类文法之间的关系 LR(0) ? SLR(1) ? LALR(1) ? LR(1) (2)LR(0)、SLR(1)、LR(1)、LALR(1)分析表比较 LR(0):局限性大,但其构造方法是其他构造方法的基础; SLR:虽然不是对所有文法都存在,但这种分析表较易实现又极有使用价值; LR:分析能力最强,能适用于一大类文法,但是,实现代价过高(表过大); LALR:能力介于SLR和LR之间,实现效率较高,最适用。 * 语法分析小结 语法分析方法 自顶向下分析法 递归下降分析法 LL(1)分析法 自底向上分析法 算符优先分析法 LR分析法 LR(0)分析法 SLR分析法 LR(1)分析法 LALR(1)分析法 * (一) 自顶向下分析 存在问题 左递归问题 局部二义性问题 消除左递归的方法 改写文法 LL(1)文法的判别方法 * 两种常用方法 (1)递归子程序法 (2)LL(1)分析法 LL(1)分析器的逻辑结构及工作过程 LL(1)分析表的构造方法 * (二) 自底向上分析 LR分析法: 归约“句柄” LL分析器与LR分析器比较: LL分析器 LR分析器 * 小结 有关概念:句柄、活前缀、可归前缀、项目 有关运算:FIRST集合、FOLLOW集合,项目集闭包运算closure、项目集状态转换函数GO 重点掌握并能灵活运用的算法 消除左递归的方法 通过构造FIRST集合、FOLLOW集合判定LL(1)文法,构造LL(1)分析表,使用LL(1)分析法分析语法成份 构造LR(0)、SLR分析表,判定LR(0)、SLR文法,使用LR分析法分析语法成份 * 作业 第5章 习题1~3 * 4、识别活前缀的有穷自动机构造算法 给定一文法G,该文法的开始符号为S。 C={ C0,C1,…,Cn}, 其中C0是开始项目集,C称为LR(0)项目集规范族。 构造DFA的算法: C={ closure({S’→·S}) }; do{ for( C中的每个项目集I和每个符号X ) if( GO(I,X)非空,且不在C中 ) 把GO(I,X)加入C中; }while( C增大 ) return C; * 5.4.4 LR(0)分析表的构造 1) 若项目A→α·aβ∈Ci且GO[i,a]= Cj,其中a为终结符,置ACTION[i,a]=“把状态j和符号a移进栈”,简记为“Sj”; 2) 若项目A→α·∈Ci,
原创力文档


文档评论(0)