编译原理第三章 词法分析与有穷自动机
詞法分析與有窮自動(dòng)機(jī)
- 1、詞法分析程序的功能
- 2、正規(guī)集、正規(guī)式、正規(guī)文法、確定的有窮自動(dòng)機(jī)、不確定的有窮自動(dòng)機(jī)的定義。
- 3、正規(guī)文法、有窮自動(dòng)機(jī)、正規(guī)式三者之間的互相轉(zhuǎn)換方法。不確定有窮自動(dòng)機(jī)到確定自動(dòng)機(jī)的轉(zhuǎn)換及確定有窮自動(dòng)機(jī)的化簡(jiǎn)。
1、詞法分析程序的功能
詞法分析程序(詞法分析器、掃描器):執(zhí)行詞法分析的程序,以字符串形式的源程序作為輸入,以單詞符號(hào)或單詞符號(hào)表示的源程序作為輸出。
語(yǔ)言的單詞符號(hào)一般可分為五種:關(guān)鍵字、標(biāo)識(shí)符、常數(shù)、運(yùn)算符和界符。
詞法分析的輸出形式:(單詞種別,單詞自身的值)
2、正規(guī)集、正規(guī)式、正規(guī)文法、確定的有窮自動(dòng)機(jī)、不確定的有窮自動(dòng)機(jī)的定義。
語(yǔ)言單詞符號(hào)的兩種定義方式:正規(guī)式+正規(guī)文法。
正規(guī)式:設(shè)有字母表∑={a1,a2,a3,a4…an},在該字母表上的正規(guī)式D和所表示的正規(guī)集L有以下關(guān)系。
正規(guī)式D包含三種運(yùn)算符:連接"."、或“|”、閉包“*”,優(yōu)先級(jí)遞增。連接一般忽略不寫(xiě)。
L(e1 | e2) = L(e1) ∪L(e2).
L(e1e2) = L(e1)L(e2)
L((e1)*) = L( (e1)*)
正規(guī)式等價(jià):正規(guī)式R1和R2描述的正規(guī)集相同。
正規(guī)文法和正規(guī)式的轉(zhuǎn)換:
正規(guī)文法 => 正規(guī)式:
求解規(guī)則:
- 若x = ax + b,則 x = x*b;
- 若x = xa + b,則x = bx*。
正規(guī)式 => 正規(guī)文法:
字母表∑上的正規(guī)式R到文法G={VN,VT,P,S}的轉(zhuǎn)換。
有窮自動(dòng)機(jī),具有離散輸入輸出的一種抽象數(shù)學(xué)模型,有“確定的”和“不確定”之分,兩類都能準(zhǔn)確識(shí)別正規(guī)集。
確定有窮自動(dòng)機(jī)(DFA):一個(gè)確定有窮自動(dòng)機(jī)M是五元組M={Q,∑,f,S,Z}。
Q是有窮狀態(tài)集合,一個(gè)元素對(duì)應(yīng)一個(gè)狀態(tài)
∑是有窮輸入字母表,每個(gè)元素是一個(gè)輸入字符
f是從Q X ∑到Q的單值映射:f(qi, a) = qi
S是唯一的初態(tài)
Z是終態(tài)集
一個(gè)DFA可由狀態(tài)轉(zhuǎn)化矩陣表示,DFA M存在狀態(tài)轉(zhuǎn)化圖。
對(duì)于∑*的任何字符串B,如存在一條從初態(tài)到某一終態(tài)的道路上的所有弧的標(biāo)記和為B,則稱B為該DFA M所接受(識(shí)別)。特別的,如果初態(tài)等于某一終態(tài),則ε可被M識(shí)別(接受)。
非確定有窮自動(dòng)機(jī)(NFA):一個(gè)非確定有窮自動(dòng)機(jī)M是五元組{Q,∑,f,S,Z}
其中Q,∑,Z意義等同于DFA,狀態(tài)轉(zhuǎn)換函數(shù)f不是單值函數(shù),是多值函數(shù)。
f(qi,a)={某些狀態(tài)集合},a可以為ε,S是非空初態(tài)集。
通過(guò)數(shù)學(xué)歸納法,對(duì)于每個(gè)NFA M存在DFA M’,使L(M)=L(M’)
3、正規(guī)文法、有窮自動(dòng)機(jī)、正規(guī)式三者之間的互相轉(zhuǎn)換方法。不確定有窮自動(dòng)機(jī)到確定自動(dòng)機(jī)的轉(zhuǎn)換及確定有窮自動(dòng)機(jī)的化簡(jiǎn)。
由正規(guī)式R構(gòu)造NFA:P40
NFA確定化為DFA:P41
DFA的化簡(jiǎn):P44
有窮自動(dòng)機(jī)到正規(guī)式的轉(zhuǎn)換:P46
右線性文法到有窮自動(dòng)機(jī)的轉(zhuǎn)換:P47
左線性文法到有窮自動(dòng)機(jī)的轉(zhuǎn)換:P48
總結(jié)
以上是生活随笔為你收集整理的编译原理第三章 词法分析与有穷自动机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MYSQL ifnull 函数 、if判
- 下一篇: c语言设计函数删除大写字母,C语言第七周