明天就考試了,在這里糾結(jié)這個(gè)問題。
一,要知道什么是終結(jié)符和非終結(jié)符。
終結(jié)符:通俗的說就是不能單獨(dú)出現(xiàn)在推導(dǎo)式左邊的符號(hào),也就是說終結(jié)符不能再進(jìn)行推導(dǎo)。
非終結(jié)符:不是終結(jié)符的都是非終結(jié)符。(非男即女,呵呵)
如:A——>B,則A是非終結(jié)符。
(一般書上終結(jié)符用小寫,非終結(jié)符用大寫。)
二,文法產(chǎn)生語言句子的基本思想:從識(shí)別符號(hào)(開始符)開始,把當(dāng)前產(chǎn)生的符號(hào)串中的非終結(jié)符替換為相應(yīng)規(guī)則右部的符號(hào)串,直到全部由終結(jié)符組成。
三,FIRST集求法
First集合最終是對產(chǎn)生式右部的字符串而言的,但其關(guān)鍵是求出非終結(jié)符的First集合,由于終結(jié)符的First集合就是它自己,所以求出非終結(jié)符的First集合后,就可很直觀地得到每個(gè)字符串的First集合。
1. 直接收取:對形如U->a…的產(chǎn)生式(其中a是終結(jié)符),把a收入到First(U)中
2. 反復(fù)傳送:對形入U->P…的產(chǎn)生式(其中P是非終結(jié)符),應(yīng)把First(P)中的全部內(nèi)容傳送到First(U)中【意思就是只需要把第一個(gè)非終結(jié)符的First集傳過去~這個(gè)地方是要注意的地方,也是難點(diǎn)】。
四,FOLLOW集的求法
Follow集合是針對非終結(jié)符而言的,Follow(U)所表達(dá)的是句型中非終結(jié)符U所有可能的后隨終結(jié)符號(hào)的集合,特別地,“#”是識(shí)別符號(hào)的后隨符。注意Follow集合是從開始符號(hào)S開始推導(dǎo)。
1. 直接收取:注意產(chǎn)生式右部的每一個(gè)形如“…Ua…”的組合,把a直接收入到Follow(U)中。因a是緊跟在U后的終結(jié)符。
2.直接收取:對形如“…UP…”(P是非終結(jié)符)的組合,把First(P)直接收入到Follow(U)中【在這里,如果First(P)中有空字符,那么就要把左部(假設(shè)是S)的Follow(S)送入到Follow(U)中。還有就是Follow集中是沒有空字符的】。
3. 直接收取:若S->…U,即以U結(jié)尾,則#∈Follow(U)
4.*反復(fù)傳送:對形如U->…P的產(chǎn)生式(其中P是非終結(jié)符),應(yīng)把Follow(U)中的全部內(nèi)容傳送到Follow(P)中。
Ps:Follow集比First要復(fù)雜一點(diǎn),不過記住算法多做練習(xí)就是小Case啦。