http://book.51cto.com/art/201204/331576.htm
一、文法的概念和分類
1.文法的定義描寫敘述語言語法結構的形式規則稱為文法。文法通常定義為四元組:
G=(VN,VT,P,S)
VN ——非終結符號集
VT ——終結符號集
P——產生式或規則的集合
S——開始符號(識別符號),S∈VN
產生式是一個有序對(U,x),通常寫為:U→x;非終結符號出如今產生式的左部,且能推出符號或符號串的那些符號,其全體構成非終結符號集,記為VN。終結符號不出如今產生式的左部,且不能推出符號或符號串的那些符號。
2.文法分類
喬姆斯基把文法分成四種型別,即 0型、1型、2型和3型。這幾種文法型別的概念一定要掌握,是一個很重要的考點。
(1)0型文法
設 G(V ,V ,P,S),假設它的每一個產生式 α→β是這樣一種結構: α∈
=N T(V*NTV)U且至少含有一個非終結符,而 β∈(V*NTV)U,則G是一個0型文法。0型文法也稱短語文法。一個很重要的理論結果是:0型文法的能力相當於圖靈機(Turing)。或者說,不論什麼0型文語言都是遞迴可列舉的,反之,遞迴可列舉集必然是一個0型語言。0型文法是這幾類文法中,限制最少的一個,所以我們在試題中見到的,至少是0型文法。
(2)1型文法
1型文法也叫上下文有關文法,它是在 0型文法的基礎上每個 α→β,都滿足。這裡的 |β|表示的是β的長度。β ≥α
(3)2型文法
2型文法也叫上下文無關文法,它相應於下推自己主動機。2型文法是在1型文法的基礎上,再滿足:每個α→β都有α是非終結符。如A->Ba,符合2型文法要求。
如Ab->Bab儘管符合1型文法要求,但不符合2型文法要求,由於其α=Ab,而Ab不是一個非終結符。
(4)3型文法 3型文法:不論什麼產生式A→α|αB(右線性)或A→α|Bα(左線性),當中A,B∈VN,α∈VT。
3.句子和語言
(1)推導與直接推導
推導就是從文法的開始符號S出發,重複使用產生式,將產生式左部的非終結符替換為右部的文法符號序列,直到產生一個終結符的序列時為止。若有產生式 α→β∈ P,,δ∈*
γ V ,則稱 γαδ. γβδ為文法G中的一個直接推導,並稱 γαδ可直接推匯出 γβδ。
(2)直接歸約和歸約
直接歸約和歸約(推導的逆過程):若文法G中有一個直接推導 α. β,則稱 β可直接歸約成 α,或 α是 β的一個直接歸約。若文法G中有一個推導 γ. * δ,則稱 δ可歸約成 γ,或 γ是 δ的一個歸約。
(3)句子和句型
若文法G的開始符號為S,那麼,從開始符號S能推匯出的符號串稱為文法的一個句型,即 α是文法G的一個句型,當且僅當有例如以下推導 S . * ,∈*XV,則
ααV 。若X是文法G的一個句型,且 ∈*T稱X是文法G的一個句子,即僅含終結符的句型是一個句子。
(4)語言從文法G的開始符號出發,能推匯出的句子的全體稱為文法G產生的語言,記為L(G)。
4.文法的等價
若文法G1和G2產生的語言同樣,即L(G1)=L(G2),則稱這兩個文法是等價的。
二、詞法分析
1.正規表示式和正規集
2.有限自己主動機
(1)確定的有限自己主動機(DFA)
(2)不確定的有限自己主動機(NFA)
(3)NFA和DFA的轉換
(4)DFA的最小化
三、正規式與有限自己主動機之間的轉換
1.有限自己主動機轉換為正規式對於 ∑上的NFAM,能夠構造一個 ∑上的正規式R,使得L(R)=L(M)。拓廣狀態轉換圖的概念,令每條弧可用一個正規式作標記。為 ∑上的NFA M構造對應的正規式R,分為例如以下兩步:
(1)在M的狀態轉換圖中加兩個節點,一個x節點,一個y節點。從x節點到NFA M的初始狀態節點引一條弧並用 ε標記,從NFA M的全部終態節點到y節點引一條弧並用 ε標記。形成一個與 M等價的M',M'僅僅有一個初態x和一個終態y。
(2)按以下的方法逐步消去M'中除x和y的全部節點。在消除節點的過程中,用正規式來標記弧,最後節點x和y之間弧上的標記就是所求的正規式。消除節點的規則如圖2-6所看到的。
圖 2-6 有限自己主動機到正規式的轉換規則示意圖 |
2.正規式轉換為有限自己主動機
相同地,對於 ∑上的每一個正規式R,能夠構造一個E上的NFA M,使得L(M)=L(R)。通過對正規式R進行分裂並增加新的節點,逐步把圖轉變成每條弧上的標記是E上的一個字元或 ε。轉換規則如圖2-7所看到的。
圖 2-7 正規式到有限自己主動機的轉換規則示意圖 |
四、語法分析
1.上下文無關文法
.規範推導(最右推導)
.短語、直接短語和控制程式碼
2.自頂向下語法分析方法
消除文法的左遞迴
提取公共左因子
LL(1)文法:FOLLOW集和FIRST集
遞迴下降分析法
預測分析法
3.自底向上語法分析方法(移進 -歸約分析法)移進-歸約分析法的數學模型是下推自己主動機。模型可採用演算法優先分析表和LR分析表。
五、題型簡單介紹
除了上面提到的知識點,還有語法制導翻譯和中間程式碼生成,及中間程式碼優化和目標生成可能還會考一些概念問題,詳細請考生閱讀教材。須要注意的是經常使用的中間程式碼:字尾式、三元式、四元式和樹等結構。最後給出有關“正規式與有限自己主動機”這一考點的各種可能考查形式:
題目給定一正規式,要求給出其NFA、DFA或最簡DFA。
題目給定一用狀態圖表示的NFA,要求給出其相應的DFA或最簡DFA形式。
題目給定一NFA、DFA或最簡DFA,要求給出其相應的正規式。
題目給定一正規集,要求給出其對應的DFA。
題目給定一用自然語言描寫敘述的正規集,要求給出其對應的正規式表示形式
怎麼考
【試題 2-24】2011年 11月真題 48
下圖所看到的為一個有限自己主動機(當中,A是初態、C是終態),該自己主動機識別的語言可用正規式(48)表示。
(48)A. (0|1)*01 B. 1*0*10*1 C. 1*(0)*01 D. 1*(0|10)*1*
分析:在正規式中,符號 *表示反覆若干次(包含 0次),符號 |表示“或”。在狀態 A,能夠輸入 1或0,假設輸入1還能夠回到狀態A,假設輸入 0直接到達狀態B;在狀態 B,能夠輸入 0或1,假設輸入 0則還回到狀態 B,而輸入 1,則進入到狀態 C;在狀態 C能夠輸入0或1,輸入 0到達狀態B,輸入 1到達狀態A,但因為 C是終態,自己主動機可識別的語言是由0、1構成的字串的集合,但該集合必須以 01結果,因此選項 A正確。【答案:A】
【試題 2-25】2011年 5月真題 15
包括8個成員的開發小組的溝通路徑最多有( 15)條。
(15)A.28 B.32 C.56 D.64
分析:須要協作溝通的人員的數量影響著開發成本,由於成本的主要組成部分是相互的溝通和交流,以及更正溝通不當所引起的不良結果。人與人之間必需通過溝通來解決各自承擔任務之間的介面問題,假設專案有n個工作人員,則有n×(n -1)/ 2個相互溝通的路徑。非常明顯,包括8個成員的開發小組的溝通路徑最多有28條。這事實上是一道簡單的圖論問題,相當於求包括 8個頂點的無向圖中最多有多少條邊。【答案:A】
【試題 2-26】2011年 5月真題 49
下圖所看到的為一個有限自己主動機(當中,A是初態、C是終態),該自己主動機可識別( 49)。
(49)A.0000 B.1111 C.0101 D.1010 分析:有限自己主動機可識別的字串,是指從有限自己主動機的初態出發,存在一條到達終態的路徑,其上的標記所構成的字串。對於“ 0000”,其識別路徑是狀態 A→狀態B→狀態B→狀態B→狀態
B,沒有到達態。
對於“1111”,其識別路徑是狀態A→狀態A→狀態A→狀態A→狀態A,沒有到達態。
對於“0101”,其識別路徑是狀態A→狀態B→狀態C→狀態B→狀態C,狀態C為終態,能夠識別。
對於“1010”,其識別路徑是狀態A→狀態A→狀態B→狀態C→狀態B,經過了終態,但沒有以終態結束。【答案:C】
【試題 2-27】2010年 11月真題 22
下圖所看到的的有限自己主動機中,0是初始狀態,3是終止狀態,該自己主動機能夠識別(22)。
(22)A.abab B.aaaa C.bbbb D.abba
分析:從初始狀態到終止狀態有多條路徑。在狀態 0輸入a到達狀態2,在狀態 2可輸入a或b,輸入 a到達狀態1,輸入 b到達狀態3,狀態3下輸入a還回到狀態3;在狀態 1可輸入a或b,輸入 a到達狀態3,輸入b到達狀態2。【答案:B】
【試題 2-28】2010年 11月真題 48
下圖所看到的為兩個有限自己主動機Ml和M2 (A是初態、C是終態),(48)。
C.M1是確定的有限自己主動機,M2是不確定的有限自己主動機
D.M1是不確定的有限自己主動機,M2是確定的有限自己主動機
分析:確定有限自己主動機對每個可能的輸入僅僅有一個狀態的轉移。非確定有限自己主動機對每個可能的輸入能夠有多個狀態轉移,接受到輸入時從這多個狀態轉移中非確定地選擇一個。有限自己主動機 M1在狀態A時,輸入0能夠回到狀態A,也能夠到達狀態 B,可見 M1是不確定的。有限自己主動機 M2的每個狀態下的輸入都僅僅有一個轉移狀態。【答案:D】
考點 3 文法分析(4)
【試題 2-29】2010年 5月真題 21
邏輯表示式“a∧b∨c∧(b∨x>0)”的字尾式為(21)。(當中∧、∨分別表示邏輯與、邏輯或,>表示關係運算大於,對邏輯表示式進行短路求值)
(21)A.abcbx0>∨∧∧∨ B.ab∧c∨b∧x0>∨
C.ab∧cb∧x>0∨∨ D.ab∧cbx0> ∨∧∨
分析:字尾式把運算子寫在運算物件後面。“邏輯與運算”的優先順序高於“邏輯或運算”。對於邏輯表示式“a∧b∨c∧(b∨x>0)”,從運算子的優先順序方面考慮,需先對“a∧b”求值,然後對“c∧(b∨x>0)”求值,最後進行“∨”運算,因此字尾式為“ab∧cbx0> ∨∧∨”。【答案:D】
【試題 2-30】2010年 5月真題 50
對於正規式0*(10*1)*0*,其正規集中字串的特點是(50)。
(50)A.開頭和結尾必須是0 B.1必須出現偶數次
C.0不能連續出現 D.1不能連續出現
分析:閉包運算子“ *”將其運算物件進行若干次連線,因此 0*表示若干個0構成的串,而 (10*1)*則表示偶數個1構成的串。【答案:B】
【試題 2-31】2009年 11月真題 50
由某上下文無關文法M[S]推匯出某句子的分析樹如圖所看到的,則錯誤敘述的是( 50)。
(50)A.該文法推匯出的句子必須以“a”開頭
B.acabcbdcc是該文法推匯出的一個句子
C.“S → aAcB”是該文法的一個產生式
D.a、b、c、d屬於該文法的終結符號集
分 析:上圖是某上下文無關文法M[S]推匯出某句子的分析樹,看圖僅僅要稍作推導就可推出 “acabcbdcc”
是該文法推匯出的一個句子;看該分析樹的第一層分枝就可以知 “S → aAcB”是該文法的一個產生式;而 a、b、 c、d由於在圖中是分析樹的葉子,都是該文法的終結符號;右邊的B分枝下有S → Bd,B →ε,所以該文法推匯出的句子不一定是“a”開頭,因此答案A是不對的。【答案:A】
【試題 2-32】2009年 5月真題 48
下圖所看到的有限自己主動機的特點是(48)。
(48)A.識別的0、1串是以0開頭且以1結尾
B.識別的0、1串中1的數目為偶數
C.識別的0、1串中0後面必須是1
D.識別的0、1串中1不能連續出現
分 析:由圖可知,從初始態q0輸入0仍然到q0或者輸入1到達終態q1,從q1還能夠輸入0又一次到達初始態 q0,所以這個有限自己主動機識別的 0、1串不一定是以0開頭的,1的數目的奇偶性也沒辦法確定,0後面也能夠是 0,所以A、B、C都是錯誤的。從q0輸入1到達終態q1後,或者串結束,或者輸入0再到q0,所以這個串中的1不會連續出現,D是正確的。【答案:D】
【試題 2-33】2009年 5月真題 49
由a、b構造且僅包括偶數個a的串的集合用正規式表示為( 49)。
(49)A.(aa)b* B.(b (aba))* C.(a (ba)b) D.(a|b) (aa)*
分 析:本題主要考察考生對閉包概念的理解。【答案:B】
Σ*:指包含空串ε在內的Σ上全部字串的集合。關鍵在於Σ*可取空串ε。理解了這個概念就不難看出答案B是正確的。
【試題 2-34】2009年 5月真題 50
程式語言的大多數語法現象可用上下文無關文法描寫敘述。對於一個上下文無關文法G=(N,T,P,S),當中N是非終結符號的集合,T是終結符號的集合,P是產生式集合,S是開始符號。令集合V= N∪ T,那麼 G所描寫敘述的語言是(50)的集合。
(50)A.從S出發推匯出的包括V中全部符號的串 B.從S出發推匯出的僅包括T中符號的串
C.N中全部符號組成的串 D.T中全部符號組成的串
分 析:若V∈N∪V,依據上下文無關文法的特性,V總能夠被字串N∪V自由地替換。但當V= N∪T時,因為非終結符的不唯一性,要構成等式成立,必需要N∪T中的符號串收縮為終結符,即都是T的集合。所以上下文無關文法G描寫敘述的語言是從S出發推匯出的僅包括T中符號的串的集合。【答案:B】
【試題 2-35】2008年 12月真題 48
給定文法G[S]及其非終結符A,FIRST(A)定義為:從 A出發能推匯出的終結符號的集合( S是文法的起始符號,為非終結符)。對於文法G[S]:
S→[L] | a
L→L, S| S
當中,G[S]包括的四個終結符號分別為:a , [ ]
則FIRST(S)的成員包含( 48)。
(48)A.a B.a、[ C.a、[和] D.a、[、]和,分 析:由S→[L] | a得S→[L]和S→a,所以FIRST(S)={[,a}。【答案:B】
【試題 2-36】2008年 12月真題 50
設某上下文無關文法例如以下:S→11 | 1001 | S0 |SS,則該文法所產生的全部二進位制字串都具有的特點是
(50)。
(50)A.能被3整除 B.0、1出現的次數相等
C.0和1的出現次數都為偶數 D.能被2整除
分 析:本題考查上下文無關文法產生的字串集合。【答案:A】
B選項:由S→11,B顯然不對。
C選項:由S→11和S→0S有S→011,C不對。
D選項:由S→11,二進位制11為十進位制3,不能被2整除,D不對。
【試題 2-37】2008年 5月真題 21
已知某文法G[S]:S→0S0 S→1,從S推匯出的符號串可用(21) (n≥0) 描寫敘述。
分 析:推導樹為:
能夠看出S →1就結束了,所以不可能產生1n(C、D被排除)。也不可能產生010010010…這種式子,還是由於S →1就結束了,不會有多個1這種式子的。【答案:B】
【試題 2-38】2008年 5月真題 48
有限自己主動機( FA)可用於識別高階語言源程式中的記號(單詞),FA可分為確定的有限自己主動機( DFA)和不確定的有限自己主動機(NFA)。若某DFA D與某NFA M等價,則( 48)。
(48)A.DFA D與NFA M的狀態數一定相等
B.DFA D與NFA M可識別的記號同樣
C.NFA M能識別的正規集是DFA D所識別正規集的真子集
D.DFA D能識別的正規集是NFA M所識別正規集的真子集分 析:本題考查DFA和NFA的相關知識。【答案:B】有限自己主動機的確定化:對於任一個NFA M,都能夠構造其相應的DFA M',使這兩個自己主動機接受同樣的
字串集合:L(M ) ' =L(M) 。所以B正確。
【試題 2-39】2008年 5月真題 49
某確定性有限自己主動機(DFA)的狀態轉換圖如圖所看到的,令d=0|1|2|...|9,則下面字串中,能被該DFA接受的是(49)。
(49)A.3857 B.1.2E+5
C.-123.67 D.0.576E10
分 析:如圖,從初態0開始走各種能走的路線到達終態6,加上條件d=0|1|2|...|9,非常easy得出-123.67,路線是 0 →→→→4156 。【答案:C】