青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

如何將正則表達式轉換為NFA

最近得做一些跟自動機有關的東東,其中一部分可以簡要地看作是由一套正則文法生成狀態自動機的過程。

什么是正則表達式?

首先我們看看什么是正則表達式。這個東東呢,一般用于描述一個字符串的集合——直接說就是一個正則表達式可能可以匹配一大堆字符串,而這一大堆字符串可以形成一個集合,它們的共同特征就是可以被這個正則表達式匹配。就像去死去死團,但是不同的是去死去死團的團員的共同特征是不被任何異性所匹配——但是這沒關系,我們不妨取去死去死團的補集就行了。

反正正則表達是很好啦,因為你只要用一點點在臟話里,就可以罵好多好多人,比如:

Mar(y|k|cus) is son of bitch.

真是非常de省力,唯一的缺點是可能對方不知道你在說什么。

好了,從上面我們可以看出正則表達式中的兩個基本結構:

·                                 連結 (Concatenation),比如 bitch,由b, i, t, c, h連接而成

·                                 聯合 (Union),比如 y|k|cus,可以認為是yk或者cus

下面是第三個基本結構,被稱為Kleene star (或者 Kleene 閉包)的。因為這個操作是Stephen Cole Kleene發明的。啊啊,其實正則表達式這個東西就是Kleene發明的。這個同學真是非常的牛B,因為他是更加牛B的 阿隆佐 - 丘奇 ( Alonzo Church )——歷史上和阿蘭 - 圖靈 ( Alan Turing ) 并稱的人物——的學生。有多牛B呢,這個Kleene和他的老師,還有圖靈,就遞歸論發表了論文,奠定了可計算理論的根基。啊哈哈哈,真是牛B啊。

嗯,所謂Kleene Star的例子就是這樣的。

·                                 Kleene Star,比如a*,可以接受空串和若干個a連結組成的串

當然咯,還有一些別的操作,比如我們知道的+?,集合[]等等,但是這些操作都可以通過上面三個基本操作的組合來完成。

比如+a+可以認為是aa*

什么是NFA

要說NFA嘛,我得先說說DFA。所謂DFA,就是Deterministic Finite state Automata的簡稱。是狀態機的一種。通俗的說,就是一大堆狀態的集合,里面有一個初始狀態和若干終止狀態,每個狀態可以有若干個輸出邊前往別的狀態。但是要求每個狀態的同一種輸出邊至多只有一個,所以自動機被稱為是”Deterministic”的。

比如下面這個例子:

表述的是一個電燈de開關,這個開關每按一下就從狀態轉換到狀態,或者從狀態轉換到狀態。而為了從環保角度出發,在狀態才被認為是終止態。

clip_image002

上面的自動機呢,就可以描述這個燈泡的行為模式,或者說可以描述電燈的狀態轉換過程。輸出邊就是或者的動作,或者說這個燈泡的開關,只接受這兩種動作:“Trun On”“Trun Off”。而”Trun On”動作只會導致燈的狀態變成“On”“Trun Off”動作只會導致燈的狀態變成“Off”,這是確定的,你的外婆都可以預料到的。所以說DFA是確定有限狀態自動機。

現在可以說NFA了。這個NFA嘛,全稱是Non-deterministic Finite state Automata。也是狀態自動機的一種。確切地說,剛才的DFANFA的一個子集。和DFA唯一的區別就是他是”Non-deterministic”的,哈,非確定的,每個狀態的同一種輸出邊可以不止一個。

還是用剛才的例子。現在假設我們的電燈有一種新的狀態咯~:壞掉了。燈絲被過大的電流燒斷了,聽上去遭透了,因為一”Trun On”就得準備換燈泡了:

clip_image004

但是我們沒法確定的知道哪一次Trun On會導致燈泡壞掉,使得燈泡進入”Down”狀態的那次操作看上去跟你昨天開燈的那次操作一模一樣(嚴格的說,每一次點亮燈泡都會導致燈絲的狀態發生變化,但是在此簡化了)

所以從狀態”Off”出來的輸出邊中,”Trun On”有兩條,這就導致沒法根據當前狀態和輸出邊確定下一狀態,這就是為什么稱為非確定性有限自動機的原因。

如何轉換?

剛才Shellex說了,正則表達式有三種基本結構。如果能先將這三種基本結構轉換成對應的NFA,然后在用這三種基本結構去拼裝成完整的NFA是不是很省力呢?

下面就是三種基本正則表達式的NFA

ab:

clip_image006

a*:

clip_image008
a|b:

clip_image010
里面出現了一種叫“None”的邊。這個不代表這個邊是字面上的“None”,而是指這個邊是個空邊。也就是說任何動作都可以從這個邊進入下一個狀態。它的學名叫 epsilon 邊,一般表示成’ε’Shellex這里表示成“None”了。

下面我們來考慮正則表達式到NFA轉換。給出一個正則串的輸入,得到一個NFA的輸出。被廣泛采用的是Thompson Algorithm,也就是所謂的子集算法。該算法的發明人應該就是寫ed編輯器的那個Thompson大牛。該算法的實現和算術表達式的求值非常的類似,需要一個符號棧存放操作符,一個自動機棧存放生成的自動機。算法結束后,可以從自動機棧中Pop一個最終的結果。

比如對于正則表達式(a|b)*cd,求值過程如下:

PUSH a To automaton stack
PUSH b To automaton stack
UNION
STAR
PUSH c To automaton stack
CONCAT
PUSH d To automaton stack
CONCAT
POP result

里面的UNIONSTAR CONCAT就是三種基本結構的生成操作了。而這三種基本操作的實現是這樣的:

Star

POP T from automaton stack
CREATE state A, B
ADD transition from A to B with 'ε'
ADD transition from A to T.entry with 'ε'
ADD transition from T.exit to A with 'ε'
ADD transition from T.exit to B with 'ε'
ADD state A, B to T
PUSH T to automaton stack

Concat

POP F, S from automaton stack
ADD transition from F.exit to S.entry with 'ε'
JOIN S to F
SET F.exit = S.exit
SET F.inputSet += S.inputSet
PUSH F to automaton stack

Union:

POP F, S from automaton stack
CREATE state A, B
ADD transition from A to F.entry with 'ε'
ADD transition from A to S.entry with 'ε'
ADD transition from T.exit to B with 'ε'
ADD transition from T.exit to B with 'ε'
JOIN S to F
ADD state A, B to T
SET F.exit = S.exit
SET F.inputSet += S.inputSet
PUSH F to automaton stack

 

posted on 2009-09-29 13:50 肥仔 閱讀(2822) 評論(0)  編輯 收藏 引用 所屬分類: 狀態機 & 自動機 & 形式語言

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜精品成人在线视频| 国产精品区一区二区三| 欧美大片在线观看一区| 久久精品免费| 裸体丰满少妇做受久久99精品| 久久成人精品一区二区三区| 欧美一区二区三区另类| 欧美一区二区成人| 麻豆国产精品va在线观看不卡 | 91久久久久| 一级成人国产| 欧美一区二区在线观看| 久热精品视频在线观看| 亚洲国产精品www| 免费欧美视频| 一区二区三区视频观看| 欧美专区日韩专区| 欧美日韩精品免费看| 国产欧美日本| 亚洲人午夜精品免费| 欧美在线观看你懂的| 欧美激情2020午夜免费观看| 亚洲另类春色国产| 欧美在线影院在线视频| 欧美日韩一区二区免费视频| 国产亚洲欧洲| 一区二区三区回区在观看免费视频| 欧美一区二区精品| 日韩视频久久| 女人天堂亚洲aⅴ在线观看| 国产精品一区二区在线观看不卡 | 久久精品99| 欧美日韩在线亚洲一区蜜芽| 狠狠色狠色综合曰曰| 亚洲性图久久| 最新国产乱人伦偷精品免费网站| 亚洲欧美日韩综合aⅴ视频| 欧美精品日韩精品| 亚洲国产成人av好男人在线观看| 欧美亚洲日本国产| 99国产精品久久久久老师| 夜夜嗨网站十八久久| 欧美劲爆第一页| 国产婷婷成人久久av免费高清| 最新日韩在线视频| 久久在线视频| 亚洲欧美国产制服动漫| 欧美人与性动交cc0o| 91久久中文| 欧美风情在线| 蜜臀av一级做a爰片久久| 国产一区自拍视频| 久久精品国产一区二区三区免费看 | 欧美一区二区三区在线播放| 欧美日韩在线高清| 宅男噜噜噜66一区二区66| 亚洲成色777777在线观看影院| 久久av一区二区三区漫画| 国产欧美一区二区视频| 欧美一区二区免费观在线| 亚洲主播在线| 国产欧美日韩在线| 久久久精品日韩欧美| 午夜精品久久久久久久白皮肤| 国产精品视频第一区| 欧美在线黄色| 久久大逼视频| 亚洲风情亚aⅴ在线发布| 欧美高清免费| 欧美日韩大片| 亚洲欧美日韩精品久久奇米色影视 | 欧美一区二区三区在线免费观看| 在线综合亚洲| 国产亚洲二区| 久久久久久自在自线| 久久亚洲美女| 日韩亚洲欧美一区二区三区| 亚洲毛片在线观看.| 国产精品免费看| 久久噜噜亚洲综合| 欧美成人免费全部| 亚洲在线视频一区| 久久福利影视| 99精品欧美一区二区蜜桃免费| 中文国产成人精品| 伊人久久久大香线蕉综合直播| 亚洲国产精品精华液2区45| 国产精品国产三级国产专播品爱网| 久久精品国产一区二区电影| 欧美a级片网| 午夜精品久久99蜜桃的功能介绍| 先锋亚洲精品| 99xxxx成人网| 欧美在线播放一区| 一区二区欧美亚洲| 久久激情婷婷| 夜夜嗨一区二区| 亚洲大片精品永久免费| 亚洲精品三级| 激情欧美日韩| 亚洲性人人天天夜夜摸| 91久久久在线| 午夜亚洲视频| 9国产精品视频| 久久久蜜臀国产一区二区| 这里只有视频精品| 久久免费一区| 久久国产视频网站| 欧美日韩亚洲一区二区三区在线| 久久久噜噜噜久噜久久| 欧美日在线观看| 欧美激情aaaa| 精品91在线| 欧美一区二区视频在线观看| 亚洲永久精品国产| 欧美精品成人在线| 欧美阿v一级看视频| 国产一区二区三区电影在线观看| av成人动漫| 亚洲美洲欧洲综合国产一区| 久久精品国产99| 久久国产手机看片| 国产精品久久二区二区| 亚洲精品免费在线观看| 亚洲国产精品成人综合| 久久精品99国产精品日本| 欧美一区二区日韩| 国产精品久久77777| 日韩视频一区二区| 日韩亚洲欧美一区| 欧美激情综合色| 亚洲电影在线看| 亚洲国产女人aaa毛片在线| 久久久国产精品一区二区中文| 欧美在线三级| 黑人一区二区三区四区五区| 性色av香蕉一区二区| 久久av老司机精品网站导航| 国产精品一区二区a| 亚洲欧美成人一区二区在线电影| 亚洲永久视频| 国产亚洲视频在线观看| 久久精品国产久精国产思思| 狂野欧美性猛交xxxx巴西| 激情亚洲成人| 蜜桃av一区二区三区| 亚洲经典在线| 亚洲永久视频| 国产一区二区三区在线观看精品 | 亚洲欧美精品一区| 国产精品劲爆视频| 欧美一级电影久久| 免费影视亚洲| 在线天堂一区av电影| 国产精品久久久一区麻豆最新章节| 亚洲毛片在线观看| 欧美一进一出视频| 影音先锋欧美精品| 欧美日韩国产在线观看| 欧美四级在线| 亚洲一区影院| 久久久夜夜夜| 91久久一区二区| 国产精品成人一区二区艾草| 亚洲欧美日韩成人| 久久青草久久| a4yy欧美一区二区三区| 国产欧美精品日韩区二区麻豆天美 | 在线视频一区观看| 国产精品一香蕉国产线看观看| 欧美在线看片a免费观看| 欧美激情自拍| 久久国产手机看片| 一本久久知道综合久久| 国产原创一区二区| 欧美日韩在线亚洲一区蜜芽| 久久久久久久999| 亚洲午夜一区二区三区| 欧美国产视频日韩| 欧美一二三视频| 91久久精品国产91久久| 国产精品美女黄网| 欧美福利一区| 久久国产高清| 亚洲一级黄色片| 亚洲国产日韩欧美综合久久| 欧美自拍偷拍午夜视频| 一本色道久久88精品综合| 韩国三级在线一区| 国产精品九九久久久久久久| 免费日韩av电影| 欧美一区二区视频观看视频| 亚洲日本一区二区| 欧美高清不卡| 免费成人黄色| 麻豆成人精品| 麻豆国产精品一区二区三区| 欧美在线免费一级片| 亚洲欧美中文另类| 亚洲免费在线观看|