我厌倦了正则表达式.这是丑陋的,不可读的,也无法调试.然而,数学家几十年来一直使用有限状态机来设计正则表达式.
如果我对正则表达式感到恼火,我会手动将其绘制为有限状态机,然后必须将有限状态机转换为我今天使用的任何可怕的正则表达式语法.
有没有一个程序可以让我设计有限状态机并吐出一个正则表达式?
如果您了解
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通常会转换为非常可怕的正则表达式,简化正则表达式在计算上很困难……