编译原理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  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章