【编译原理笔记07】语法分析:SLR、LR(1)、LALR、二义性分析与错误处理

本文详细讲解了SLR、LR(1)和LALR分析法,包括它们的基本思想、分析表构造、冲突处理以及二义性文法的LR分析。SLR通过FOLLOW集减少LR(0)的冲突,但仍有局限;LR(1)引入前瞻符,提供更强的分析能力,但也可能导致状态过多;LALR通过合并同心项集,平衡了状态数和分析能力。同时,文章探讨了二义性文法的特点和错误处理策略,如恐慌模式和短语层次错误恢复。
摘要由CSDN通过智能技术生成

本次笔记内容:
4-12 SLR
4-13 LR1分析
4-14 LALR分析法
4-15 二义性文法的LR分析
4-16 LR分析中的错误处理

本节课幻灯片,见于我的 GitHub 仓库:第7讲 语法分析_4.pdf

上节课的内容中,LR(0)存在冲突。这节课首先提出SLR进行解决。SLR的改进很简单,但还存在冲突。因此又引出LR(1)。

但是,LR(1)的状态过多,于是引出LALR化简、合并其状态。

最后,介绍了二义性与错误处理。

SLR分析

上节课的例子中,我们认识到:LR(0)分析过程中存在冲突。而规定 FOLLOW 集,可以帮我们判断,在那些情况下,不进行归约。这也正是 SLR的基本思想。

基本思想

这里的 S 代表simple,因为其只需要一个 FOLLOW 集就可以化解冲突。但是对于某些冲突,需要更复杂的方法化解(后文会提到)。

SLR分析表

与 LR(0) 分析表进行对比:

  • 在 LR(0) 分析表中,每一个状态在遇到任何输入符号时,都采取归约动作,因此归约状态在这一行中每一项都是归约动作(如第2行、第9行);
  • 而在 SLR 分析表中,对于归约状态,只有遇到 FOLLOW 集中的元素,才采取归约动作。
例:SLR分析法构造

SLR 分析表构造算法


如上,SLR分析表与LR(0)分析表是类似的,唯一不同在于FOLLOW集的使用。

如果给定文法的SLR分析表中不存在有冲突的动作,那么该文法称为SLR文法

SLR分析中的冲突


如上图,产生了移入-归约冲突。

LR(1)分析法

SLR分析存在的问题:SLR只是简单地考察下一个输入符号b是否属于与归约项目A→α相关联的FOLLOW(A),但b∈FOLLOW(A)只是归约α的一个必要条件,而非充分条件

如上图,对于树中的 R ,在不同地方,其后继符是不同的,一个地方对应=,一个地方对应$

由此可见:在特定位置,A的后继符集合是FOLLOW(A)的子集。

因此,我们规定了新规则,如

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值