LL(1)文法定义及判别

LL(1) 文法的含义
第一个 L—— 从左到右扫描输入串
第二个 L—— 分析过程用最左推导
(1)—— 表明只需向前看 1 个输入符号便可以决定选哪 个产生式进行推导(类似地, LL(k) 文法则需要向前 k 个输入符号才可以确定选用哪个产生式)
一个上下文无关文法为 LL(1) 文法的 充分必要条件 ,对每个非终结符 A 的两个不同产生式 A→α与 A→β ,满足SELECT(A→α)∩SELECT(A→β)=Φ(关于SELECT集合我已经讲述了 FIRST集 FOLLOW集和SELECT集_用编程写诗的博客-CSDN博客
我们在判断一个文法是不是LL(1)文法时最重要的是求出SLECT集合注意在这里有个问题是必须保证每个非终结符A的 任何两个不同的产生式 他们的SELECT集合的交集是Φ
例子:一个非终结符的产生式SELECT集合有三个分别为A B C 需要A∩B=Φ A∩C=Φ B∩C=Φ
而不是A∩B∩C=Φ这个要注意!!!
例题:判断是不是LL(1)文法
G[S]:
S→AB|bC
A→b|ε
B→aD|ε
C→AD|b
D→aS|c
SELECT(S→AB)=(FIRST(AB) -{ε})∪FOLLOW(S)={ b,a,# }
SELECT(S→bC) =FIRST( bC) ={ b }
SELECT(A→ε) =(FIRST(ε) -{ε})∪FOLLOW(A)={ a,c,# }
SELECT(A→b) =FIRST(b) ={ b }
SELECT( B→aD) =FIRST( aD) ={ a }
SELECT(B→ε) =(FIRST(ε) -{ε})∪FOLLOW(B)={ # }
SELECT(C→AD) =FIRST(AD) ={ b,a,c }
SELECT(C→b) =FIRST(b) ={ b }
SELECT(D→aS) =FIRST( aS) ={ a }
SELECT(D→c) =FIRST(c) ={ c }
利用定义我们发现这个不是一个LL(1)文法
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

用编程写诗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值