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 |