FIRST
- 能由非終結(jié)符號(hào)推出的所有的開頭符號(hào)(終結(jié)符)或可能的ε
- 假設(shè)有以下文法:
S→ABc
A→a|ε
B→b|ε
- 則:FIRST(A)={a,ε},FIRST(B)={b,ε}
- 由于從S可以推得aBc与斤,bc觅丰,c谢澈,故FIRST(S)={a乳附,b懈糯,c}
FOLLOW
- 緊跟隨其后面的終結(jié)符號(hào)或#
- 把所有包含你要求的符號(hào)的產(chǎn)生式都找出來,再看哪個(gè)有用琳拨。 Follow(S)={#}
如求A的,產(chǎn)生式:S→ABc A→a|ε ,但只有S→ABc 有用抄谐。跟隨在A后年的終結(jié)符號(hào)是FIRST(B)={b渺鹦,ε},當(dāng)FIRST(B)的元素為ε時(shí)蛹含,跟隨在A后的符號(hào)就是c毅厚,所以 Follow(A)={b,c} 同理Follow(B)={c}
補(bǔ)充一些編譯方法的知識(shí)點(diǎn)(來自Jack_Wong2010)
一.終結(jié)符和非終結(jié)符
- 終結(jié)符就是不能再往后推導(dǎo)的字符
- 非終結(jié)符可以繼續(xù)推導(dǎo)
文法產(chǎn)生語言句子
- 從識(shí)別符號(hào)(開始符)開始浦箱,把當(dāng)前產(chǎn)生的符號(hào)串中的非終結(jié)符替換為相應(yīng)規(guī)則右部的符號(hào)串吸耿,直到全部由終結(jié)符組成
FIRST集求解
- 關(guān)鍵是求出非終結(jié)符的First集合
- 終結(jié)符的First集合就是它自己,所以求出非終結(jié)符的First集合后酷窥,就可很直觀地得到每個(gè)字符串的First集合
- 直接收妊拾病:對(duì)形如U->a…的產(chǎn)生式(其中a是終結(jié)符),把a(bǔ)收入到First(U)中
- 反復(fù)傳送:對(duì)形入U(xiǎn)->P…的產(chǎn)生式(其中P是非終結(jié)符)蓬推,應(yīng)把First(P)中的全部內(nèi)容傳送到First(U)中
FOLLOW集求解
- Follow集合是針對(duì)非終結(jié)符而言的
- Follow(U)所表達(dá)的是句型中非終結(jié)符U所有可能的后隨終結(jié)符號(hào)的集合
- Follow集合是從開始符號(hào)S開始推導(dǎo)
- 直接收茸卑簟:注意產(chǎn)生式右部的每一個(gè)形如“…Ua…”的組合,把a(bǔ)直接收入到Follow(U)中沸伏。因a是緊跟在U后的終結(jié)符
- 2.直接收雀馍骸:對(duì)形如“…UP…”(P是非終結(jié)符)的組合,把First(P)直接收入到Follow(U)中
- 直接收纫阍恪:若S->…U红选,即以U結(jié)尾,則#∈Follow(U)
- 4.反復(fù)傳送:對(duì)形如U->…P的產(chǎn)生式(其中P是非終結(jié)符)姆另,應(yīng)把Follow(U)中的全部內(nèi)容傳送到Follow(P)中
傳送門:http://blog.csdn.net/jack_wong2010/article/details/9074951