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中不可变数据类型和可变数据类型
    悲观锁与乐观锁
    MySql的隔离级别和锁的关系
    关于content-type请求头的说明
    数据库事务的四大特性以及事务的隔离级别
    [Vue] : 路由
    [Vue] : 组件
    [Vue] : vue-resource 实现 get, post, jsonp请求
    [Vue] : 动画
    [Vue] : 自定义指令
  • 原文地址:https://www.cnblogs.com/sunyoung/p/6032437.html
Copyright © 2011-2022 走看看