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

  • 相关阅读:
    ResponsibleChain(责任链模式)
    IteratorPattern(迭代子模式)
    为什么抽象类不能实例化却有构造方法
    ObserverPattern(观察者模式)
    TemplateMethod(模块方法模式)
    java 定义一个同步map内存去重法
    oracle sql修改序列为当前序列开始
    oracle sql 当初始化数据时避免重复主键
    搭建基于express框架运行环境
    vue路由基础介绍
  • 原文地址:https://www.cnblogs.com/sunyoung/p/6032437.html
Copyright © 2011-2022 走看看