版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1
詞法分析是編譯的第一個階段,它的主要任務是從左到右逐個字符地對源程序進行掃描,產生一個個單詞序列。詞法分析階段設計的主要問題是字符串(單詞)的識別問題。具體說,如何判定任意的一個字符串是否為合法字符串(單詞)的問題。第1頁/共68頁2
字符串(單詞)集合可用不同的工具來表示,常見的有:因此,要研究如何從正規(guī)表達式或自動機構造出相應的單詞識別器的問題。這種識別器在編譯器中稱為詞法分析器。單詞的描述技術:正規(guī)式。識別機制:有窮自動機(有限自動機)。第2頁/共68頁3
構造詞法分析器的前提是給出語言中單詞結構的定義。不同語言的單詞類別和結構不完全相同,因此不同語言的詞法分析器也不盡相同,但是其構造原理是類似的。構造方法:①有窮自動機(有限自動機)。②正規(guī)式(正規(guī)集)。第3頁/共68頁4本章重點首先需要描述和刻畫程序設計語言中的原子單位——單詞,其次需要識別單詞和執(zhí)行某些相關的動作。程序設計語言的詞法的描述機制是正則表達式,識別機制是有窮狀態(tài)自動機。單詞的描述工具單詞的識別系統第4頁/共68頁5§3.1
有窮自動機第5頁/共68頁6
有窮自動機(也稱有限自動機)作為一種識別裝置,它能準確地識別正規(guī)集,即識別正規(guī)文法所定義的語言和正規(guī)式所表示的集合。引入有窮自動機這個理論,正是為詞法分析程序的自動構造尋找特殊的方法和工具。確定的有窮自動機(DeterministicFiniteAutomata)不確定的有窮自動機(NondeterministicFiniteAutomata)第6頁/共68頁7關于有窮自動機將討論以下問題一、確定的有窮自動機DFA二、不確定的有窮自動機NFA三、具有ε動作的FA四、NFA到DFA的變換第7頁/共68頁8一、確定的有窮
自動機DFA第8頁/共68頁9確定的有窮自動機DFA的定義
一個確定的有窮自動機(DFA)M是一個五元組:M=(Q,Σ,δ,S,Z)其中
1.Q是一個有窮集,它的每個元素稱為一個狀態(tài);
2.Σ是一個有窮字母表,它的每個元素稱為一個輸入符號;第9頁/共68頁103.δ是轉換函數,是在Q×Σ→Q上的單值映射,如δ
(p,a)=q,(p∈Q,q∈Q)意味著,當前狀態(tài)為P,輸入符為a時,將轉換為下一個狀態(tài)Q,我們把q稱作p的一個后繼狀態(tài);4.S∈Q是唯一的一個初態(tài);5.Z
Q是一個終態(tài)集,終態(tài)也稱可接受狀態(tài)或結束狀態(tài)。第10頁/共68頁11對定義的解釋所謂自動機不是一臺實際的機器,而是一種數學模型,來模擬計算機的識別功能。所謂確定性是指δ
(p,a)→q,q是唯一的。用上述定義中的5條來識別一個序列是否可被機器接收。接收→格式正確第11頁/共68頁12DFA的例子DFAM=({S,U,V,Q},{a,b},δ,S,{Q})其中δ定義為:δ
(S,a)=U δ
(V,a)=Uδ
(S,b)=V δ
(V,b)=Qδ
(U,a)=Q δ
(Q,a)=Qδ
(U,b)=V δ
(Q,b)=Q以上定義不直觀,DFA有兩種較直觀的表示方法。第12頁/共68頁13DFA的表示方法1(狀態(tài)轉換圖)
一個DFA可以表示成一個狀態(tài)圖(或稱狀態(tài)轉換圖)。假定DFAM含有m個狀態(tài),n個輸入字符,那么這個狀態(tài)圖含有m個結點,每個結點最多有n個弧射出,每條弧用Σ中的一個不同輸入字符作標記。整個圖含有唯一一個初態(tài)結點和若干個終態(tài)結點,初態(tài)結點冠以雙箭頭“=>”,終態(tài)結點用雙圈表示,若δ
(p,a)=q,則從狀態(tài)結點p到狀態(tài)結點q畫標記為a的弧;第13頁/共68頁14
DFA的狀態(tài)圖表示bSUVQaaaba,bb第14頁/共68頁15DFA的表示方法2(狀態(tài)轉換矩陣)
一個DFA還可以用一個矩陣表示,該矩陣的行表示狀態(tài),列表示輸入字符,矩陣元素表示相應狀態(tài)行和輸入字符列下的新狀態(tài),即p行a列為δ
(p,a)的值。用雙箭頭“=>”標明初態(tài);否則第一行即是初態(tài),相應終態(tài)行在表的右端標以1,非終態(tài)標以0。第15頁/共68頁16狀態(tài)轉換矩陣表示字符狀態(tài)0001第16頁/共68頁17DFA的識別功能
對于∑*中的任何字符串t,若存在一條從初態(tài)結到某一終態(tài)結的道路,且這條路上所有弧的標記符連接成的字符串等于t,則稱t為DFAM所接受(識別)。
若M的初態(tài)結同時又是終態(tài)結,則ε可被識別。第17頁/共68頁1800011110100011100000010001100第18頁/共68頁19
DFAM所能接受的符號串的全體記為L(M)。對于任何兩個有窮自動機M和M′,如果L(M)=L(M′),則稱M與M′是等價的。DFA的等價第19頁/共68頁20確定性DFA的確定性表現在轉換函數δ:Q×Σ→Q是一個單值函數,也就是說,對任何狀態(tài)P∈K,和輸入符號a∈Σ,δ(p,a)唯一地確定了下一個狀態(tài)。從狀態(tài)轉換圖來看,若字母表Σ含有n個輸入字符,那末任何一個狀態(tài)結點最多有n條弧射出,而且每條弧以一個不同的輸入字符標記。第20頁/共68頁21二、非確定的有
窮自動機NFA第21頁/共68頁22不確定的有窮自動機NFA的定義NFAM=Q,,δ
,S,Z,其中Q為狀態(tài)的有窮非空集,(與DFA相同)
為有窮輸入字母表,(與DFA相同)映射δ為Q→Q的多值映射,S∈Q是唯一的一個初態(tài),(與DFA相同)
ZQ為終止狀態(tài)集。(與DFA相同)第22頁/共68頁23NFA的表示方法1(狀態(tài)轉換圖)
一個含有m個狀態(tài)和n個輸入字符的NFA可表示成一個狀態(tài)轉換圖:這張圖含有m個狀態(tài)結,每個結可射出若干條箭弧與別的結相連接,每條弧用Σ中的一個字符作標記,整個圖含有一個初態(tài)結和若干個終態(tài)結。第23頁/共68頁24
NFA的識別功能
對于Σ﹡中的任何一個串t,若存在一條從某一初態(tài)結到某一終態(tài)結的道路,且這條道路上所有弧的標記字依序連接成的串等于t,則稱t可為NFAM所識別(讀出或接受)。
NFAM所能接受的符號串的全體記為L(M)。第24頁/共68頁25三、具有ε動作的FA第25頁/共68頁26
前面在定義NFA和DFA時,對映射的限制是僅當FA掃視Σ中的一個字符時,才發(fā)生狀態(tài)的轉移。如果弧上允許標記ε,即允許FA對ε也作狀態(tài)的轉移,則稱此自動機為ε自動機,記為εNFA。第26頁/共68頁27FA中映射δ的擴充映射δ為Q*到Q的子集。
對于Σ﹡中的任何一個串t,若存在一條從初態(tài)結到某一終態(tài)結的道路,且這條道路上所有弧的標記字依序連接成的串(不理睬那些標記為ε的弧)等于t,則稱t可為NFAM所識別(讀出或接受)。每個弧線用Σ*中的一個字作標記(字符串)第27頁/共68頁28
若M的某些結既是初態(tài)結又是終態(tài)結,或者存在一條從某個初態(tài)結到某個終態(tài)結的道路,其上所有弧的標記均為ε,那么空字可為M所接受。第28頁/共68頁29四、NFA到DFA的變換第29頁/共68頁30
在NFA中,由于某些狀態(tài)的轉移須從若干個可能的后續(xù)狀態(tài)中進行選擇,故一個NFA對符號串的識別必然是一個試探的過程。這種不確定性給識別過程帶來的反復,無疑會影響到FA的工作效率。
子集法——將具有ε動作的NFA轉換成接受同樣語言的DFA。第30頁/共68頁31NFA的確定化(子集法)
所謂確定化是指NFA→DFA的等價轉化,用子集法來進行確定化。
為此,首先定義一個狀態(tài)集合I的ε—閉包的概念。第31頁/共68頁32狀態(tài)集合I的幾個有關運算1.狀態(tài)集合I的ε-閉包表示為ε-closure(I),其中I是NFA的狀態(tài)集的一個子集。①若s∈I,則s∈ε-closure(I)。狀態(tài)集合I的任何狀態(tài)s都屬于ε-closure(I)。②若s∈I,那么從s出發(fā)經任意條ε弧而能到達的任何狀態(tài)都屬于ε-closure(I)。第32頁/共68頁332.狀態(tài)集合I的a弧轉換,表示為move(I,a)定義為狀態(tài)集合J,即J=move(I,a)。其中J是所有那些可從I中的某一狀態(tài)經過一條a弧而到達的狀態(tài)的全體。
Ia=ε-closure(J)第33頁/共68頁34狀態(tài)集合I的有關運算的例子I={1},-closure(I)={1,2};I={5},-closure(I)={5,6,2};J=move({1,2},a)=Ia=-closure({5,3,4})=12534687aa
a{5,3,4}{2,3,4,5,6,7,8};第34頁/共68頁35NFA確定化的步驟設∑={a,b},則NFA的確定化步驟如下:1、造一張表,包含三列,第一列為I,余下的兩列為Ia,Ib。2、置首行首列為ε_closure{S}。3、若某行首列對應子集已確定,則計算Ia,以及Ib;新出現狀態(tài)子集加入下行首列。4、重復3,直至狀態(tài)子集收斂。5、狀態(tài)子集重新命名。第35頁/共68頁364Y35621X
aaaabbbb第36頁/共68頁37
等價的DFAa34215F0baaaaabbbbbab6第37頁/共68頁38§3.2
正規(guī)集、正規(guī)文法和正規(guī)式第38頁/共68頁39本節(jié)將討論以下問題一、正規(guī)式與正規(guī)集二、正規(guī)集與正規(guī)文法三、正規(guī)文法和正規(guī)式第39頁/共68頁40一、正規(guī)式與
正規(guī)集
第40頁/共68頁41正規(guī)式
正規(guī)式也稱正則表達式,正規(guī)表達式(regularexpression)是說明單詞的模式的一種重要的表示法(記號),是定義正規(guī)集的數學工具。我們用以描述單詞符號。程序設計語言的單詞都能用正規(guī)式來定義。下面是正規(guī)式和它所表示的正規(guī)集的遞歸定義。第41頁/共68頁42設字母表為:
和都是上的正規(guī)式,它們所表示的正規(guī)集分別為{}和{};
任何a
,a是上的一個正規(guī)式,它所表示的正規(guī)集為{a};
假定e1和e2都是上的正規(guī)式,它們所表示的正規(guī)集分別為L(e1)和L(e2),那么,(e1),e1e2,e1e2,e1也都是正規(guī)式,它們所表示的正規(guī)集分別為L(e1),L(e1)L(e2),L(e1)L(e2)和(L(e1))。
僅由有限次使用上述三步驟而定義的表達式才是上的正規(guī)式,僅由這些正規(guī)式所表示的集合才是上的正規(guī)集。第42頁/共68頁43正規(guī)式中的符號在不致混淆時,括號可省去,但規(guī)定算符的優(yōu)先順序為“
”、“
”、“”。連接符“
”一般可省略不寫?!?/p>
”、“
”和“”都是左結合的?!啊弊x為“或”;“
”讀為“連接”;“
”讀為“閉包”(任意有限次的自重復連接)。第43頁/共68頁44令
={a,b},上的正規(guī)式和相應的正規(guī)集有:
正規(guī)式 正規(guī)集
a {a}ab {a,b}ab {ab}(ab)(ab) {aa,ab,ba,bb}a{,a,a,……任意個a的串}第44頁/共68頁45
正規(guī)式 正規(guī)集
(ab)
{,a,b,aa,ab……所有由a和b組成的串}(ab)
(aabb)(ab)
{
上所有含有兩個相繼的a或兩個相繼的b組成的串}ba
{b,ba,baa,baaa,baaaa,……}第45頁/共68頁46兩個正規(guī)式等價
若兩個正規(guī)式e1和e2所表示的正規(guī)集相同,則說e1和e2等價,寫做e1=e2。e1=(ab)e2=bae1=b(ab)
e2=(ba)
be1=(ab)
e2=(a
b
)
第46頁/共68頁47性質rs=sr “或”服從交換律
r(st)=(rs)t“或”的可結合律
(rs)t=r(st) “連接”的可結合律
r(st)=rsrt (st)r=srtr 分配律
εr=rrε=r設r,s,t為正規(guī)式:第47頁/共68頁48二、正規(guī)集與
正規(guī)文法第48頁/共68頁49
正規(guī)文法是描述正規(guī)集的文法,它可以用來描述高級語言的詞法部分。在寫正規(guī)集的文法時,要特別注意所給出的產生式形式必須滿足正規(guī)文法的限制。第49頁/共68頁50三、正規(guī)文法
和正規(guī)式第50頁/共68頁51
正規(guī)式與正規(guī)文法都用來描述程序語言的詞法結構,它們有著相同的表達能力。對于任意一個正規(guī)文法,存在一個定義同一個語言的正規(guī)式;反之,對每個正規(guī)式,都存在一個生成同一語言的正規(guī)文法。第51頁/共68頁52正規(guī)文法→正規(guī)式
首先求出正規(guī)文法G的各個產生式對應的正規(guī)式方程式,獲得一個聯立方程組。這些方程式中的變元是文法G中的非終結符,各變元的系數是正規(guī)式。然后求解這個正規(guī)式方程組,最后得到一個關于開始符號S的解:
S=w,w∈VT*
解正規(guī)式方程組的基本方法是用代入法逐個替換方程式右部的各非終結符,最后可得到關于開始符號S的解。第52頁/共68頁53§3.4
正規(guī)式與NFA第53頁/共68頁54正規(guī)式與FA在描述語言上的等價性對于一個在輸入字母表Σ上的NFAM,一定能夠構造一個Σ上的正規(guī)式e,使得L(e)=L(M)。對于一個在輸入字母表Σ上的每一個正規(guī)式e,一定能夠構造一個Σ上的NFAM,使得L(M)=L(e)。第54頁/共68頁55正規(guī)式→NFA的方法1.由e構造NFAM
把正規(guī)式e表示成拓廣轉換圖,XYe然后通過對e進行分裂和加進新結的方法,逐步把這個圖轉變?yōu)椋好織l弧的標記為Σ的一個字符或ε。轉換規(guī)則如下:第55頁/共68頁56轉換規(guī)則szR1R2AsR1zR2szR1|R2zsR1R2szR*s
z
RA第56頁/共68頁571(0|1)*1011(0|1)*101XY1X21Y(0|1)*134101X21Y134105εε01第57頁/共68頁58(a|b)*(aa|bb)(a|b)*XY(a|b)*X21Y(aa|bb)(a|b)*正規(guī)式(a|b)*(aa|bb)(a|b)*第58頁/共68頁594Y35621X
aaaabbbbX4213Yεεεεaabba|ba|b第59頁/共68頁60§3.5
DFA的化簡第60頁/共68頁61
對于一個NFA,當把它確定化之后,得到的DFA所具有的狀態(tài)數可能并不是最小的。所以,DFA的化簡,是指狀態(tài)數的最小化。定理:對于有同一接受集的FA,與之等價且有最小狀態(tài)數的DFA在同構意義下(即不顧狀態(tài)的命名)是唯一的。第61頁/共68頁62
等價狀態(tài)和可區(qū)分狀態(tài)兩個狀態(tài)s和t等價:滿足兼容性——同是終態(tài)或同是非終態(tài)傳播性——從s出發(fā)讀入某個aa和從t出發(fā)讀入某個a到達的狀態(tài)等價。第62頁/共68頁63等價狀態(tài)的舉例aCDBAEFSbaaaaabbbbbabC和F同是終態(tài):
讀入a都到達C,讀入b都到達E。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度健康養(yǎng)生類產品包裝設計合同3篇
- 二零二五版租賃房屋租賃合同網絡安全保障協議4篇
- 2025年度集裝箱裝卸運輸操作規(guī)范合同
- 二零二五年度民間個人借款合同金融創(chuàng)新服務細則
- 二零二五版農業(yè)保險代理服務合同范本8篇
- 2025年度房產抵押經營性貸款合同樣本
- 2025年南京住建部房屋租賃合同規(guī)范版
- 課題申報參考:面向微生物組中介效應的群落水平關聯檢驗方法研究
- 課題申報參考:美式“小多邊主義”沖擊下中國伙伴關系的升級與轉型研究
- 2025年木材銷售企業(yè)庫存管理服務合同
- 汽車修理廠管理方案
- 人教版小學數學一年級上冊小學生口算天天練
- 九年級上冊-備戰(zhàn)2024年中考歷史總復習核心考點與重難點練習(統部編版)
- 三年級數學添括號去括號加減簡便計算練習400道及答案
- 蘇教版五年級上冊數學簡便計算300題及答案
- 澳洲牛肉行業(yè)分析
- 老客戶的開發(fā)與技巧課件
- 計算機江蘇對口單招文化綜合理論試卷
- 成人學士學位英語單詞(史上全面)
- KAPPA-實施方法課件
- GB/T 13813-2023煤礦用金屬材料摩擦火花安全性試驗方法和判定規(guī)則
評論
0/150
提交評論