最后我们来分析一下这个所谓的LR(0)分析算法...

图中第二个L应该是R, 然后所谓的0个前看符号我确实不太能够理解, 据说要和lr(1)比较了才知道, 接下来研究它的缺点(说实话感觉能分析的文法有限这不是ll(1)的缺点吗? 不说说lr类算法没有这类缺点吗? )

接下来就是具体的错误分析实例了...

据说根据左上角推导得出的分析表是这样的, 然后其实对于状态3, 不管接受x, y, $都能做归约(但实际上只有$, 其他都应该报错, 这样会导致多次循环分析导致错误定位)... 但是说实话不太理解为什么之前的表生成算法为什么会生成这张表, 感觉如果严格按照表生成算法的话, 三号状态对于x, y, $ 都应该是空的而不是r2(都不知道r2是怎么生成的...) 个人猜测是这样, 当算法检测到分析点(就是图中的黑点, 左边代表已经分析过的字符, 右边代表期待看到的字符)已经到达末尾, 此时不管期待看到什么字符都要先归约在分析, 所以一旦碰到这种情况, 所有的字符一律填归约, 但是算法里面也没有提到具体是不是这样, 只是猜想而已...

另外一个问题是冲突:

可以看状态3, 此时如果在状态3, 既可以移进, 又可以归约, 就出现了冲突...

为了解决这两问题, 这里提出一种lr改进算法叫做SLR :

 

posted on 2016-05-27 12:25  内脏坏了  阅读(159)  评论(0编辑  收藏  举报