簡體   English   中英

編譯器設計中的第一個集合構造

[英]FIRST set construction in compiler design

我有以下語法。我已經計算了所有非終端的FIRST集,但是我不確定它們是否正確。

The grammar is as follows:

    E->TE'
    E'->+E|epsilon
    T->FT'
    T'->T|epsilon
    F->PF'
    F->*F'|epsilon
    P->(E)|a|b|epsilon

The FIRST sets for non terminals are as follows:

    FIRST(E)={(,a,b,*,+,epsilon}
    FIRST(E')={+,epsilon}
    FIRST(T)={(,a,b,*,epsilon}
    FIRST(T')={(,a,b,*,epsilon}
    FIRST(F)={(,a,b,*,epsilon}
    FIRST(F')={*,epsilon}
    FIRST(P)={(,a,b,epsilon}

如果我是正確的人可以指導我。任何幫助將不勝感激。

首先,您計算出錯誤的First(F'),因為根據您的生產

F-> PF'

F-> * F'| EPSILON

那是,

F-> PF'| F'| EPSILON

因此,在你上面的生產F“不給,所以我們應該考慮F”為EPSILON那

F'-> EPSILON

所以現在的生產將是

E->TE'
E'->+E|EPSILON
T->FT'
T'->T|EPSILON
F->PF'|*F'|EPSILON
F->EPSILON
P->(E)|a|b|EPSILON

現在應用FIRST規則,我們得到

FIRST(E)= FIRST(T)-εU FIRST(E')

= {(,a,b,*} U {+,EPSILON}

= {(,a,b,*,+,EPSILON}

FIRST(E')= {+,EPSILON}

FIRST(T)= FIRST(F)-εU FIRST(T')

= {(,a,b, } U {(,a,b ,,EPSILON}

= {(,a,b,*,EPSILON}

FIRST(T')= FIRST(T)-EPSILON U EPSILON

= FIRST(T')= FIRST(F)-EPSILON U FIRST(T')U EPSILON

= {(,a,b,, EPSILON} / FIRST(T')被取消* /

= {(,a,b,*} U FIRST(T')U EPSILON

FIRST(F)= FIRST(P)-εU FIRST(F')U FIRST(* F')U EPSILON

= {(,a,b} U EPSILON U * U EPSILON = {(,a,b,*,EPSILON}

FIRST(F')= {EPSILON}

FIRST(P)= FIRST((E))-EPSILON U a U b U EPSILON

= {(,a,b,EPSILON}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM