zoukankan      html  css  js  c++  java
  • 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)={*,+,$,)}

  • 相关阅读:
    类对象成员函数的const增强zz
    希腊与罗马神话神名对照
    c++程序调用c函数 and otherwise zz
    百度相信中国电子书下载
    VolatileCorrectness,让编译器帮你检测竞争条件 zz
    高效计算一个bytes有几个byte是1?
    实现mybatis官网入门实例
    Windows Phone 深度探索(一) 带有(伪)元素加载动画的Panel (SlideInPanel)
    You have asked for this, it is basically your fault!
    New EC2 Instance Types of re:Invent 2021
  • 原文地址:https://www.cnblogs.com/sunyoung/p/6032437.html
Copyright © 2011-2022 走看看