First,Follow,Firstvt和Lastvt (編譯原理)


轉:http://dongtq2010.blog.163.com/blog/static/1750224812011520113332714/

學編譯原理的時候,印象最深的莫過於這四個集合了,而且也十分為之糾結。
首先要知道First和Follow是一對,而Firstvt和Lastvt是一對。
然后要知道這兩對都是干什么的。
First和Follow是為了畫預測分析表的(在LL(1)分析法處)。
而Firstvt和Lastvt是為了畫算符優先關系表的(就是表里面填優先大於小於等於的那個)。

然后要注意他們可都是終結符的集合。

再就是他們如何構建的問題了
先說First和Follow
First
如A->aB | CD
這里面包含了組成First(A)的兩種情況:
           以終結符開頭,    當然要把這個終結符放到A的First里
           以非終結符開頭, 先把C的First放到A的First里
                                        再看如果C的First中有空的話就把D的First放到A的First里,如果D也有空的話往后依次類推
技巧:First一般從下往上找。
           如果要找A的First,我們要找A的定義式,即A在左邊的式子,看着他的右邊來找。

Follow
S->(L) | aL | LC   
找Follow的三種情況:先在候選式(右邊)中找到該非終結符,如L(注意例中只有一個定義,但找Follow要看到所有右邊出現該非終結符的)
           如果L的右邊是終結符,    那么這個終結符加入L的Follow
           如果L的右邊是非終結符, 那么把這個非終結符的First除去空加到L的Follow中{有問題}
           如果L處在末尾,               那么,'->'左邊符號的Follow成為L的Follow
另外要注意的是:
           開始符號的Follow中要加上‘#’        
技巧:Follow一般從上往下找。
           如果要找L的Follow,要從式子的右邊找到L,然后來找L的Follow,這與First是不同的。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
再說下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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM