編譯原理(二)詞法分析

2022-04-12 07:26:10 字數 3579 閱讀 7530

1.詞法分析程式的功能

2.實現方案

3.單詞種類及輸出形式

單詞種類:保留字、識別符號、常數、分界符等。

輸出形式:二元式,《單詞類別,單詞值》。按單詞種類分類,也可以將保留字和界符採用一符一類。

狀態圖:用於識別(接受)一定的字串。包含乙個初始狀態(初態),至少乙個終止狀態(終態)。畫法比較簡單:

注意:

1.正規表示式運算子:|選擇、·連線、*重複、()括號。優先順序:括號優先,先*後·最後|。

2.正規表示式與3型文法等價。相互轉換後續講解。

1.dfa五元式定義:\(m = (s, ∑, δ, s0, z)\)。其中 \(s\) 為有窮狀態集,\(∑\) 為輸入字母表,\(δ\) 為狀態轉換函式(s×∑ → s的對映),\(s_0\) 為初始狀態,\(z\) 為終止狀態集。

2.何為確定?表現在 \(δ\) 中的狀態轉換函式是單值函式。

3.dfa不可接受 \(ε\),dfa m所接受的語言為:\(l(m) = \\)。

1.若 \(δ\) 是乙個多值函式,且輸入允許為 \(ε\),則有窮自動機是不確定的。即對於某個輸入字元存在多個後繼狀態。

2.nfa五元式定義:\(m' = (s, σ∪, δ, s0, z)\)。\(δ\) 為狀態轉換函式(s×∑∪ → 2s的對映,2s:s的冪集,即s的子集構成的集合)。

3.nfa m'所接受的語言為:\(l(m') = \\)。

1.已經證明:非確定的有窮自動機與確定的有窮自動機從功能上來說是等價的。這意味著,對於nfa m',可以構造出dfa m,使得l(m)=l(m')。

2.集合 \(i\) 的 \(ε\) 閉包。\(i\) 是nfa狀態集s的乙個子集,則ε-closure(i)為:

簡單理解,ε-closure(i)就是由i中所有狀態接收字元ε得到的狀態集。

3.集合 \(i\) 對應 \(ia\)。\(i\) 是nfa狀態集 \(s\) 的乙個子集,a∈∑,則 \(i_a = ε-closure(j)\),其中 \(j = ∪ δ(s, a),s∈i\)。

簡單理解,分為兩步,第一步找到 \(i\) 中所有狀態接收字元 \(a\) 得到的狀態集 \(j\),再求 \(ε-closure(j)\)。

4.確定化方法,過程如下。建議結合教材例子,實際求解過程畫**更清晰。

①求初始狀態:s0 = ε-closure(s0');

②for 每個狀態

for 每個x∈∑

計算新狀態ix;

注:過程②出現的新狀態也在迴圈中,直到不出現新狀態為止;

包含nfa m'原初態的狀態集為dfa m的初態;包含nfa m'原終態的狀態集為dfa m的終態。

5.簡單例子

1.狀態s和狀態t等價條件:

①區分終態和非終態,為區號1,2;(一致性條件)

②每個原狀態,對於每個輸入,對應後繼狀態的區號,全部相同的視為等價(暫時);(蔓延性條件)

③由於過程②劃分出新的區間,對應的區號有所改變,重複過程②直至沒有新區間出現。

1.有窮自動機m => 正則文法g

①對轉換函式f(a, t) = b,可寫成乙個產生式:a→tb,其中t∈vt,a、b∈vn

②對可接受狀態z,增加乙個產生式:z→ε

③有窮自動機的初態對應於文法的開始符號,有窮自動機的字母表 ∑ 為文法的終結符號集vt。

【例】

注意:不知你注意到了沒有,有窮自動機m轉換出來的文法規則都是右線性的,這就體現了有窮自動機自頂向下的特點,在語法分析lr分析法中會用到這一特性。

2.正則文法g=>有窮自動機m

【演算法】

① m的字母表 ∑ 與g的終結符號 vt 相同

②為g中的每個非終結符vn生成m的乙個新狀態,g的開始符號s作為m的開始狀態s

③增加乙個新狀態z,作為nfa的終態

④對g中產生式形如a→tb,其中t為終結符或ε,a和b為非終結符,構造m的乙個轉換函式f(a, t) = b

⑤對g中的形如a→t的產生式,構造m的乙個轉換函式f(a, t) = z

【例】

3.正規表示式 => 有窮自動機m

【演算法】

【例】

4.有窮自動機m => 正規表示式

【演算法】

【例】

5.正則文法轉正規表示式

【演算法】

6.正規表示式轉正則文法

【演算法】

【例】將s = a ( a | d )* 轉換成相應的正則文法

解: 1) s→a(a|d)*

s→aa

a→(a|d)*

s→aa

a→(a|d)a

a→εs→aa

a→aa|da

a→ε1.乙個lex源程式主要由三個部分組成:規則定義式、識別規則、使用者子程式。各部分之間用%%隔開。實質是是乙個有窮自動機

.2.二義性處理原則:最長匹配原則;最優匹配原則。

引用說明

- 邵老師課堂pdf

- 《編譯原理級編譯程式構造》

編譯原理 詞法分析(二)

乙個有窮自動機可以把乙個描述詞素的模式變成乙個詞法分析器,從本質上來講,有窮自動機是與狀態轉換圖相類似的圖,它有以下特點 乙個不確定的有窮自動機 nondeterministic finite automate,下文簡稱nfa 由以下部分組成 從nfa的組成部分可以看出,它和狀態轉換圖的不同之處在於...

編譯原理詞法分析

編譯原理實驗一 詞法分析練習 include include include define tokenmax 100 define progmax 1000 define k esc 27 void analytics 詞法分析 void scanner 輸入掃瞄 bool isletter cha...

詞法分析(編譯原理)

詞法分析 英語 lexical analysis 是電腦科學中將字串行轉換為單詞 token 序列的過程。進行詞法分析的程式或者函式叫作詞法分析器 lexical analyzer,簡稱lexer 也叫掃瞄器 scanner 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱...