LL(k)文法
为什么需要FIrst和Follow,以及如何根据First与Follow生成预测分析表
首先生成First,再结合First生成Follow, 最后根据First与Follow生成预测分析表
http://blog.csdn.net/linraise/article/details/9237195
从左分析,从栈顶归约,
对于LR(0),由于分析中一遇到终态就归约,一遇到First集就移进,如果有一下状态I1,I1包含两个语法: F->Y·+ F->Y· 那LR(0)就无法确定到底是移进还是归约了。 这就是为什么我们要引入SLR解决reduce-shift conflict(尽管不能完全解决该问题).
如果不仅考虑First,而且把Follow集也考虑在内,就可以一定程度上解决reduce-shift conflict. 还是以上语法: F->Y·+B F->Y· 如果FOLLOW(F) = {a, b},那么当我们遇到a与b时,就可以选择归约F;当我们遇到+时,就可以选择移进操作。
SLR不能完全解决reduce-shift confict. 同样还是上面的语法: F->Y·+B F->Y· 如果 FOLLOW(F) = {a, b, +},那当我们遇到 + 符号时,就无法确定到底是选择移进操作得到F->Y+·B,还是归约F。 SLR不能完全解决reduce-shift conflict. 这就是为什么我们要选择LR(1) / LALR(1)了
https://parasol.tamu.edu/~rwerger/Courses/434/lec10.pdf
合并同心集
合并前
合并后
构造方法: 见中文第二版P.169下方[算法 4.56]
LR(0)不能解决移进-归约冲突(不知道该移进还是归约)
写出First、Follow,并得出LR(0)
根据中文版P.161画出SLR table.