例 S::=aABbcd|ε A::=ASd|ε B::=SAh|eC|ε C::=Sf|Cg|ε 求此文法的每一个非终结符号的FIRST集。
解: FIRST(S)=FIRST(aABbcd)∪FIRST(ε) ={a}∪{ε}={a,ε} FIRST(A)=FIRST(ASd)∪FIRST(ε) ={a,d}∪{ε}={a,d,ε} FIRST(B)=FIRST(SAh)∪FIRST(eC) ∪FIRST(ε) ={a,d,h}∪{e}∪{ε}={a,d,h,e,ε} FIRST(C)=FIRST(Sf)∪FIRST(Cg) ∪FIRST(ε) ={a,f}∪{a,f,g}∪{ε}={a,f,g,ε}
4.1自顶向下的分析方法(P61)
开始符号 输入符号串
自顶向下的分析方法就是从文法的开始符号出发,按最左推导方式向下推导,试图推导出要分析的输入串。即:
开始符号 输入符号串
自底向上的分析方法从输入符号串开始,按最左归约方式向上归约到文法的开始符号。即:
+ 归约 ←
自底向上
文法符号的FIRST集合构造方法:
对于文法中的符号X∈V,其FIRST(X)集合可反复应用下列规则计算,直到其FIRST(X)集合不再增大为止: 若X为终结符,则将X加入FIRST(X)集合中。 若X为非终结符,且具有形如X→aα的产生式(a∈Vt),或具有形如X→ε的产生式,则把a或ε加进FIRST(X)。 设X为非终结符且有形如X→Y1Y2…Yk的产生式,若Y1∈Vn,则把FIRST(Y1)中的一切非ε符号加进FIRST(X);对于一切2≤i≤k,若Y1,Y2,…,Yi-1均为非终结符号,且ε∈FIRST(Yj),1≤j≤i-1,则将FIRST(Yi)中的一切非ε符号加进FIRST(X);但若对一切1≤i≤k,均有ε∈FIRST(Yi),则将ε符号加进FIRST(X)。