LL LR SLR LALR 傻傻分不清

 

一:LR(0),SLR(1),规范LR(1),LALR(1)的关系


    首先LL(1)分析法是自上而下的分析法。LR(0),LR(1),SLR(1),LALR(1)是自下而上的分析法。
            自上而下:从开始符号出发,根据产生式规则推导给定的句子。用的是推导
            自下而上:从给定的句子规约到文法的开始符号。用的是归约

     1: SLR(1)与LR(0)的关系:

           SLR(1)与LR(0):简单的LR语法分析技术(即SLR(1)分析技术)的中心思想是根据文法构造出LR(0)自动机。

 

            LR(0):见到First集就移进,见到终态就归约

 

         SLR(1)见到First集就移进,见到终态先看Follow集,与Follow集对应的项目归约,其它报错。

 

  2: LR(1)与LR(0)的关系:

    规范LR(1)语法分析技术的中心思想是根据文法构造出LR(1)自动机 ,而规范LR(1)自动机构造方法和LR(0)自动机的构造方法相同,只是多增加了向前搜索符号。

  3:规范LR(1)与LALR(1)的关系:

    LALR(1)是对LR(1)项集族I中具有同心项的项集进行合并得到I',然后根据I’进行分析的方法。

 


二:LL(1),SLR(1),规范LR(1),LALR(1)的判别

 


 

      1:LL(1)判断规则

     判定规则: 龙书上有很明确的规则,龙书上这样说, 对形如 A->a|β 这样的文法,满 足

        ①FIRST(α)∩ FIRST (β ) =Φ
        ②若ε∈ FIRST( α), 要满足 FIRST(β) ∩FOLLOW(A)=Φ
        这两个条件的才是 LL(1) 文法。
        这里要注意一下条件②, α和 β 是可以互换的,意思就是只要其中有一个 FIRST 集包含ε,那么就要看另一个了。

   2:SLR(1)判断规则

    方法一:画出文法的LR(0)自动机,如果没有移进--规约冲突,即shift--reduce 冲突,则该文法是SLR(1)文法

   3:LALR(1)和LR(1)的判断规则

    画出文法的LR(1)自动机,如果没有同心项且没有状态冲突,则该文法是LALR(1)文法;如果有同心项且合并同心项有状态冲突,则是LR(1)文法

 原文地址链接:http://www.cnblogs.com/Alexkk/p/6033159.html

最后附上我们sysu编译原理作业的两个例子

一, 证明下列文法

S à Aa | bAc | dc | bda

A à d

LALR(1)文法但不是SLR(1)文法.

 

拓广文法

(0) SS  

(1) S Aa  

(2) S bAc  

(3) S dc

(4) S bda

(5) A d  

拓广文法的LR(1)项目集规范族及Go函数如下

 

 

一、 证明下列文法

S à Aa | bAc | Bc | bBa

A à d

B à d

LR(1)文法但不是LALR(1)文法.

 

拓广文法

(0) SS  

(1) S Aa  

(2) S bAc  

(3) S Bc   

(4) S bBa  

(5) A d  

(6) B

拓广文法的LR(1)项目集规范族及Go函数如下

posted @ 2016-11-09 20:13  YongJun0515  阅读(23841)  评论(0编辑  收藏  举报