zoukankan      html  css  js  c++  java
  • FIRST集和FOLLOW集的计算

    FIRST集的定义:

    设G=(VT,VN,P,S)是上下文无关文法

    FIRST(a)={a|a=>ab,a∈VT, a,b∈V}

    若a=>*ε则规定ε∈FIRST (a)

    FIRST(α)就是从α可能推导出的所有开头终结符号和可能的ε所构成的集合。

    FIRST集的计算://用通俗的语言讲

    1.置FIRST(α)为空

    2.遍历所有产生式左侧是α文法的式子如果右侧产生式第一位字符为终结符则把该字符放入FIRST(α)集

    例子:A->aB,FIRST(A)={a}

    3.如果右侧产生式第一位字符为非终结符则根据把该字符的FIRST放入FIRST(α)集

    例子:A->BC,FIRST(A)=FIRST(B)

    4.检查3.步骤中非终结符的FIRST集有无空字符(ε),若有则把下一个非终结符字符的FIRST集也放入FIRST(α)中

    5.重复上述步骤直到所有FIRST集都生成且不再变化

    例:

    E →TE’

    E’→+TE’

    E’→ε

    T →T'F

    T’→*FT’

    T’→ε

    F→(E)|i

    FIRST(E)=FIRST(T)//FIRST(T)未计算

    FIRST(E‘)={+,ε}//步骤2.

    FIRST(T)=FIRST(T')∪FIRST(F)//由于T’集合存在ε所以要加上FIRST(F)

    FIRST(T')={*,ε}

    FIRST(F)={(,i} -> FIRST(E)=FIRST(T)={*,ε,(,i}

    FOLLOW集定义:

    FOLLOW(A)={a| S=>mAb 且a∈FIRST(b),m∈V,b∈V+}

    若 S=>uAb, 且b =>ε,则#∈FOLLOW( A)。

    FOLLOW集的计算://用通俗的语言讲

    1.对于开始的文法的FOLLOW集加入{#}

    例:对于G[S]文法置FOLLOW(S)={#}

    2.看产生式左侧的符号,如果在产生式右侧找到则根据情况进行判断

    如果该符号的右侧是最后一位,则把产生式左侧的FOLLOW集加入FOLLOW(α)

    例:A->Bα,FOLLOW(α)=FOLLOW(A)

    如果该符号的下一位是终结符,则把该终结符放入FOLLOW(α)

    例:A->αbC,FOLLOW(α)={b}

    如果该符号的下一位是非终结符,则把该符号除去空符号(ε)的FIRST集放入FOLLOW(α)

    例:A->αBC,FOLLOW(α)=FIRST(B)-{ε}

    3.检查2.步骤中非终结符的FIRST集有无空字符(ε),若有则把下一个字符的进行同2.步骤的判断直至遇到终结符或者不含空符号的非终结符

    5.重复上述步骤直到所有FOLLOW集都生成且不再变化

    例:

    E →TE’

    E’→+TE’

    E’→ε

    T →FT'

    T’→*FT’

    T’→ε

    F→(E)|i

    FOLLOW(E)={#,)}//步骤1.+最后一个式子

    FOLLOW(E')=FOLLOW(E')=FOLLOW(E)={#,)}//第一个式子

    FOLLOW(T)=(FIRST(E')-{ε})∪FOLLOW(E')={+,#,)}//第一个式子or第二个式子,由于E'已经是最后一个则加入FOLLOW(E')

    FOLLOW(T’)= FOLLOW(T)= {+,) ,#}

    FOLLOW(F)={FIRST(T’)-{e}})∪FOLLOW(T’) = {+,*,) ,#}

  • 相关阅读:
    iphone label相关的圆角处理(转)
    如何设置图片四个方向圆角属性
    iphone自动隐藏和显示工具栏和导航条
    重写系统黑色的TabBar
    awk正则表达式(转)
    AWK相关学习(转)
    C的 __FILE__, __LINE__的意思
    iphone UILabel 顶部对齐(top align)
    WPF笔记(4.5 MasterDetail数据绑定)——Data Binding
    CLR笔记:8.方法
  • 原文地址:https://www.cnblogs.com/VingB2by/p/10970834.html
Copyright © 2011-2022 走看看