1.什么叫LR(0)文法
假若一个文法G的拓广文法G'的活前缀识别自动机中的每个状态(项目集)不存在下述情况︰
(1)既含移进项目又含归约项目;
(2)含有多个归约项目;
则称G是一个LR(0)文法。
2.如何构造LR(0)分析表
(1)令每个项目集I的下标k作为分析器的状态,包含项目S'→·S的集合I的下标k为分析器的初态。
(2)构造LR(O)分析表的ACTION和GOTO子表
3.LR(0)分析表的ACTION和GOTO子表构造
4.例题分析
(1)状态0
对于状态0而言我们可以看到有通过终结符a到达状态2 ,因为a为终结符,到达的状态2这个操作应该填在ACTION表中,在相应位置填上s2,表示将2移进。同理状态0也可以通过b到达状态3,将s3填入对应位置。
我们接着分析状态0,还可以发现状态0可以通过E到达状态1,因为E为非终结符,此时做的一定是规约操作,对照推导式我们可以发现可以规约第一个推导式E->aA得到,故将1填到GOTO表的对应位置。
(2)状态1
状态1对照表格发现只有一个接受状态,所以在1这一行的#这一列填上acc。
(3)状态2
(4)状态3
(5)状态4
(6)状态5
状态6告诉你要规约,用的是第1的推导式E->aA做规约,所以不管是状态a,b,c,d,#,都对其做规约。
(7) 结果