zoukankan      html  css  js  c++  java
  • 消除左递归

    1.将以下文法消除左递归,分析符号串 i*i+i 

       并分别求FIRST集、FOLLOW集,和SELECT

        E -> E+T | T

        T -> T*F | F

        F -> (E) | i

     

    消除左递归:

    E -> TE’

    E’ -> +TE’ | ε 

    T -> FT’

    T’ -> *FT’ | ε 

    F -> (E) | i

     

    分析符号串 i*i+i

    FIRST集:

    FOLLOW集:

    FIRST(E) = { ( , i }

    FIRST(E’) = {+ , ε }

    FIRST(T) = { ( , i }

    FIRST(T’) = { * , ε }

    FIRST(F) = { ( , i }

    FIRST(TE') = { (, i }

    FIRST(+TE') = {+}

    FIRST(ε) = {ε}

    FIRST(FT') = { (, i }

    FIRST(*FT') = {*}

    FIRST((E)) = { ( }

    FIRST(i) = {i}

    FOLLOW(E) = { ) , # }

    FOLLOW(E’) = { ) , # }

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

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

    FOLLOW(F) = { * , + , ) ,# }

    SELECT集:

    SELECT(E -> TE’) = FIRST(E) = { ( , i }

    SELECT(E’ -> +TE’) = FIRST(+TE’) = { + }

    SELECT(E’ -> ε) = FIRST(ε) - {ε} U FOLLOW(E’) = FOLLOW(E’) = { ) , # }

    SELECT(T -> FT’) = FIRST(FT’) = { ( , i }

    SELECT(T’ -> *FT’) = FIRST(*FT’) = { * }

    SELECT(T’ -> ε) = FIRST(ε) - {ε} U FOLLOW(T’) = FOLLOW(T’) = { + , ) ,# }

    SELECT(F -> (E)) = FIRST((E)) = { ( }

    SELECT(F -> i) = FIRST(i) = { i }

     

     

    2.P101练习72)(3)文法改写,并分别求FIRST集、FOLLOW集,和SELECT

     

     P101练习72

     

    A -> aABe | a

     

    B -> Bb | d

     

    文法改写:

     

    A -> aA’

     

    A’ -> ABe | ε

     

    B -> dB’

     

    B’ -> bB’ | ε

     

    FIRST集:

    FOLLOW集:

    FIRST(A) = { a }

    FIRST(A’) = { a , ε }

    FIRST(B) = { d }

    FIRST(B’) = { b , ε }

     

    FIRST(aA')={a}

    FIRST(ABe)={a}

    FIRST(ε)={ε}

    FIRST(dB')={d}

    FIRST(bB')={b}

    FOLLOW(A) = {d , #}

    FOLLOW(A’) = {d ,#}

    FOLLOW(B) = {e}

    FOLLOW(B’) = {e}

     

    SELECT集:

    SELECT (A -> aA’) = FIRST(aA’) = { a }

    SELECT(A’ -> ABe) = FIRST(ABe) = { a }

    SELECT(A’ -> ε) = FIRST(ε) - {ε} U FOLLOW(A’) = FOLLOW(A’) = { d , # }

    SELECT(B -> dB’) = FIRST(dB’) = { d }

    SELECT(B’ -> bB’) = FIRST(bB’) = {b }

    SELECT(B’ -> ε) = FIRST(ε) - {ε} U FOLLOW(B’) = FOLLOW(B’) = { e }

     

     

     P101练习73

     

    S -> SBa | b

     

    B -> ab

     

    文法改写:

     

    S -> bS’

     

    S’-> BaS’| ε

     

    B -> ab

     

    FIRST集:

    FOLLOW集:

    FIRST(S) = { b }

    FIRST(S’) = { a , ε }

    FIRST(B) = { a }

     

    FIRST(bS')={b}

    FIRST(BaS')={a}

    FIRST(ε)={ε}

    FIRST(ab)={a}

    FOLLOW(S) = {#}

    FOLLOW(S’) = {#}

    FOLLOW(B) = {a}

     

    SELECT集:

    SELECT (S -> bS’) = FIRST(bS’) = { b }

    SELECT(S’ -> BaS’) = FIRST(BaS’) = { a }

    SELECT(S’ -> ε) = FIRST(ε) - {ε} U FOLLOW(S’) = FOLLOW(S’) = { # }

    SELECT(B -> ab) = FIRST(ab) = { a }

     

    课堂练习:

     

    求以下文法的FIRST集、FOLLOW集和SELECT集。

     

    S->Ap
    A->a |ε
    A->cA

    A->aA

     

     

     

    FIRST集:

    FOLLOW集:

    FIRST(S) = { a,c,p }

    FIRST(A) = { a,c,ε }

     

    FIRST(Ap)={a,c,p}

    FIRST(a)={a}

    FIRST(ε)={ε}

    FIRST(cA)={c}

    FIRST(aA)={a}

    FOLLOW(S) = { # }

    FOLLOW(A) = { p }

     

    SELECT集:

    SELECT(S -> Ap) = FIRST(Ap) = { a , c , p }

    SELECT(A -> a ) = FIRST(a) = { a }

    SELECT(A -> ɛ) = FIRST(ε) - {ε} U FOLLOW(A) = FOLLOW(A) = { p }

    SELECT(A -> cA) = FIRST(cA) = { c }

    SELECT(A -> aA) = FIRST(aA) = { a }

     

     

     

    S->Ap
    S->Bq
    A->a
    A->cA
    B->b
    B->dB

     

     

    FIRST集:

    FOLLOW集:

    FIRST(S1) = { a , c }

    FIRST(S2) = { b , d }

    FIRST(A) = { a , c }

    FIRST(B) = { b ,d }

     

    FIRST(Ap)={a,c}

    FIRST(Bq)={b,d}

    FIRST(a)={a}

    FIRST(cA)={c}

    FIRST(b)={b}

    FIRST(dB)={d}

    FOLLOW(S) = { # }

    FOLLOW(A) = { p }

    FOLLOW(B) = { q }

     

    SELECT集:

    SELECT(S -> Ap) = FIRST(Ap) = { a , c }

    SELECT(S -> Bq ) = FIRST(Bq) = { b , d }

    SELECT(A -> a) = FIRST(a) = { a }

    SELECT(A -> cA) = FIRST(cA) = { c }

    SELECT(B -> b) =FIRST(b) = { b }

    SELECT(B -> dB) = FIRST(dB) = { d }

  • 相关阅读:
    记周日一次故障意外
    每周一坑-【3月第1周】
    关于计划任务的一个小需求-优化篇
    400篇博客的一个里程碑
    关于计划任务的一个小需求-实现篇
    关于计划任务的一个小需求
    微服务优雅停机研究
    NSUInteger设为负数
    Mac上运行第一个Flutter项目
    Vue filtersfilter、computed、methods、watch对比
  • 原文地址:https://www.cnblogs.com/a188182/p/11861885.html
Copyright © 2011-2022 走看看