LL(1)、SLR(1)、LR(1)、LALR(1)的分析方法?

转载自http://bbs.csdn.NET/topics/340142238

 自上而下与自下而上:

1.首先LL(1)分析法是自上而下的分析法。LR(0),LR(1),SLR(1),LALR(1)是自下而上的分析法。

2.自上而下?从开始符号出发,根据产生式规则推导给定的句子。
3.自下而上?从给定的句子规约到文法的开始符号。
4.自上而下就是一种试探过程,怎么试探?需要你写出它的FIRST()集与FOLLOW()集(不会写了自己查书上网搜)。写出这两个集合后根据LL(1)分析表构造规则画出LL(1)分析表。现在基本完成了大半,当计算机输入句子时,分析程序便会根据输入去和分析表进行匹配,如果每步都能够匹配成功则说明符合该语法规则,分析成功。FIRST()集?其实是终结符的集合,看该非终结符A能不能产生以它里面的某个符号开头的句子。(这也是自上而下分析法的思想)

5.自下而上就是把句子变成非终结符,在把非终结符变成非终结符,这样不断的进行如果能到根节点则成功。

判断LL(1)SLR(1)LR(1)LALR(1):

6.LL(1)就是向前只搜索1个符号,即与FIRST()匹配,如果FIRST为空则还要考虑FELLOW。

7.LR需要构造一张LR分析表,此表用于当面临输入字符时,将它移进,规约(即自下而上分析思想),接受还是出错。
8.LR(0)找出句柄前缀,构造分析表,然后根据输入符号进行规约。
9.SLR(1)使用LR(0)时若有冲突,不知道规约,移进,活移进哪一个,所以需要向前搜索,则只把有问题的地方向前搜索一次。
10.LR(1) 在每个项目中增加搜索符;举个列子如有A->α.Bβ,则还需将B的规则也加入。
11.LALR(1)就是假如两个产生式集相同则将它们合并为一个,几合并同心集。
12. 我认为LR(1),SLR(1),LALR(1)只是对LR(0)的一种更全面的分析与考虑,关键先把LR(0)搞懂。

posted on 2017-04-16 20:33  灬随遇而安灬  阅读(2926)  评论(0编辑  收藏  举报

导航