[英]How can I add an epsilon move to FSM using Python?
我正在使用greenery
模塊來實現FSM :
from greenery import fsm, lego
E, O = range(2)
z, o = '0', '1'
# Create the FSM
machine = fsm.fsm(
alphabet = {o, z},
states = {E, O},
initial = E,
finals = {E},
map = {
E : {z: O, o: E},
O : {o: O, z: E},
},
)
# Convert it to a regex
rex = lego.from_fsm(machine)
print(rex)
問題是:如何添加那些進出狀態 A 的 epsilon 移動? 我找不到任何例子。
似乎greenery是一個用於確定性FSM 的 python 庫
該模塊提供確定性有限狀態機的創建和操作。
您的 FSM是非確定性的:考慮輸入 0,0:您最終可以得到以下狀態:
要使用 greenery,您需要手動(或通過腳本)將您的 FSM 轉換為等效的無 Epsilon FSM:
如果兩個 FSM 接受完全相同的字符串集,則稱它們是等價的。 給定任何非確定性 FSM,總是有可能找到一個沒有 epsilon 轉換的等價的。 事實上,給定上面定義和表示的機器,我們可以很容易地定義這樣一個等效的無 epsilon 機器。 因此,給定一個名為 mach 並在 m/4、mis/2 和 mfs/2 中定義的機器,我們將為其命名為 efree(mach) 的無 epsilon 版本定義轉換、初始狀態和最終狀態,如下所示: ...
然后 / 在您執行此操作時,計算非確定性等效 FSM 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.