首先要知道First和Follow是一对,而Firstvt和Lastvt是一对。
然后要知道这两对都是干什么的。
First和Follow是为了画预测分析表的(在LL(1)分析法处)。
而Firstvt和Lastvt是为了画算符优先关系表的(就是表里面填优先大于小于等于的那个)。

然后要注意他们可都是终结符的集合。

再就是他们如何构建的问题了
先说如何求First集和Follow集
First
如A->aB | CD
这里面包含了组成First(A)的两种情况:
           (1)以终结符开头,    当然要把这个终结符放到A的First里
           (2)以非终结符开头, 先把C的First放到A的First里
                                        再看如果C的First中有空的话就把D的First放到A的First里,如果D也有空的话往后依次类推

Follow
S->(L) | aL | LC   
找Follow的三种情况:先在候选式(右边)中找到该非终结符,如L(注意例中只有一个定义,但找Follow要看到所有右边出现该非终结符的)
           (1)如果L的右边是终结符,    那么这个终结符加入L的Follow
           (2)如果L的右边是非终结符, 那么把这个非终结符的First除去空加到L的Follow中{有问题}
           (3)如果L处在末尾,               那么,'->'左边符号的Follow成为L的Follow
另外要注意的是:
           开始符号的Follow集中要加上‘#’

       
---------------------------------------------------------------------------------------------------
再说下如何求Firstvt和Lastvt
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

posted on 2015-06-30 14:38  leejian  阅读(245)  评论(0)    收藏  举报