網上的一堆人,你們是豬麼?
找了一大堆東西都tm說不到點上。
直接開講。
nfa有回溯,回溯太tm浪費資源。
都是圖吧。
給我找度。
乙個節點的出度給我仔細的看。
如果出度有1個,那麼這個節點ok.確定了。
如果出度有2個,再看是不是1個出去回到自己,然後1個出去指向別人。這樣的話也ok。
但你不能2個乙個出去指向b,另乙個出去指向c。
給我拿到nfa。
先給我畫個圖。
| 集合 | ia | ib |
| | | |
| | | |
| | | |
...
這個圖的下一步給我確定開始集合。ia
,ib
,代表吃a,**.
首先把nfa的開始節點
給我寫到集合下面的第一行。
這個時候求這個節點
的epsilon 閉包
。
看我新增閉包的順序
0的epsilon閉包
:
1的epsilon閉包
:
2的epsilon閉包
:
3的epsilon閉包
:
4的epsilon閉包
:
5的epsilon閉包
:
6的epsilon閉包
:
7的epsilon閉包
:
8的epsilon閉包
:
9的epsilon閉包
:
ok?
接上文給我拿到nfa。
先給我畫個圖。
| 集合 | ia | ib |
| | | |
| | | |
| | | |
...
這個圖的下一步給我確定開始集合。ia
,ib
,代表吃a,**.
首先把nfa的開始節點
給我寫到集合下面的第一行。
這個時候求這個節點
的epsilon 閉包
。
開始節點
就是所求的這個節點的epsilon 閉包
。
注意:ia
下面的怎麼填?
0的epsilon閉包
:
那就找,找0的epsilon閉包的所有節點
看誰吃了a
。
0沒有,1沒有。2吃了,到3.,把3填到這個**,並且做個標記。集合4沒有,7吃了,到8.同理,把8填。
i0i1
這個時候,做集合3
,8
的epsilon閉包。
3的epsilon閉包
:
8的epsilon閉包
:然後,將他們合併,新增到
ia
下面第一行。
i0i1
並且恢復順序。最好是填的時候就恢復順序。集合
i0i1
這樣集合i0
就填好了。下面就是不斷的填
i0
,i1
。如果
i0
,i1
下面出現新的集合,例如b
:
i0i1ab
上面的是下面的簡化版:
集合i0
i1那麼,將b填到集合第2行:例如:
集合i0i1a
bb
如果這樣按照a,b,c,d,…的順序填寫。i0
,i1
下面推不出來,那麼你就不填。我的做法是寫個空,表示空集.
知道再也生成不了新的符號,且所有的符號都出現在集合那一列下面。
ok。尋找nfa
中為結束的狀態,在dfa中的集合
下面找,找到那個集合包含nfa中的結束狀態,那麼這個集合就是結束集合。
集合iaiba
空bbc
dccd
d空空假如d裡面有狀態5,5在nfa中是乙個結束狀態,那麼d就是dfa的結束狀態。
ok。
編譯技術 正規式 NFA DFA 最簡DFA的轉換
在編譯原理中,正規式 nfa 非確定有窮自動機 dfa 最簡dfa的轉換在詞法分析中是十分重要的乙個環節。正規式r到nfa的轉化 2 狀態集的a弧轉換 狀態集i中的任何狀態s經過一條a弧而能到達的所有狀態的集合,定義為狀態集i的a弧轉換,表示為move l,a 3 狀態集的a弧轉換的閉包 la cl...
編譯原理 編譯原理期末複習1
1,關於文法 乙個文法g可以抽象的分為四元組 vn,vt,p,s vn表示非終結符 vt表示終結符 p表示產生式 s表示開始符 2,老師上課說的編譯原理的階段說的是 詞法分析,語法分析,語義分析,中間 生成,優化,目標 生成 其中語法分析,語義分析,中間 生成稱為語法制導翻譯 語義分析,中間 生成稱...
編譯原理及交叉編譯
編譯原理及交叉編譯 編譯原理 gcc g 在執行編譯的時候,只要分四個階段 1 預處理階段,完成巨集定義和include檔案展開等工作 不生成檔案 預處理器cpp 2 根據編譯引數進行不同程度的優化,編譯成彙編 將預處理後的檔案轉換成組合語言,生成.s的檔案 編譯器egcs 3 用彙編器把彙編 進一...