如何判断一个文法是否为SLR(1)文法
发布网友
发布时间:2022-05-16 16:38
我来回答
共2个回答
热心网友
时间:2023-11-17 05:45
最有效的方法是画slr分析表,有移入-规约冲突,或者规约-规约冲突的就不是slr文法,没有冲突就是slr文法。简单的用follow集合是不能准确判断它是不是slr文法的
热心网友
时间:2023-11-17 05:45
是。
例如证明下列文法是ll(1)文法但不是slr(1)文法
s->aaab|bbba
a->ᵋ(空值)
b->ᵋ(空值)
(1)首先该文法无左递归存在,没有公共左因子.
其次:对于s→aaab|bbba
first(aaab)={a}
first(bbba)={b}
first(aaab)∩first(bbba)=φ
所以该文法是ll(1)文法.
(2)证明该文法不是slr的.
文法的lr(0)项目集规范族为:
i0={s’→.s
s→.aaab
s→.bbba
a→.
b→.}
i1={
s’→
s.
}
i2={
s→a.aab
}
i3={
s→b.bba
}
i4={
s→aa.ab
a→.
}
i5={
s→bb.ba
b→.
}
i6={
s→aaa.b
}
i7={
s→bbb.a
}
i8={
s→aaab.
}
i9={
s→bbba.
}
考察i0:
follow(a)={a,b}
follow(b)={a,b}
follow(a)∩follow(b)=
{a,b}
产生规约-规约冲突.
所以该文法不是slr(1)文法.