预测分析表【LL(1)分析表】的构造
算法:
对于G中的每一个产生式, A -> α ,执行以下2步:
1.for ∀ a ∈ FIRST(α), 将 A -> α 填入 M [A, a ];
1. if(ε ∈ FIRST(α))
∀ a ∈ FOLLOW (A) , 将 A -> ε 填入 M [A, a ];
PS: 这里的 a 包括 #
例子:
文法:
E -> TE'
E' -> +TE' | ε
T -> FT'
T' -> *FT' | ε
F -> (E) | id
解析:
1.E -> TE'
FIRST(TE')={(,id} 所以 E -> TE' 填入 M[E, id] 和 M[ E, ( ]
步骤2不满足
2.E' -> +TE'
FIRST(+TE')={+} 所以 E' -> +TE' 填入 M[E', +]
步骤2不满足
3.E' -> ε
FOLLOW(E')={ ), # } 所以 E' -> ε 填入 M[E', )] 和 M[E', #]
步骤1不满足
4.T -> FT'
FIRST(FT')={(,id} 所以T -> FT' 填入 M[T, (] 和 M[T, id]
步骤2不满足
5.T' -> *FT'
FIRST(*FT')={*} 所以 T' -> *FT' 填入 M[T' , * ]
步骤2不满足
6. T' -> ε
FOLLOW(T')={ +, ), # } 所以 T' -> ε 填入M[T', +]、M[T', )] 和M[T', #]
步骤1不满足
7.F -> (E)
FIRST((E))={(} 所以F -> (E) 填入 M[F, (]
步骤2不满足
8.F -> id
FIRST(id)={id} 所以 F -> id 填入 M[F, id]
步骤2不满足
结果如下:
语法变量 |
输入符号 |
|||||
id |
+ |
* |
( |
) |
# |
|
E |
E -> TE' | E -> TE' | ||||
E’ |
E' -> +TE' | E' -> ε |
E' -> ε |
|||
T |
T -> FT' | T -> FT' | ||||
T’ |
T' -> ε | T' -> *FT' | T' -> ε | T' -> ε | ||
F |
F -> id | F -> (E) |