編譯原理第三章總結

2021-08-18 06:30:28 字數 4215 閱讀 5932

就像單詞是我們理解文章的基本單位,編譯程式是在單詞的級別上分析源程式的。詞法分析就是從左至右逐個字元掃瞄源程式,把字元變成單詞,把字串變成單詞符號串。

執行詞法分析的程式叫詞法分析器。向它輸入源程式,就能輸出單詞符號。這些單詞符號包括關鍵字、識別符號、常數、運算子和界符。輸出時表示成這種形式:(單詞種別,單詞符號的屬性值)。其中單詞符號的屬性值是對同一種別下單詞符號的再次劃分。

詞法分析器如何融入語法分析器呢?把詞法分析器當做乙個子程式,語法分析器需要乙個單詞符號時就呼叫這個子程式。

下面我們來設計詞法分析器,首先介紹狀態轉換圖

乙個狀態轉換圖可用於接收一定的字串。如圖所示是識別識別符號的轉換圖,0是初態,帶雙圈的2是終態。從0開始,若在狀態0下輸入的字元是乙個字母,則讀入,轉入狀態1.在狀態1下,若下乙個輸入的字元時字母或數字,則讀進它,並重新進入狀態1.重複這個過程,直到狀態1發現輸入字元不再是字母或數字時就進入狀態2,當然這個輸入的字元也被讀進了。

狀態2是終態,它意味著到此已識別出乙個識別符號,識別過程宣告終止。終態結上打個星號*意味著多讀進了乙個不屬於識別符號部分的字元,應把它退還給輸入串。如果一開始在狀態0時輸入的字元不是字母,就意味著識別不出識別符號,這個狀態轉換圖不能繼續。

狀態轉換圖是設計詞法分析程式的一種好途徑,那麼詞法分析器的整體設計是如何實現的呢?

首先輸入源程式文字,放入輸入緩衝區,然後由預處理子程式處理。預處理子程式可以改善程式的易讀性,去除文字中如空白符、跳格符、回車符和換行符等沒有意義的字元。每當詞法分析器呼叫它時,它就處理一串確定長度的輸入字元,並裝入掃瞄緩衝區中。然後分析器在此緩衝區中直接進行單詞符號的識別。當緩衝區中的字串處理完後,它又呼叫預處理程式裝入新串。

那麼分析器是如何識別單詞符號的呢?超前搜尋

什麼是超前搜尋?即超前掃瞄多個字元,超前到能夠肯定詞性的地方為止。舉個例子:比如想識別單詞doing,除了它本身以外,還有別的以doing開頭的字母,我們必須超前掃瞄,根據單詞性質,直到找到能確定它是想要的doing的字元。

為了更好的使用狀態轉換圖構造詞法分析程式,需要將上述狀態轉換圖形式化。

把具有相同特徵的字放在一起組成乙個集合,即所謂的正規集

使用一種形式化的方法來表示正規集,即所謂的正規式

正規式與正規集的定義(遞迴的定義方法)

(1)ε和φ是∑上的正規式,它們所表示的正規集分別為和φ

(2)任何a∈∑,是∑上的乙個正規式,他所表示的正規集為

(3)假定u和v都是∑上的正規式,他們所表示的正規集分別記為l(u)和l(v),那麼

(a) (u|v)是正規式,所表示的正規集為l(u)∪l(v)

(b) (uv)是正規式,所表示的正規集為l(u) · l(v)(連線積)

(c) (u)*是正規式,所表示的正規集為 (l(u))*(閉包)

僅由有限次使用(1)(2)(3)所得到的表示式才是∑上的正規式,僅由這些正規式所表示的字集才是∑上的正規集。

若兩個正規式u和v所表示的正規集相同,則認為二者等價,記為:  u = v

正規式的性質

設u,v,w是上的∑正規式,則

(1) u | v = v | u   或的交換律

(2) u | ( v|w ) = ( u|v ) | w 或的結合律

(3) u ( vw ) = ( uv ) w  連線積的結合律

(4) u ( v | w ) = ( uv ) | ( uw ) 分配律

( v | w ) u = vu | wu  

(5) εu = uε = u

下面給出一些例子:

對正規式性質的證明:

課後題6:

下面介紹確定有限自動機dfa:

定義:乙個確定有限自動機(dfa)m是乙個五元式:

m = (s, ∑, f, s0, f),其中

s是乙個有限的狀態集合,它的每個元素我們稱為乙個狀態

∑是乙個有窮的輸入符號的字母表,它的每個元素我們稱為乙個輸入字元

f是從 s×∑ →s的單值部分對映(確定性表現)

s0是s的乙個元素,為初始狀態,它是唯一的

狀態集合f是終止狀態的集合,它是s的子集(可空)

乙個dfa有確定的狀態轉換矩陣和狀態轉換圖和它對應。

定義:乙個非確定有限自動機(nfa)m是乙個五元式

m = (s, ∑, f, s0, f),其中

s是乙個有限的狀態集合,它的每個元素我們稱為乙個狀態

∑是乙個有限的輸入符號的字母表,它的每個元素我們稱為乙個輸入字元

f是從s×∑*→2s 的部分對映,其中,2s表示s的冪集合(所有s的子集組成的集合)(f是非單值的m是非確定)

狀態集合s0是初始狀態集合,它是s的子集

狀態集合f是終止狀態的集合,它是s的子集

下面給出詳細例子:(課後題7)

從上面的例子可以得出,從乙個實際問題到最簡的確定有限自動機有以下步驟:

第一步,先得到正則式。將實際問題用正則式表示:(如課後題8)

第二步,將正則式寫成狀態轉換圖,其替換規則是:

第三步,根據狀態轉換圖寫出狀態轉換矩陣:

如課後題7圖所示詳細描述。

第四步,將狀態轉換矩陣中的狀態編號,並重命名。

由得到的新編號的狀態轉換矩陣畫出dfa,此時得到未化簡的dfa。

從寫狀態轉換矩陣到得到未化簡的dfa,這些步驟做的工作是確定化

確定化使用了子集法:假定i是m』的狀態集的子集,定義i的ε閉包ε_closure(i)為:

(a)若q∈i,則q∈ε_closure(i)

(b)若q∈i,那麼從q出發經任意條ε弧而能到達的任何狀態q』都屬於ε_closure(i) ;

假定i是m』的狀態集的子集,a ∈ ∑,定義

ia =ε_closure(j)

其中,j是所有那些可從i中的某一狀態結點出發經過一條a弧而到達的狀態結點的全體

確定化這一步再舉個例子:(課後題12(a)

它後來還做了乙個工作是最小化,即將得到的dfa化簡。詳細步驟如上圖課後題7所示。

原理是將dfa m的狀態集分割為一些不相交的子集,使得任何不同的兩個子集狀態都是可區別的,而同乙個子集中的任何狀態都是等價的,最後讓每個子集選乙個代表,同時消去其他等價狀態。

再舉個例子:(課後題12(b))

同樣,相反的過程,dfa也能轉換成正則式:(其替換規則是:)

通過這一章的學習,對編譯原理的理解又深了一步。計算機理解語言大概就是將自然語言形式化,將實際問題數學模型化。將單詞的識別交給狀態轉換圖,這是非常巧妙的。對有限自動機的確定化、最小化都用了數學模型,卻使問題大大簡化了。這種思想應該貫徹到其他方面,比如我們生活的其他問題,都可以歸類、化簡。因此計算機世界和數學世界是很神奇的!



編譯原理 第三章

單詞的表示形式 用二元式來表示 單詞種別,單詞符號的屬性值 單詞符號的屬性 指單詞符號的特性或特徵。單詞符號的屬性值 反映單詞特性或特徵的值。4 狀態轉換圖法 1 狀態轉換圖 一張有限方向圖 2 狀態轉換圖的功能 識別 接受 一定的符號串 單詞 正規式與正規集 我們可以把具有相同特徵的字放在一起組成...

編譯原理 第三章

一,知識點 1.正規式與正規集的定義 遞迴的定義方法 1 和 是 上的正規式,它們所表示的正規集分別為和 2 任何a 是 上的乙個正規式,他所表示的正規集為 3 假定u和v都是 上的正規式,他們所表示的正規集分別記為l u 和l v 那麼 a u v 是正規式,所表示的正規集為l u l v b u...

編譯原理第三章學習總結

編譯原理第三章學習總結 第三章的主要內容是詞法分析,首先對於詞法分析的概念與任務來講,可以說它是編譯的基礎,所要任務是從左至右逐個字元地對源程式進行掃瞄,產生乙個個單詞符號從而將作為字串的源程式改造成單詞符號串的中間程式,主要功能便可簡化為 輸入源程式,輸出單詞符號 單詞符號的定義是乙個程式語言的基...