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.確定化方法,過程如下。建議結合教材例子,實際求解過程畫**更清晰。
包含nfa m'原初態的狀態集為dfa m的初態;包含nfa m'原終態的狀態集為dfa m的終態。①求初始狀態:s0 = ε-closure(s0');
②for 每個狀態
for 每個x∈∑
計算新狀態ix;
注:過程②出現的新狀態也在迴圈中,直到不出現新狀態為止;
5.簡單例子
1.狀態s和狀態t等價條件:
1.有窮自動機m => 正則文法g①區分終態和非終態,為區號1,2;(一致性條件)
②每個原狀態,對於每個輸入,對應後繼狀態的區號,全部相同的視為等價(暫時);(蔓延性條件)
③由於過程②劃分出新的區間,對應的區號有所改變,重複過程②直至沒有新區間出現。
【例】①對轉換函式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 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱...