预测分析技术
FIRST(u)={T|u=>* T...,T∈Vₜ},特别地,如果u=>* ε,则规定ε∈FIRST(u)
FOLLOW(U)={T|Z=>* ...UT...,T∈Vₜ∪{#}},特别地,如果Z=>* ...U,则规定#∈FOLLOW(U)
构造FIRST(u)
如果X∈Vₜ,则FIRST(X)={X}
如果X∈V៷,并存在规则X::=T...,T∈Vₜ,则把T添入FIRST(X),如果存在规则X::= ε,则把 ε也添入其中
如果存在规则X::=X₁X₂...Xₖ,则对于满足下列条件的一切i(1≤i≤k),把FIRST(Xᵢ)中的每一个非ε符号添入FIRST(X)。该条件是:X₁,...Xᵢ₋₁都是非终结符号,且FIRST(Xⱼ),包含ε,j=1,2,...,i-1(即X₁X₂...Xᵢ₋₁=>* ε)。如果ε∈FIRST(Xⱼ),j=1,2,...,k,则把ε添入FIRST(X)
构造FOLLOW(U)
#∈FOLLOW(Z),Z是文法识别符号
如果存在规则U::=xWy,则FIRST(y)中除ε外的一切符号都属于FOLLOW(W),其中W∈V៷
如果存在规则U::=xW或U::=xWy,其中FIRST(y)包含ε(即y=>* ε),则FOLLOW(U)中的一切符号都属于FOLLOW(W),其中W∈V៷
预测分析表构造算法
对文法的每个规则U::=u,执行步骤2与步骤3
对每个终结符号a∈FIRST(u),让A[U][a]='U::=u'
如果ε∈FIRST(u),则对FOLLOW(U)中的每个终结符号b或#,让A[U][b]='U::=u'或A[U][#]='U::=u'
把A的每个未定义元素置为ERROR(用空白表示)