FIRST集和FOLLOW集,FIRSTVT集和LASTVT集的求法


學習編譯原理時, 這幾個集合相信大家並不陌生:FIRST、FOLLOW、FIRSTVT、LASTVT。

其中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,即先以非終結符結尾,前面是終結符,則終結符入Lastvt


免責聲明!

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



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