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