私は正規表現表記にうんざりしています。醜く、判読できず、デバッグも不可能です。しかし、数学者は何十年もの間、有限ステート マシンを使用して正規表現を設計してきました。
正規表現にうんざりしている場合は、手動で有限状態マシンとして描画し、有限状態マシンを今日使用している恐ろしい正規表現構文に変換する必要があります。
有限状態マシンを設計して正規表現を吐き出すプログラムはありますか?
私は正規表現表記にうんざりしています。醜く、判読できず、デバッグも不可能です。しかし、数学者は何十年もの間、有限ステート マシンを使用して正規表現を設計してきました。
正規表現にうんざりしている場合は、手動で有限状態マシンとして描画し、有限状態マシンを今日使用している恐ろしい正規表現構文に変換する必要があります。
有限状態マシンを設計して正規表現を吐き出すプログラムはありますか?
Python を知っている場合は、greeneryを試すことができます。このパッケージfsm
は有限状態マシン用で、lego
正規表現オブジェクト用です。この 2 つは自由に相互変換できます。
>>> from greenery import fsm
>>> x = fsm.fsm(
... alphabet={"1", "2"},
... states={"A", "B", "C", "D", "E"},
... initial="A",
... finals={"E"},
... map={
... "A": {"1": "C", "2": "A"},
... "B": {"1": "B", "2": "D"},
... "C": {"1": "E", "2": "C"},
... "D": {"1": "A", "2": "B"},
... "E": {"1": "C", "2": "D"}
... }
... )
>>> print(x.lego())
(1(11|2)*12(21*2)*1|2)*1(11|2)*1
あなたの例の有限状態マシンには、初期状態と最終状態の両方が欠けていることを指摘する必要があると思うので、それらを推測しました。また、任意の FSM は通常、非常にひどい正規表現に変換され、正規表現を単純化することは計算上困難です...
JFLAP は、非決定性有限オートマトン、非決定性プッシュダウン オートマトン、マルチテープ チューリング マシン、数種類の文法、解析、L システムなどの形式言語トピックを実験するためのソフトウェアです。これらの例を構築してテストすることに加えて、JFLAP では、NFA を DFA に変換し、最小限の状態の DFA を正規表現または正規文法に変換するなど、ある形式から別の形式への構築証明を試すことができます。