编译原理中 FIRSTVT 和LASTVT

如题 E->E+T
. T->T*F|F
. F->(E)|id
求 FIRSTVT(T)
答案是FIRSTVT(T)={*,(,id}

但是我看FIRSTVT集合的定义是
FIRSTVT(A)={blA=>b或A=>Bb.....,b属于终结符,B属于非终结符}

这样的话FIRSTVT(T)的答案不应该是
*,),id 吗?书上给的答案是(,*,id

    Firstvt:找Firstvt的三条规则:如果要找A的Firstvt,A的候选式中出现:
               A->a.......,即以终结符开头,该终结符入Firstvt;
               A->B.......,即以非终结符开头,该非终结符的Firstvt入A的Firstvt;
               A->Ba.....,即先以非终结符开头,紧跟终结符,则终结符入Firstvt。

    Lastvt:找Lastvt的三条规则:如果要找A的Lastvt,A的候选式中出现:
               A->.......a,即以终结符结尾,该终结符入Lastvt;
               A->.......B,即以非终结符结尾,该非终结符的Lastvt入A的Lastvt;
               A->.....aB,即先以非终结符结尾,前面是终结符,则终结符入Firstvt。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-07
1、FIRSTVT(T)=FIRSTVT(T*F)=*;
2、FIRSTVT(T)=FIRSTVT(F)
(1)FIRSTVT(F)=FIRSTVT((E))=(;
(2)FIRSTVT(F)=FIRSTVT(id)=id;
如此,FIRSTVT(T)={*,(,id}。本回答被提问者和网友采纳
相似回答