- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 语法分析378.ppt
SLR的原理:可行前缀(2) 如果我们知道A?β1 . β2对αβ1有效, 当β2不等于空,表示句柄尚未出现在栈中,应该移入或者等待归约; 如果β2等于空,表示句柄出现在栈中,应该归约。 如果某个时刻存在两个有效项要求执行不同的动作,那么就应该设法解决冲突。 冲突实际上表示可行前缀可能是两个最右句型的前缀,第一个包含了句柄,而另一个尚未包含句型 E+T+id E+T*id SLR解决冲突的思想:假如要按照A?β进行归约,那么得到的新句型中A后面跟随下一个输入符号。因此只有当下一个输入在FOLLOW(A)中时才可以归约。 也可能都认为包含句柄,但是规则不一样 * fhfh SLR的原理:可行前缀(3) 如果在文法G的LR(0)自动机中,从初始状态出发,沿着标号为γ的路径到达一个状态,那么这个状态对应的项集就是γ的有效项集。 回顾确定分析动作的方法,就可以知道我们实际上是按照有效项来确定的。 为了避免冲突,归约时要求下一个输入符号在FOLLOW(A)中。 * fhfh 活前缀/有效项的例子 可行前缀E+T* 对应的LR(0)项 T?T*.F F?.(E) F?.id 对应的最右推导 E’?E?E+T?E+T*F E’?E?E+T?E+T*F?E+T*(E) E’?E?E+T?E+T*F?E+T*id * fhfh SLR语法分析器的弱点(1) SLR技术解决冲突的方法: 项集中包含[A?α.]时,按照A?α进行归约的条件是下一个输入符号a可以在某个句型中跟在A之后。 如果对于a还有其它的移入/归约操作,则出现冲突。 假设此时栈中的符号串为βα, 如果βAa不可能是某个最右句型的前缀,那么即使a在某个句型中跟在A之后,仍然不应该按照A?α归约。 进行归约的条件更加严格可以降低冲突的可能性 * fhfh SLR语法分析器的弱点(2) [A?α.]出现在项集中的条件: 首先[A?. α]出现在某个项集中,然后逐步读入/归约到α中的符号,点不断后移,到达末端。 而[A?. α]出现的条件是B?β.Aγ出现在项中 期望首先按照A?α归约,然后将B?β.Aγ中的点后移到A之后。 显然,在按照A?α归约时要求下一个输入符号是γ的第一个符号。 但是从LR(0)项集中不能确定这个信息。 * fhfh 更强大的LR语法分析器 规范LR方法(或直接称LR方法)添加项[A?. α]时,把期望的向前看符号也加入项中。 这个做法可以充分利用向前看符号,但是状态很多。 向前看LR(LALR方法) 基于LR(0)项集族。但是每个LR(0)项都带有向前看符号。 分析能力强于SLR方法,且分析表和SLR分析表一样大。 LALR已经可以处理大部分的程序设计语言。 * fhfh 归约分析过程的例子 * fhfh 为什么句柄总是在栈顶?(1) 为什么每次归约得到的新句型的句柄仍不在栈顶? 考虑最右推导的两个连续步骤的两种情况 A被替换为βBy,然后产生式体中的最右非终结符号B被替换为γ。(归约之后句柄为βBy) A首先被展开,产生式体中只包含终结符号;下一个最右非终结符号B位于y左侧。 y是终结符号串 * fhfh 移入-归约分析中的冲突 对于有些不能使用移入-归约分析的文法,不管用什么样的移入-归约分析器都会到达这样的格局 即使知道了栈中所有内容、以及下面k个输入符号,人们仍然无法知道是否该进行归约,或者不知道按照什么产生式进行归约; 形式化地表达:设栈中符号串是αβ,接下来的k个符号是x,产生移动/归约冲突的原因是存在y和y’使得aβxy是最右句型且β是句柄,而aβxy’也是最右句型,但是句柄还在右边。 * fhfh 归约/归约冲突的例子 输入为id ( id , id ) 冲突时的格局: 栈:…id ( id 输入:, id ) … 某个语言中,多维数组的表示方法。 * fhfh LR语法分析技术 LR(k)的语法分析概念 L表示最左扫描,R表示反向构造出最右推导; k表示最多向前看k个符号; 当k的数量增大时,相应的语法分析器的规模急剧增大; K=2时,程序设计语言的语法分析器的规模通常非常庞大; 当k=0、1时已经可以解决很多语法分析问题,因此具有实践意义。 因此,我们只考虑k=1的情况。 * fhfh LR语法分析器的优点 由表格驱动;虽然手工构造表格工作量大,但表格可以自动生成; 对于几乎所有的程序设计语言,只要写出上下文无关文法,就能够构造出识别该构造的LR语法分析器。 最通用的无回溯移入-归约分析技术,且和其它技术一样高效; 可以尽早检测到错误。 能分析的文法集合是LL(k)文法的超集 * fhfh LR(0)项 文法的一个产生式加上在其产生式体中某处的一个点。 A?.XYZ,A?X.YZ,A?XY.Z,A?XYZ. 注意:A?ε只对
您可能关注的文档
最近下载
- 俄国构成主义设计运动报告.ppt VIP
- 2025南方电网保山供电局项目制用工招聘(3人)笔试参考题库附答案解析.docx VIP
- 2025年广东省中学生天文知识竞赛试题(及答案).docx VIP
- 电镀基础知识100问.pdf VIP
- 党课:9.3纪念中国人民抗日战争暨世界反法西斯战争胜利80周年阅兵PPT课件.pptx VIP
- 高中数学--等差数列知识点归纳和习题检测.doc VIP
- 云南省2025年中考英语真题含答案.pptx VIP
- SW硅墨烯免拆模外墙保温系统工程作业指导书.docx VIP
- 2025-2026学年粤教花城版(2024)初中音乐七年级上册教学计划及进度表.docx
- 2025杭州电力设备制造有限公司招聘70人(第二批)笔试备考试题及答案解析.docx VIP
文档评论(0)