現成的, 講義:
https://www.cnblogs.com/AndyEvans/p/10240790.html
https://www.cnblogs.com/AndyEvans/p/10241031.html
一個例子, 寫得非常好. 一下子就全明白了, 尤其是像我這種沒有聽過編譯原理課程的人.
https://blog.csdn.net/tyler_download/article/details/53139240
上一節提到過,當處於某個指定狀態時,如果該狀態有ε邊,那么,不需要吸收任何字符,就可以從該狀態轉換到ε邊所指向的狀態。
一開始,狀態機處於起始狀態12,
在狀態12,通過ε邊可直達狀態2,6,
在狀態2,可以通過ε邊,直達狀態0,3. 也就是說,當處於狀態12時,通過ε邊的連接,可以同時抵達狀態的集合是 {12,2,6,0,3}。
通過一個狀態,推算出它能同時抵達的狀態集合,這個狀態集合稱作ε閉包集合,這種運算稱之為ε閉包運算:
ε-closure(12) = {12, 2, 6, 0, 3}.
接下來讀入字符1,我們從閉包集合中看看,哪個狀態節點有能夠吸收數字的轉換邊。從上圖觀察,我們發現,
狀態6和0,擁有吸收數字字符的轉換邊。
狀態6吸收一個數字字符后,跳轉到狀態7,
狀態0吸收字符1后,跳轉到狀態1,
這樣我們可以說,狀態集合{12, 2, 6, 0, 3} 在吸收字符1后,跳轉到集合{1,7},
后面這個集合{1,7},我們稱為轉移集合(move set), 我們把這種跳轉運算標記如下:
move({12, 2, 6, 0, 3}, D} = {1, 7}.
非常好!!!
---------------------
作者:tyler_download
來源:CSDN
原文:https://blog.csdn.net/tyler_download/article/details/53139240
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!