SLR(1)分析法

SLR(1)分析法是一种解决LR(0)文法中冲突的简单确定性分析方法,通过向前查看一个输入符号来确定分析动作。当遇到冲突时,根据FOLLOW集合判断移进或规约。SLR(1)分析表的构造过程与LR(0)类似,但针对规约项目会考虑FOLLOW集合,以避免冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


LR(0)文法要求文法的每一个LR(0)项目都不含有冲突的项目,这个条件比较苛刻。对于大多数程序设计语言来说,一般都不能满足LR(0)文法的条件。

例如:

在这里插入图片描述

不难看出在状态 I 2 I_2 I2中既存在规约项目,又存在移进项目,因而这个文法不是LR(0)文法。

为了对语言句子进行确定性的分析,需要解决冲突。可以采用对含有冲突的项目集向前查看一个输入符号的办法来解决冲突,这种分析法称为简单的LR分析法,即SLR(1)分析法。

分析构造LR(0)分析表的方法,易看出是分析表出现多重定义的原因在于其中的规则2。即对于每一个项目集 I k I_k Ik中的规约项目 A → α ⋅ A\rightarrow{\alpha·} Aα,不管当前输入符号是什么,都将ACTION表中第k行的各个元素均置为 r j r_j rj

因此当一个LR(0)项目集闺范族中存在一个含有冲突的项目集,例如:

I k = { X → δ ⋅ b B , A → α ⋅ , B → r ⋅ } I_k = \{X \rightarrow{\delta·bB,A\rightarrow{\alpha·},B\rightarrow{r·}}\}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值