编译原理及实现——计算FIRST集
你好! 第一次在CSDN上发文章,如有不足之处还望包涵。
下面开始介绍计算方法。
在计算之前先了解FIRST集的定义和算法
定义:
FIRST(α)={a|a-->aβ,a∈Vt,α,β∈V }若a-*->ε,则ε∈FIRST(α)
有些符号我不懂得怎么表示,下面我附上我自制符号的解释截图:
-*-> :
下文均用Vt表示终结符,Vn表示非终结符。
求FIRST(x)的算法:
1.若x∈Vt,则FIRST(x)={x};
2.若X∈Vn,且有产生式X→a…,a∈Vt,则a∈first(X);
3.若X∈Vn,X→ε,则ε∈FIRST(X);
4.若X∈Vn,且有产生式X→Y1Y2…Yn,其中Y1,Y2,…,Yn都∈Vn(这个要分为以下两种情况)
①当Y1,Y2,…,Yi-1 都能推导出ε时(1<=i<=n),
则FIRST(Y1)-{ε}∈FIRST(X)
FIRST(Y2)-{ε}∈FIRST(X)
…<