第五章自底向上的语法分析|LR(1)项目集规范族的构造,LR(1)分析表的构造

为什么需要LR(1)分析?


什么是LR(1)分析?


 LR(1)分析表的构造

① 写出文法G[S]的拓广文法G'[S]。

拓广文法G'[S]为:

S' ---> S

S ---> L=R

S ---> R

L ---> *R

L ---> i

R ---> L

② 构造LR(1)项目集规范族。

如果拓广文法G'[S]中,有产生式直接能推导到ε,则该产生式在项目集中直接推导 点。

例如:G'[S]中 A ---> ε  ,则 Ⅰ0中对应 A ---> . 

只有当两个项目的产生式全部相同,与之对应的向前搜索符也相同时,这两个项目才是同一个项目。

产生式相同的两个项目,只要它们的向前搜索符不同,就是完全不同的两个项目!

③ 如何添加向前搜索符? 

1. 对于拓广文法的最开始产生式 S' ---> S,加上向前搜索符 “#”。得到 S' ---> S,#

2. 对于其他产生式,先看左,再看右。

即:先看产生式的左部,假定为S。再看哪些产生式右部中,点的右侧刚好就是S

如果存在产生式 A ---> α.Sβ,a (β不为空),则 FIRST(β)为 S 的 向前搜索符。

如果存在产生式 A ---> α.Sβ,a (β为空),即 A ---> α.S,a 则 a 为 S 的 向前搜索符。

3. 对于新项目,除了通过识别得到的新产生式的向前搜索符照抄以外,其余的都要按照规则重新计算。


对于第一个产生式,直接加#号,S' ---> .S,# 。

接着,对于产生式 S ---> .L=R , 产生式左部为S,我们找产生式右部为 .Sβ的。

发现有S' ---> .S,# ,符合 存在产生式 A ---> α.Sβ,a (β为空),即 A ---> α.S,a 则 a 为 S 的 向前搜索符。  因此,我们直接把 产生式S' ---> .S的向前搜索符 # 加入到 S的向前搜索符中。

同样的,对于L,我们找到 R--->.L 和 S--->.L=R两个式子,因此 L的向前搜索符 等于 R的向前搜索符 + “=” , 即 { #,= } ,写作 #/= 。

对于R,找到 S ---> .R,# 所以R的向前搜索符就是 S的向前搜索符, 即 # 。

项目集Ⅰ0构造完毕。

同理,推导其余的项目集。

④ 根据LR(1)项目集规范族,构建LR(1)分析表。

其他都一样,只有在规约的时候,和其他分析方法不同。

只有对应产生式的向前搜索符中存在该非终结符,该列才能被规约。


LALR(1)分析法


LR分析的错误处理


本章小结

 


对应内容 

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

访问宇宙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值