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

  • 相关阅读:
    浅谈React工作原理
    手撕ES6--Promise
    快速安装create-react-app脚手架
    使用render函数渲染组件
    视图的创建与使用 Sql Server View
    数据库 简单查询 Sql Server 学生表 课程表 选课表
    基于WebServices简易网络聊天工具的设计与实现
    基于Web的实验室管理系统技术简要报告
    基于 控制台 简易 学生信息管理系统 (增、删、改)
    .net序列化与反序列化——提供多次存储对象集后读取不完全解决方案
  • 原文地址:https://www.cnblogs.com/sunyoung/p/6032437.html
Copyright © 2011-2022 走看看