编译原理各种文法的区别

1.LL(1)文法:
这个文法跟FIRST FOLLOW 集合绑在一起,有这两个集合那么一定是LL(1)文法的判别。
2.LR(0)文法与SLR(1)文法:
这个文法要用到项目集合来构造,比如我这个题目来判别。编译原理各种文法的区别_第1张图片
根据项目集的构建;
I0:
A’->.A
A->.aB
A->.
I1:
A’->A.
I2:
A->a.B
B->.Bb
B->.a
I3:
A->aB.
B->B.b
I4:
B->a.
I5:
B->Bb.

根据项目集,我们可以看出I0有移进归约冲突,但是follow(A)={#},与待移进的符号集合{a}没有交集。

I3也有移进归约冲突,但是follow(A)={#},与待移入的符号集合{b}没有交集,所以可以知道是SLR(1)文法。

SLR(1)文法是用来解决LR(0)文法的移进归约冲突与归约归约冲突的,上述的FOLLOW分析方法就是SLR(1)文法在LR(0)文法上的改进,所以可以判定为SLR(1)文法,如果不是SLR(1)文法,那么我们可以继续考虑LALR文法。

说起来很多人应该和我一样上课听讲不是很认真,括号中的数字代表向前先看几位来进行分析。
例如SLR(1)就是向前看一位来分析

你可能感兴趣的:(学习)