词法分析(2)---NFA
假定一個(gè)輸入符號(hào)(symbol),可以得到2個(gè)或者2個(gè)以上的可能狀態(tài),那么這個(gè)finite automaton就是不確定的,反之就是確定的。例如:
這就是一個(gè)不確定的無限自動(dòng)機(jī),在symbol a輸入的時(shí)候,無法確定狀態(tài)應(yīng)該轉(zhuǎn)向0,還是1
不論是確定的finite automaton還是非確定的finite automaton,它們都可以精確的描述正規(guī)集(regular sets)
我們可以很方便的把正規(guī)表達(dá)式(regular expressions)轉(zhuǎn)換成為不確定 finite automaton
2. NFA(Nondeterministic Finite Automaton)
非確定的無限自動(dòng)機(jī),我們用NFA這個(gè)術(shù)語表示,它是一個(gè)數(shù)學(xué)模型(model):
1. 一個(gè)關(guān)于狀態(tài)的集合S
2. 一個(gè)關(guān)于輸入符號(hào)(input symbols)的集合Σ
3. 函數(shù) move : (狀態(tài), 符號(hào)) -> P(S)
4. 一個(gè)開始狀態(tài)s0,是一個(gè)唯一的狀態(tài)
5. 一個(gè)結(jié)束(接受)狀態(tài)集合F
注意,P(S),表示S的冪集(所謂冪集, 就是原集合中所有的子集(包括全集和空集)構(gòu)成的集族)。在NFA中,input symbol可以為 ε
轉(zhuǎn)換函數(shù)(transition function)的含義就是,一個(gè)確定的狀態(tài)已經(jīng)從這個(gè)狀態(tài)出發(fā)的一條邊的標(biāo)簽(符號(hào)symbol),可以確定它的下一個(gè)狀態(tài)組成的集合,比如上圖(這個(gè)轉(zhuǎn)換圖就是NFA的一種表示方式),0狀態(tài),a符號(hào),確定了一個(gè)狀態(tài)的集合{0,1}
3. 轉(zhuǎn)換圖(transition graph)的表示
我們知道,計(jì)算機(jī)是無法直接表示一個(gè)圖,我們應(yīng)該如何來表示一個(gè)轉(zhuǎn)換圖?使用表格就是一個(gè)最簡單的方法,每行表示一個(gè)狀態(tài),每列表示一個(gè)input symbol,這種表格被叫做 transtion table(轉(zhuǎn)換表)
可以說使用表格是最簡單的表示方式,但是我們可以注意到在這個(gè)圖中狀態(tài)1和input symbol a,是沒有下一個(gè)狀態(tài)的(空集合),也就是,對于一個(gè)大的狀態(tài)圖,我們可能花費(fèi)大量的空間,而其中空集合會(huì)消耗不少空間,但是這種消耗又不是必須的,所以,作為最簡單的一種實(shí)現(xiàn)方式,卻不是最優(yōu)的
語言(language)被NFA定義成為一個(gè)input string的集合,而這個(gè)集合中的元素則是被NFA受接受的所有的字符串(那些可以從開始狀態(tài)到某接受狀態(tài)的input string)
至于存儲(chǔ)的方式,可以試試鄰接表。注意,使用什么樣的數(shù)據(jù)結(jié)構(gòu)來保存NFA按情況不同而不同,在一些特殊情況下,某些數(shù)據(jù)結(jié)構(gòu)會(huì)變得很方便使用,而換入其他情況,則不可以使用了。
總結(jié)
以上是生活随笔為你收集整理的词法分析(2)---NFA的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 刀光剑影的ng2b
- 下一篇: 如异界守塔的伪原创工具