构造预测分析表算法
对于文法G的每个产生式A -> α ,进行如下处理:
1. 对于FIRST(α)中的每个终结符号a,将A -> α加入到M[A , a]中。
2. 如果 ε 在FIRST(α) 中,那么对于FOLLOW(A)中的每个终结符号b,将A -> α加入到M[A , b]中。如果 ε 在FIRST(α) 中,且$在FOLLOW(A)中,也将A -> α加入到M[A , $]中。
在完成上面的操作之后,如果没有M[A , a]中没有产生式,那么将M[A , a]设置为error(我们通常采用一个空条目表示)
举个小栗子
文法G[E]:
1. E -> TE’
2. E’-> +E| ε
3. T -> FT’
4. T’-> T| ε
5. F -> PF’
6. F’ -> *F’| ε
7. P -> (E) | a | b | ∩
证明该文法是LL(1)文法
(1) FIRST集合(这里只求非终结符号的FIRST集合)
FIRST(E) = { ( , a , b , ∩ }
FIRST(T) = { ( , a , b , ∩ }
FIRST(F) = { ( , a , b , ∩ };
FIRST(P) = { ( , a , b , ∩ };
FIRST(E’) = { + , ε };
FIRST(T’) = { ( , a , b , ∩ , ε };
FIRST(F’) = { * , ε };
(2) FOLLOW集合</