日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用自动机识别c 语言单词,第03章 词法分析与有穷自动机(2).ppt

發(fā)布時間:2024/3/12 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用自动机识别c 语言单词,第03章 词法分析与有穷自动机(2).ppt 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

《第03章 詞法分析與有窮自動機(2).ppt》由會員分享,可在線閱讀,更多相關(guān)《第03章 詞法分析與有窮自動機(2).ppt(59頁珍藏版)》請在人人文庫網(wǎng)上搜索。

1、3.4.5 DFA的化簡,1. DFA的化簡,所謂一個DFA M 的化簡是指尋找一個狀態(tài)數(shù)比 M 少的 DFA M ,使得 L(M)=L(M) 。,(1) 沒有多余狀態(tài)。,化簡了的DFA滿足兩個條件:,(2) 它的狀態(tài)集中沒有兩個狀態(tài)是 互相等價的。,所謂有窮自動機的多余狀態(tài)是指從該自動機的開始狀態(tài)出發(fā),任何輸入串不能到達的狀態(tài)。,3.4.5 DFA的化簡,2. 多余狀態(tài),3.等價狀態(tài),設(shè) DFA M(Q,f, S0, Z), s, t Q ,若對任何 *, f (s , )Z 當且僅當 f (t , )Z ,則稱狀態(tài) s 和 t 是等價的。,例如,終態(tài)與非終態(tài)是可區(qū)別的。因為終態(tài)有一條到達自。

2、身的道路,而非終態(tài)沒有到達終態(tài)的道路。,3.4.5 DFA的化簡,如果 s 和 t 不等價, 則稱 s 和 t 是可區(qū)別的。,5.化簡方法,一致性條件: 狀態(tài)s和t必須同時為 終態(tài)或非終態(tài)。,4.兩個狀態(tài)等價的條件:,蔓延性條件: 對于所有輸入符號a, 狀態(tài) s 和 t 必須轉(zhuǎn)到等價的狀態(tài)里。,輸入:一個DFA M 。,輸出:接受與M相同語言的DFA M , 且其狀態(tài)數(shù)最少。,3.4.5 DFA的化簡,無多余狀態(tài)下把M的狀態(tài)集 Q劃分成一些不相交的子集,使得每個子集中任何兩個狀態(tài)是等價的,而任何兩個屬于不同子集的狀態(tài)都是可區(qū)別的。,化簡方法:,然后在每個子集中任取一個狀態(tài)作“代表”, 而刪去子。

3、集中其余狀態(tài), 并把射向其余狀態(tài)的箭弧都改作射向作“代表”的狀態(tài)中。,3.4.5 DFA的化簡,A,F,G,I,L,M,W,Z,E,H,K,O,R,T,X,A,M,W,H,T,下面給出化簡算法的具體執(zhí)行步驟:,1. 將DFA M的狀態(tài)集Q分成兩個子集:終態(tài)集F和非終態(tài)集F,形成初始分劃。,2. 對使用如下方法建立新劃分NEW:,(1) 把G劃分成新的子集,使得G的兩個狀態(tài)s和t屬于同一子集,當且僅當對任何輸入符號a ,狀態(tài)s和t轉(zhuǎn)換到的狀態(tài)都屬于的同一子集。,對的每個狀態(tài)子集G:,3.4.5 DFA的化簡,用G劃分出的所有新子集替換G, 形 成新的劃分NEW;,如果NEW,則執(zhí)行第4步;否則令。

4、 NEW,重復(fù)第2步。,劃分結(jié)束后,對劃分中的每個狀態(tài)子集,選出一個狀態(tài)作代表,而刪去其它一切等價的狀態(tài),并把指向其它狀態(tài)的箭弧改為指向這個作為代表的狀態(tài)。,3.4.5 DFA的化簡,例1. 將右面的DFA最小化,初始分劃=(A,B,C,DE),A,B,C,Da=B,分析 由圖可知,給定的DFA中無多余狀態(tài)。,A,B,C,Db=C,D,E,=(A,B,CDE),A,B,Ca=B,A,B,Cb=C,D,=(A,CBDE),A,Ca=B,A,Cb=C,=(A,CBDE),a,例2. 將右面的DFA M最小化,1,2l =2,=(1,20),分析 由圖可知,給定的DFA無多余狀態(tài)。,初始分劃=(1,。

5、20),1,2d =2,3.4.5 DFA的化簡,3.4.6 有窮自動機到正規(guī)式的轉(zhuǎn)換,1. 在 M 的轉(zhuǎn)換圖上添加兩個結(jié)點: X 結(jié)和Y結(jié)。從X結(jié)點用連線連結(jié)到M的所有初態(tài)結(jié)點,從 M 的所有終態(tài)結(jié)點用連線連結(jié)到 Y 結(jié),從而構(gòu)成一新的非確定有窮自動機 M,它只有一個初態(tài)結(jié) X和一個終態(tài)結(jié)Y。顯然,L(M)=L(M)。即,這兩個NFA是等價的。,3.4.6 有窮自動機到正規(guī)式的轉(zhuǎn)換,2. 逐步消去M中的其它結(jié)點,直至只剩下X,Y結(jié)點。在消除結(jié)點過程中,逐步用正規(guī)式來標記相應(yīng)的箭弧。,消除結(jié)點的過程是很直觀的,只需反復(fù)使用下圖的替換規(guī)則即可。,3.4.6 有窮自動機到正規(guī)式的轉(zhuǎn)換,對于,代換為。

6、,對于,代換為,代換為,對于,3.4.6 有窮自動機到正規(guī)式的轉(zhuǎn)換,例1. 設(shè)有窮自動機的狀態(tài)圖如圖所示,試求該自動機識別語言的正規(guī)式。,R=(10|01)(10|01)*,3.5 正規(guī)文法與有窮自動機,前面提到程序設(shè)計語言的單詞符號可用喬母斯基3型文法正規(guī)文法來描述 對于正規(guī)文法所描述的語言可用一種有窮自動機來識別 下面分別就左線性正規(guī)文法/右線性正規(guī)文法給出構(gòu)造相應(yīng)有窮自動機的方法,3.5 正規(guī)文法與有窮自動機,右線性正規(guī)文法到有窮自動機的轉(zhuǎn)換方法,則相應(yīng)的有窮自窮自動機 M = (Q , , f , q0 , Z ),1. 令 Q= VND (D VN) Z=D = VT q0=S,2.。

7、 對G中每一形 AaB (A ,BVN ,aVT) 的產(chǎn)生式 , 令 f (A , a)=B,設(shè)給定了一個右線性正規(guī)文法 G = (VN ,VT , P , S),a= AB 令f (A , )=B,AaB Aa,3.5.1 右線性正規(guī)文法到有窮自動 機的轉(zhuǎn)換方法,3. 對G中每一形如Aa(AVN ,aVT) 的產(chǎn)生式, 令 f (A , a)=D,4. 對G中每一形如A (AVN )的產(chǎn)生 式, 令A(yù)為接受狀態(tài)或令 f (A , )=D,例1 構(gòu)造下述文法GZ的有窮自動機。,Z0A,A0A | 0B,B1A | ,M = (Q , , f , q0 , Z ),G = (VN ,VT , P。

8、 , S),M=(VN D, VT ,f, Z, D),M=( Z,A,B,D, 0,1),f, Z, D),f =? 根據(jù)規(guī)則來確定,f(Z,0)=A f(Z,1)= f(z, )= f(A,0)=A,B f(A,1)= f(A, )= f(B,0)= f(B,1)=A f(B, )=D,Z0A,A0A | 0B,B1A | ,AaB (A ,BVN ,aVT),令 f (A , a)=B,Aa(AVN ,aVT), 令 f (A , a)=D,A (AVN ), 令A(yù)為接受狀態(tài) 或令 f (A , )=D,3.5.2 左線性正規(guī)文法到有窮自動 機的轉(zhuǎn)換方法,則相應(yīng)的有窮自窮自動機 M = 。

9、(Q , , f , q0 , Z ),1. 令 Q= VNq0 (q0 VN) Z=S = VT,2. 對G中每一形如 ABa (A ,BVN ,aVT) 的產(chǎn)生式, 令 f (B , a)=A,設(shè)給定了一個左線性正規(guī)文法 G = (VN ,VT , P , S),a= AB 令f (B , )=A,ABa Aa,3.5.2 左線性正規(guī)文法到有窮自動 機的轉(zhuǎn)換方法,3. 對G中每一形如 Aa (AVN, aVT) 的產(chǎn)生式, 令 f (q0 , a) =A,例1. 構(gòu)造下述文法GA的自動機。,其狀態(tài)圖如下圖所示。,顯然,該自動機是確定的。它識別的語言就是文法GA所描述的語言。 即 L(GA)。

10、=L(M)=00*11*,BB0 | 0,AA1 | B1,3.5.3 有窮自動機到正規(guī)文法的轉(zhuǎn)換,設(shè)給定有窮自動機M = (Q , , f , q0 , Z ),則相應(yīng)的正規(guī)文法 G = (VN ,VT , P , S),1. 令 VN = Q VT = S = q0,3. 若f (A,a)=B 且BZ時,則將產(chǎn)生式 AaB | a 或?qū)a(chǎn)生式AaB、B 加到P中。,3.5.3 有窮自動機到正規(guī)文法的轉(zhuǎn)換,若文法的開始符號S是一個終態(tài),則 將產(chǎn)生式 S 加到P中。,例1 設(shè)有窮自動機 M=(S,A,a,b,0,1 ,f , S , A),M的狀態(tài)轉(zhuǎn)換圖如圖所示。,根據(jù)上述轉(zhuǎn)換規(guī)則,與M等價的。

11、正規(guī)文法G為:,其中P:,自動機M所識別的語言L(M)=L(G)=(a|b)(0|1|a|b)*。,f (S,a)=A f (S,b)=A,f (A,a)=A f (A,b)=A,f (A,0)=A f (A,1)=A,其中,G=(S,A,a,b,0,1,P,S),SaA | bA | a | b,AaA | bA| 0A | 1A | a | b | 0 | 1,例3 設(shè)DFA M=(A,B,C,D,0,1, , A,B),該自動機相應(yīng)的狀態(tài)轉(zhuǎn)換圖如下圖所示。,構(gòu)造一個右線性文法G,使得L(G)=L(M)。, (A,0)=B (A,1)=D, (B,0)=D (B,1)=C, (C,0)=B。

12、 (C,1)=D, (D,0)=D (D,1)=D,其中:,從狀態(tài)轉(zhuǎn)換圖可以看出, 狀態(tài)D是多余的,可以去掉,于是得到與M等價的DFA M的狀態(tài)轉(zhuǎn)換圖如圖所示。,3.5.3 有窮自動機到正規(guī)文法的轉(zhuǎn)換,3.5.3 有窮自動機到正規(guī)文法的轉(zhuǎn)換,G=(A,B,C,0,1, P, A)其中P為,或,該自動機所識別的語言為 0(10)*。,A0B | 0,B1C,C0B | 0,根據(jù)轉(zhuǎn)換規(guī)則所求右線性文法為,A0B,B1C | ,C0B,C,A,0,0,1,3.6 詞法分析程序的編寫方法,構(gòu)造詞法分析程序的方法:,第二種方法是利用詞法分析程序的自動生成工具LEX自動生成詞法分析程序,第一種方法是用手工。

13、方式,即根據(jù)識別語言單詞的狀態(tài)轉(zhuǎn)換圖,使用某種高級語言,例如C語言直接編寫詞法分析程序。,下面以某種簡單語言為例,對第一種方法作簡要的介紹。,例如,下表列出了某個簡單語言的所有單詞符號,以及它們的種別編碼和單詞值。,右圖是一張識別前表的單詞符號的狀態(tài)轉(zhuǎn)換圖。,圖中, 狀態(tài)0為初態(tài), 凡帶雙圈者均為終態(tài); 狀態(tài)17是識別不出單詞符號的出錯情況。 l 代表任一字母,d 代表任一數(shù)字。,根據(jù)這張轉(zhuǎn)換圖,我們用C語言直接編寫出識別該語言所有單詞的詞法分析程序。,3.6 詞法分析程序的編寫方法,在例中,我們規(guī)定所有關(guān)鍵字, 用戶不得使用它們作為自己定義的標識符,這樣我們可以把關(guān)鍵字作為一類特殊的標識符來。

14、處理,不再專設(shè)對應(yīng)的轉(zhuǎn)換圖。但需把它們預(yù)先安排在一個表格中,此表叫關(guān)鍵字表。當利用狀態(tài)轉(zhuǎn)換圖識別出一個標識符時,就去查關(guān)鍵字表,以確定它是否是一個關(guān)鍵字。,其次規(guī)定,若關(guān)鍵字、標識符和常數(shù)之間沒有確定的運算符或界符作間隔,則必須至少用一個空白符作間隔,即此時的空白符是有意義的。,根據(jù)狀態(tài)轉(zhuǎn)換圖構(gòu)造出詞法分析程序最簡單的辦法是讓每個狀態(tài)對應(yīng)一小段程序。,1. ch 字符變量,存放當前讀進的源程序字符。,2. token 字符數(shù)組, 存放構(gòu)成單詞符號的字符串。,3. getch( )讀字符函數(shù),每調(diào)用一次從輸入緩沖區(qū)中讀進源程序的下一個字符放在ch中,并把讀字符指針指向下一個字符。,4. getb。

15、c( )函數(shù),每次調(diào)用時,檢查ch中的字符是否為空白字符,若是空白字符,則反復(fù)調(diào)用getbc( ),直至ch中進入一個非空白字符為止。,首先,我們引進詞法分析程序所用的全局變量和需調(diào)用的函數(shù)如下:,3.6 詞法分析程序的編寫方法,6. letter(ch) 和 degit(ch)布爾函數(shù),它們分別判定 ch 中的字符是否為字母和數(shù)字, 從而給出true 或 false。,7. reserve( )整型函數(shù),對token中的字符串查關(guān)鍵字表,若它是一個關(guān)鍵字, 則回送它的編碼,否則回送標識符的種別碼10。,5. concat( )函數(shù),每次調(diào)用把當前ch中的字符與token中的字符串聯(lián)接。例如,。

16、假定token字符數(shù)組中原有值為 “ab”, ch中存放著 “c”,經(jīng)調(diào)用concat( )后,token數(shù)組中的值變?yōu)椤癮bc”。,3.6 詞法分析程序的編寫方法,8. retract( )函數(shù),讀字符指針回退一個字符。,9. return( )函數(shù),收集并攜帶必要的信息返回調(diào)用程序,即返回語法分析程序。,10. dtb( ) 進制轉(zhuǎn)換函數(shù), 它將token中的數(shù)字串轉(zhuǎn)換成二進制數(shù)值表示, 并以此作為函數(shù)值返回。,根據(jù)該語言的狀態(tài)轉(zhuǎn)換圖用C語言編寫出詞法分析程序如下:,Scaner( ) token=NULL; getch( ); getbc( ); if (letter(ch) while。

17、(letter(ch) | digit(ch) concat( ); getch( ); retract( ); c=reserve( ); if(c!=10) return(c,token); else return( 10,token); ,相對于狀態(tài)轉(zhuǎn)換圖用C語言編寫出詞法分析程序如下:,else if(digit(ch) while (digit(ch) concat( ); getch( ); retract( ); return(11,dtb( ); ,else switch(ch) case+: return(13, ); break ; case-: return(14, );。

18、 break ; case*: return(15, ); break ; case/: return(16, ); break ; case) return(18, ); retract( ); return(19, ); break; case: : getch( ); if(ch= = =) return(22, ); retract( ); return(21, ); break; case;: return(23, ); break; default: error( ); break; ,由此可知, 只要構(gòu)造出識別語言單詞符號的有窮自動機, 就很容易構(gòu)造出識別語言單詞符號的詞法分析程。

19、序。,3.6 詞法分析程序的編寫方法,作業(yè),1、用正規(guī)式描述下列正規(guī)集: (1)C語言的十六進制整數(shù); (2)以ex開始或以ex結(jié)束的所有小寫字母構(gòu)成的符號串; (3)十進制的偶數(shù)。 2、構(gòu)造下列正規(guī)式所對應(yīng)的最小化確定有限自動機: (1)(aa|b)*(a|bb)* (2)ab*c*d (3)(a|b)*| bb)*,本章小結(jié),本章重點介紹了詞法分析程序的設(shè)計思想和構(gòu)造方法。主要內(nèi)容有:,1. 詞法分析程序的功能是從左到右掃描源程序字符串,根據(jù)語言的詞法規(guī)則識別出各類單詞符號。,輸出單詞符號的形式是二元組: (單詞種別,單詞自身值),本章小結(jié),例如定義“標識符”單詞的正規(guī)式是 l (l | 。

20、d)*,正規(guī)文法是 標識符 l |標識符l | 標識符d,2程序語言單詞符號的兩種定義方式,正規(guī)文法,正規(guī)式,本章小結(jié),3有窮自動機有確定的和非確定兩大類:,NFA N = (Q , , f , S , Z )其中f是多值映射函數(shù),S為非空初態(tài)集。,有窮自動機通常表示為狀態(tài)轉(zhuǎn)換圖,它是有窮自動機的非形式化描述。,DFA M = (Q , , f , S , Z )其中是f單值映射函數(shù),S是唯一初態(tài),本章小結(jié),從單詞兩種定義方式中構(gòu)造詞法分析程序的過程是:,4正規(guī)式、正規(guī)文法和有窮自動機三者都是描述正規(guī)集的工具, 它們的描述能力是等價的,它們之間可相互轉(zhuǎn)換。,5證明兩正規(guī)式是等價的,如果它們的最。

21、小狀態(tài)DFA是相同的。也可以利用正規(guī)式的基本等價關(guān)系將一個正規(guī)式化簡來證明兩正規(guī)式之間的等價性或兩正規(guī)式識別的語言一樣。,本章小結(jié),本章小結(jié),例1 構(gòu)造正規(guī)式R=1(0|1)*101的狀態(tài)最小化的DFA,分析 首先對R采用分裂法構(gòu)造NFA,見下圖:,對NFA采用子集法構(gòu)造其等價的DFA的狀態(tài)轉(zhuǎn)換矩陣,見右表,A F B C D E,字符,狀態(tài),0,1,X,1,2,3,2,3,4,2,3,5,2,3,4,Y,2,3,2,3,1,2,3,2,3,4,2,3,2,3,4,2,3,5,2,3,4,2,3,2,3,4,Y,2,3,5,2,3,4,本章小結(jié),對DFA采用分化的方法化簡,得到狀態(tài)最小化的DF。

22、A,見下圖 :,例2. 構(gòu)造一個DFA它接收=0,1上所有滿足如下條件的字符串,每個1都有0直接跟在右邊。,分析 首先給出描述語言的正規(guī)式R=(0|10)*,采用分裂法從正規(guī)式構(gòu)造NFA,采用子集法將NFA確定化為DFA,采用分化方法將DFA化簡,字符,狀態(tài),0,1,X,A,Y,B,A,Y,A,Y,B,B,A,Y,A,Y,分析 給出描述語言的正規(guī)文法,S0S | 1A | A 0S,根據(jù)右線性文法構(gòu)造有窮自動機的方法, 構(gòu)造出如下的狀態(tài)轉(zhuǎn)換圖:,例2. 構(gòu)造一個DFA它接收=0,1上所有滿足如下條件的字符串,每個1都有0直接跟在右邊。,S0A | 1B A1S | 1 B0S | 0,分析 根。

23、據(jù)正規(guī)文法轉(zhuǎn)換成正規(guī)式的方法,首先給出該 正規(guī)文法對應(yīng)的正規(guī)式方程組:,S=0A+1B (1) A=1S+1 (2) B=0S+0 (3),將(2)、(3)代入(1)得 S=01S+01+10S+10 (4),對(4)使用求解規(guī)則得 S=(01|10)(01|10),即正規(guī)文法所生成語言的正規(guī)式是(01|10)(01|10)。,例3. 給出下述文法所對應(yīng)的正規(guī)式:,例4 將右圖確定化和最小化。,圖示是一個無 邊轉(zhuǎn)移的NFA,采用子集法將NFA確定化為DFA,采用分化方法將DFA化簡,本章小結(jié),字符,狀態(tài),a,b,0,1,0,1,0,1,1,1,0,1,0,本章小結(jié),例4. 設(shè)字母表=a,b,給出上的正規(guī)式 R= b*ab(b|ab)*,1. 試構(gòu)造狀態(tài)最小化的DFA M,使得 L(M)=L(R)。,2. 求右線性文法G,使L(G)=L(M)。,本章小結(jié),對正規(guī)式R=b*ab(b|ab)*采用分列法構(gòu)造NFA,見下圖。,對NFA采用子集法構(gòu)造其等價的DFA的狀態(tài)轉(zhuǎn)換矩陣,見表。,X B A Y E F,字符,狀態(tài),a,b,X,1,2,1,2,4,5,Y,6,5,Y,3,3,3,1,2,1,2,4,5,Y,6,5,Y,5,Y,6,5,Y,本章小結(jié),對DFA采用分化的方法得到狀態(tài)最小化的DFA,見圖。

總結(jié)

以上是生活随笔為你收集整理的利用自动机识别c 语言单词,第03章 词法分析与有穷自动机(2).ppt的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。