构造SLR(1)分析表

构造SLR(1)分析表

先来个例子,下边的图片是已经把文法G[S]扩广了,就是简单的添加
(0)S`—>E 剩下的就是把其他的文法依次排序就行
在这里插入图片描述
第二步就是把文法所有的项目写出来(要知道什么是项目和项目的类别)
如果不知道什么叫项目可以简单的理解为,点的位置,仔细看图片中,点的位置是有变化的,而且是有规律的,点在最后是规约项目,这个要记住,
在这里插入图片描述
然后就是第三步,把能够识别活前缀的DFA先找到,要看到那个红框框里的是有冲突的,也就是说项目类型不能写一块。
在这里插入图片描述
第四步,就是用SLR(1)的构造原则,首先在这些项目里边我们要找那些点在最右边的就是那些我们所谓的归约项目
在这里插入图片描述
规约项目如下,那么这些归约项目我们在去填的时候就要找它的Follow集,
在这里插入图片描述
第五步把Follow集求出来
在这里插入图片描述
第六步就是接下来我们根据这个DFA去画它的这个分析表
所以我们第一个S0接收一 个i我们到达的是什么 5状态
在这里插入图片描述

然后接下来接受一个左括号可以到达4状态然后接收E转移到的状态是1状态
在这里插入图片描述

然后接收一个T到达的是2状态接下来我们可以看到接收F可以到达3状态
在这里插入图片描述

这都跟我们之前是一样的到了1状态以后大家看1状态首先接收一个+可以到达的是6状态
然后呢因为第一个S’-> E.这是我们说的特殊的
所以当它接收一个#就是我们说的接收状态(Acc)

在这里插入图片描述
然后再来看2状态大家看2状态接收一个+,2状态接收一个+是不是做移进呢
我们就要看当前所对应的Follow集Follow (E)有#有+有)那就意味着我要在对应的#+),这三列的位置来填它对应的归约,那就是要用第2条产生式进行归约所以我们在这三个位置填的是r2
在这里插入图片描述
然后接下来我们看状态2接收一个它就是什么移进了就可以转移到S7然后同样的对于3 ,3状态来说我们可以看到它的Follow集也是# + )
4状态它的Follow (F) 应该是# + )和
所以我们在这四个位置应该填的是归约r4用第四条产生式来进行归约
这里说的第几条产生式都是说的是最前面(0)~(6)对应得
最后的结果:如下
在这里插入图片描述