1. 程式人生 > >LL(1)文法 終結首符集 FIRST(α) FOLLOW(A) 預測分析表

LL(1)文法 終結首符集 FIRST(α) FOLLOW(A) 預測分析表

1、LL(1)文法的目的是為了:(1)、消除左遞迴    (2)、消除回溯、提左公因子

     一個文法G是LL(1)文法的條件:

    (1)不含左遞迴

    (2)文法中每個非終結符的各個候選式的FIRST集都不相交

       eg: A  ->  α1 | α2 | ......| αn            (α表示候選式,候選字串)

              則 FIRST(αi)∩ FIRST(αj)= ∅    (i ≠ j)

    (3)文法中每個非終結符A,如果有 FIRST( A ) 包含 ε ,則

              FIRST(A)∩ FOLLOW(A)= ∅

2、終結首符集 FIRST(α)

   參考書上定義,自己的理解:就是α所代表字串中的第一個字元

   方法:

   根據每個產生式的候選式,一 一找其第一個終結符即第一個字元

3、FOLLOW(A)

   參考書上定義,自己的理解:就是非終結符A後面對應字串的第一個字元

   方法:

   (1) 文法開始符號S,置#(終結符號)於FOLLOW(S)中

   (2) 若候選式中A後面有字串α,則將FIRST(α)置於FOLLOW(A)

   (3) 若候選式中A後面為 ε (空)或者沒有,則將 --> 左邊的非終結符的FOLLOW集放到A的FOLLOW集中

4、預測分析表

   對照實際分析表理解

   第一列為文法中所有的非終結符 

   第一行為文法中所有的終結符

   對照候選式,若候選式α的 FIRST(α)含有對應終結符,則再對應格子寫上該候選式

   若候選式為ε (空),則將對應非終結符A即  --> 左邊 的FOLLOW(A)裡的非終結符對應格子寫上候選式

   具體參照書上