最近一直在忙着寫大作業,考試復習,復習算法的時候寫了一些隨筆,現在忙起來都落下了博客,這里有一個VC++寫的大作業,主要是正則表達式轉NFA並顯示。內容如下。 數據結構描述 介紹一下NFA在表示的結構設計,由於NFA本身是一種有向圖,所以這里的存儲結構設計和鄰接表相似,圖中的每個節點 ...
本文轉載自http: chriszz.sinaapp.com p 輸入一個正則表達式,輸出一個NFA。 我的做法:輸入一個字符串表示正則,輸出則是把輸出到一個.dot文件中並將dot文件編譯成pdf,fedora需要sudo yum install dot,然后evince XXX.pdf就可以查看生成的NFA了。 具體算法是按照龍書上的Tompson算法來的。 廢話不多說,放碼過來: Autho ...
2014-02-04 23:30 0 5038 推薦指數:
最近一直在忙着寫大作業,考試復習,復習算法的時候寫了一些隨筆,現在忙起來都落下了博客,這里有一個VC++寫的大作業,主要是正則表達式轉NFA並顯示。內容如下。 數據結構描述 介紹一下NFA在表示的結構設計,由於NFA本身是一種有向圖,所以這里的存儲結構設計和鄰接表相似,圖中的每個節點 ...
正則表達式 1 基本概念 1.1 正則 正則表達式是語法,正則語言是語義 def(正則表達式): 給定字母表 Σ, Σ 上的正則表達式由且僅由以下規則定義: ϵ 是正則表達式; ∀a ∈ Σ, a 是正則表達式; 如果 r 是正則表達式, 則 (r ...
正則表達式幾乎每個程序員都會用到,對於這么常見的一個語言,有沒有想過怎么去實現一個呢?乍一想,也許覺得困難,實際上實現一個正則表達式的引擎並沒有想像中的復雜,《編譯原理》一書中有一章專門講解了怎么基於狀態機來構建基本的正則表達式引擎,它講這個初衷是為詞法分析服務,不過書里的東西相對偏理論了些,實現 ...
基於MYT算法從正則表達式構造NFA 基本思想: 性質: 對於加括號的正則式(s),使用N(s)本身作為它的NFA 一、構造識別ε和字母表中一個符號的NFA 1.特點 僅一個接受狀態,它沒有向外的轉換 2.示例 二、構造識別 ...
通過Thompson構造法對 a(b|c)* 進行構造 1.將RE中每個字符構建成簡單的NFA 2.按照RE優先級順序對簡單的NFA集合應用選擇、連接、閉包等轉換 *紅色表示選擇所增加的狀態和轉移 *綠色表示連接所增加的狀態和轉移 *藍色表示閉包所增加的狀態 ...
從正則表達式到 NFA 到 DFA 到最簡 DFA (一) (博客園這個 markdown 編輯器竟然不支持 LaTeX……無語) 發現了啟用數學公式的選項……錯怪博客園了…… RE → NFA (Thompson 算法) 這一步是基於對正則表達式的結構做歸納:對基本的 RE 直接構造 ...
從正則表達式到 NFA 到 DFA 到最簡 DFA (二) NFA $ \rightarrow $ DFA (子集構造法) 這里我們用一個例子來解釋。 如上圖所示,這是上一篇文章中的正則表達式化成的 NFA,這里拿來接着用。 我們首先看開始狀態 n0。n0 在接收了一個字符 a 之后 ...
原本我也是學習如何將正則表達式一步步化到DFA,搜索發現很多不是死板的定義,就是跨度太大,所以我決定用一道例題,看看它是如何轉化的,本次以正則表達式:(a|b)*(aa|bb)(a|b)* 為例。 我看到和多人會介紹將正則表達式轉化為NFA的規則,為了便於理解我也選擇簡單說一下 ...