編譯原理LL(1)預測分析表的構造

LL(1)預測分析表的構造算法

對文法G的每個產生式A->α 執行如下步驟:
 
 
(1)對每個a∈First(α),把 A->α 加入M[A,a]
 
 
(2)若 ε∈First(α),則對任何b∈Follow(A) ,把 A-> ε加
 
 
   至M[A,b]中
 
簡單理解就是
對於每一個產生式 A->a | b | c...... 求出a , b, c.....所有的first集,將其first集中對應的每一個元素加入到表格中,橫座標是產生式的非終結符,縱座標是first集元素 即 M[A,a]
如對於以下文法:
 
S -> AaS | BbS | d
A -> a
B -> ε | c
 
對於第一個產生式 S -> AaS | BbS | d
FIRST(AaS) = a 所以將產生式 S -> AaS 加入到 M[S,a]中
預測表的構造,橫座標是所有的非終結符,縱座標是所有的終結符
  a b c d
S S -> AaS      
A        
B        

FIRST(BbS) = { b, c } 所以講產生式S - > BbS加入M[S, b]  M[S, c]中

  a b c d
S S -> AaS S - > BbS S - > BbS  
A        
B        

 

FIRST(d) = { d } 將產生式 S -> d 加入到 M[S,d]中

  a b c d
S S -> AaS S - > BbS S - > BbS S -> d
A        
B        

 

FIRST(a) = { a } 將其產生式 A -> a加入

  a b c d
S S -> AaS S - > BbS S - > BbS S -> d
A A -> a      
B        

 

FIRST(c) = c 將產生式 B -> c 加入

  a b c d
S S -> AaS S - > BbS S - > BbS S -> d
A A -> a      
B     B -> c  

對於產生式 B -> ε 計算FOLLOW(B)中的所有元素將其加入,計算可得 FOLLOW(B) = { b },所以講產生式加入到M[B,b],計算得出的預測分析表如下

 

  a b c d
S S -> AaS S - > BbS S - > BbS S -> d
A A -> a      
B   B -> ε B -> c  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章