FIRST集和FOLLOW集求法

Posted please insist~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FIRST集和FOLLOW集求法相关的知识,希望对你有一定的参考价值。

 

   

龙书算法:

First:

1)、如果X是终结符,那么First(X) = X;

2)、如果X是非终结符,且XàY1Y2......Yk是一个产生式,其中k>=1;那么如果对于某个I, a在First(Yi)中,且#(空串)在所有的First(Y1)…..First(Yi-1)中,就吧a加入到First(X)中。

        (3)、如果Xà#(空串)是一个产生式,那么将#加入到First(X)中。

Follow:

1)、将$放入到Follow(S)中,其中S是开始符号,而$是输入右端结束的标记。

2)、如果存在一个产生式AàaBb,那么First(b)中除#(空串)外地所有符号都在Follow(B)中。

3)、如果存在一个产生式AàaB, 或存在AàaBb且First(b)包含#(空串),那么Follow(A)中的所有符号都在Follow(B)中。

 

自己理解:

       First:(看X的产生式)

              (1)、如果X是终结符,那么First(X)= X;

              (2)、如果X是非终结符,且XàY1Y2......Yk,i=1;

                     1)、将First(Yi)加入到First(X)中,

                     2)、如果#包含着First(Yi)中,i++,重复1);

                     3)、如果#不包含在First(Yi)中,First(X)计算完成;

              (3)、如果Xà#(空串)是一个产生式,那么将#加入到First(X)中。

Follow:(看在右边有B的产生式)

1)、将$放入到Follow(S)中,其中S是开始符号,而$是输入右端结束的标记。

2)、如果存在一个产生式AàaBb,那么First(b)中除#(空串)外地所有符号都在Follow(B)中。

3)、如果存在一个产生式AàaB, 或存在AàaBb且First(b)包含#(空串),那么Follow(A)中的所有符号都在Follow(B)中。

实例:

(1) EàTE’            (2)E’à+TE’ |#        (3) TàFT’          (4)T’à*FT’|#        (5)Fà(E)|id  

FIRST(F)={(,id }  FIRST(T’)={*,#}  FIRST(T)=FIRST(F)={(,id}

FITST(E’)={+,#} FIRST(E)={(,id}

 

FOLLOW(E)={$,)}

FOLLOW(E’)={$,)}

FOLLOW(T)={+,$,)}

FOLLOW(T’)={+,$,)}

FOLLOW(F)={*,+,$,)}

以上是关于FIRST集和FOLLOW集求法的主要内容,如果未能解决你的问题,请参考以下文章

求FIRST集和FOLLOW集

怎么求文法的first集和follow集啊,要详细解说过程!!!

编译原理follow集与first集的计算

编译原理的follow集怎么求

FIRST集合FOLLOW集合及LL文法求法

编译原理:考虑文法G[S]