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)={*,+,$,)}

  • 相关阅读:
    python九九乘法表
    js的规范写法ES5(自己以后按照这样写)
    git使用和理解之一(不含分支)
    Javascript中对象的Obeject.defineProperty()方法-------------(ES5/个人理解)
    escape()、encodeURI()、encodeURIComponent()区别详解--zt
    webpack学习(一)
    width:100%以什么为基准的测试
    git status中文文件名编码问题解决
    系统构建基础
    jdk+Tomcat环境搭建
  • 原文地址:https://www.cnblogs.com/sunyoung/p/6032437.html
Copyright © 2011-2022 走看看