我厌倦了正则表达式。这是丑陋的,不可读的,也无法调试。然而,数学家几十年来一直使用有限状态机来设计正则表达式。
如果我对正则表达式感到厌烦,我会手动将其绘制为有限状态机,然后必须将有限状态机转换为我今天使用的任何可怕的正则表达式语法。
是否有程序可以让我设计有限状态机并吐出正则表达式?
答案 0 :(得分:2)
如果您了解Python,可以尝试greenery。包fsm
用于有限状态机,lego
用于正则表达式对象。这两者可以自由地相互转换。
>>> 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通常会转换为非常可怕的正则表达式,简化正则表达式在计算上也很困难......
答案 1 :(得分:1)
JFLAP是用于试验形式语言主题的软件,包括非确定性有限自动机,非确定性下推自动机,多磁带图灵机,几种类型的语法,解析和L系统。除了构建和测试这些示例之外,JFLAP允许人们尝试从一种形式到另一种形式的构造证明,例如将NFA转换为DFA到最小状态DFA到正则表达式或常规语法。