編譯原理 第三章詞法分析總結

2021-08-18 05:21:34 字數 3273 閱讀 5089

詞法分析

在詞法分析這一章主要通過學習了詞法分析、正規表示式和有限自動機來了解詞法分析器的構造。

詞法分析器是執行詞法分析的程式。將源程式輸入詞法分析器後,詞法分析器從左至右逐個字元的對源程式進行掃瞄,輸出相應的單詞符號,把字串形式的源程式改造成為由單詞符號串組成的程式。輸出的單詞符號一般分為:基本字(保留字、關鍵字)、識別符號、常數、運算子、界符。通常用二元式表示:《單詞種別,單詞符號的屬性值(反映單詞特性或特徵的值)>。下圖為詞法分析器的結構圖:

根據上圖簡單介紹詞法分析器的工作流程。將源程式輸入詞法分析器之後,為方便單詞識別很多情況下都會把源程式放入輸入緩衝區中進行預處理。將輸入串中的無用的空白、跳格(tab)、回車、換行等編輯性字元以及注釋行剔除(若空白符號為單詞符號的界符,就將若干空白和並為1個),處理之後源程式變為一段確定長度的輸入字元。將輸入字元放入緩衝區中進行單詞識別,單詞識別主要有3種方法:超前搜尋——在單詞識別的過程中向前多讀幾個符號,這種方式相對準確,但是掃瞄指標需要多次回退;直接分析法——根據讀到的第乙個字元的種類轉到不同的子程式處理,通過條件判斷的方式提高效率;狀態轉換圖法——使用狀態轉換圖設計詞法分析程式。狀態轉換圖法是一種很好的方式,作為重點介紹。首先介紹狀態轉換圖,狀態轉換由結點(代表狀態,用圓圈表示)、箭弧及箭弧上的標記(在射出節點下可能出現的字元或字串)三部分組成,可用於識別字串, 有乙個初態,至少要有乙個終態(用雙圓圈表示),需要注意當終態後有乙個「*」表示在該狀態下多讀進乙個字元,需退回。

首先了解正規式的概念,把具有相同特徵的字放在一起組成乙個集合叫做正規集,然後使用一種形式化的方法來表示正規集,這種表示方法就是正規式。正規式滿足交換律(「或」形式的時候滿足)、結合律、分配律,運算時要注意符號的優先順序為:「 * 」  >  「 · 」   >  「 | 」,當且僅當兩個正規式所表示的 正規集相同時,正規式等價。下面介紹有限自動機,有限自動機實際上就是狀態轉換圖的形式化表示。有限自動機可分為確定有限自動機(dfa)和非確定有限自動機(nfa),都可用五元式(m= (s, ∑, f, s0, f))、狀態轉換圖和狀態轉換矩陣表示,二者區別在於,確定有限自動機的初態唯一,對映s× ∑→s為單值函式,而非確定有限自動機的初態不唯一且為非單值對映。有限自動機的識別功能表現在對於∑*中任何字α,如果存在一條從初態結點到某個終態結點的道路,且這條路上所有的識別符號連成的字(nfa忽略空字ε)等於α ,則α可被識別,所能識別的字的全體記為l(m)。由定義容易看出看出dfa為nfa的一種特例,則一定在某些條件下可將nfa確定化為dfa,這裡採用子集法,即將準狀態轉換表中的每個狀態子集視為新狀態繼續構造。由於正規式和有限自動機存在等價性,所以二者可以用各種替換規則進行轉換。有限自動機還有乙個重點就是確定有限自動機的化簡,所謂化簡即尋找乙個狀態比dfa m少的dfa m』,使得l(m』) = l(m)。轉換與化簡都將在下面的習題體現。

習題:

1.構造下面正規式相應的dfa

1(0|1)*101

解:

知識點:由乙個正規式v,構造乙個dfa

m由於正規式和有限自動機存在等價性,即任何正規式r都存在乙個fa m,使得l(m) = l(r),則正規式可以轉換成有限自動機,轉換步驟為:(1)根據v,構造乙個nfa m』,使得l(m』) = l(v)。構造乙個拓廣的轉換圖,利用替換規則將v分解,加入新的結點,直到把圖轉換成每條弧上標識為∑上的乙個字元或ε;(2)將m』確定化,變為dfa m。用子集法找到每個輸入字元x的j(可從i中的某一狀態結點出發經過一條x弧而到達的狀態結點的全體)和ε_closure(x)。

2.給出下面正規式的表示式

(1)以01結尾的二進位制數串

(2)能被5整除的十進位制數

解:(1)(0|1)*01

(2)s→bc*a|a

a=0|5

b=1|2|3|4|5|6|7|8|9

c=0|1|2|3|4|5|6|7|8|9

知識點:正規式 閉包

正規式用來表達具有相同特徵的字的集合。根據題目分別找到字的相同特徵,利用「或」、連線運算、閉包運算總結正規式。以第二題為例分析:5整除的十進位制數分為兩類,個位數和多位數,所以首先加乙個或運算,多位數|個位數;個位數只能是0|5,多位數的第一位不為0,所以為1~9的自然數,中間位可以有也可以沒有,所以為0~9的自然數的閉包,易得結果如上。

3.將下圖分別確定化和最小化

確定化:

最小化:

知識點:有限自動機的確定化和最小化

確定化:首先用子集法將當前圖變成一張狀態轉換表,將每個子集看成一種新狀態加入,直到不再有新狀態,得到dfa m,此時dfa 中凡是含有原圖終態的狀態都是終態,如本題中原圖終態為,dfa終態則為和即狀態1、2。

最小化:用化簡演算法進行化簡,把自動機的狀態集分割為一些不相交的子集(一開始可分為終結狀態和非終結狀態),使得任何不同的兩個子集狀態都是可區別的,而同乙個子集中的任何狀態都是等價的,若將字元輸入子集的結果屬於終結狀態的集合,則該子集不用再分,否則再分,最後從每個子集選乙個代表,同時消去其他等價狀態

總結:

本章學習詞法分析,在有限自動機部分有很多狀態轉換的運算題:正規式轉化成有限自動機、非確定有限自動機轉化成確定有限自動機、確定有限自動機的化簡,步驟看起來相似又比較多,在做的時候首先要確實弄清楚什麼是確定狀態自動機,什麼是非確定狀態自動機,了解二者區別,這樣不容易混淆步驟也更容易理解。幾種轉化都運用了狀態轉換圖,掌握狀態轉換圖畫法,列狀態轉化表的時候仔細,題目就比較好做了。本章學習之後會理解詞法分析器的設計原理,另乙個難點就是如何將詞法分析器用**形式表現。努力。

編譯原理第三章詞法分析總結

這一章我們將從詞法分析器 正規表示式與有限自動機以及語法分析器的自動產生三方面了解詞法分析,但我理解的這張的重點是正規表示式與有限自動機。首先我們來了解一下詞法分析器是什麼 它是一組把輸入的源程式轉換成單詞符號的程式,而語法分析器的構造方法包括兩方面,一方面是根據詞法直接程式設計序即有限自動機的手工...

編譯原理第三章詞法分析總結

知識點 1 什麼是詞法分析?詞法分析就是將輸入的源程式從左至右進行掃瞄轉換成單詞符號並輸出。單詞符號是乙個程式語言的基本語法符號,分為關鍵字 識別符號 常數 運算子和界符。2 表示形式 單詞種別,單詞符號的屬性值 單詞種別常用整數編碼來表示,比如關鍵字 運算子 界符採用一字一種編碼的方式,常數按型別...

編譯原理第三章 詞法分析

一 詞法分析器 1 功能 輸入源程式,輸出單詞符號 2 單詞符號常常用二元式來表示 單詞種別,單詞符號的屬性 1 單詞種別 通常用整數編碼來表示 一字一種 關鍵字,運算子,界符 按型別 常數 統歸一種 識別符號 2 單詞符號的屬性值 反映單詞特性或特徵的值 3 詞法分析器運作過程 詞法分析器設計 輸...