[英]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.