NFA DFA和Regex到转换表

NFA DFA和Regex到转换表,regex,dfa,nfa,Regex,Dfa,Nfa,我一直在寻找一种算法,它输入一个正则表达式或字符串,然后将其转换为NFA和DFA,并实际打印出相应最终DFA的转换表 因此,我想知道是否已经有一个算法或C或Python库可以做到这一点,或者您是否有使用算法的建议,我可以实现 谢谢。我不确定这些链接是否对您有帮助 第一个是用Python提供一个非常简单的NFA/DFA实现,可以从NFA转换为DFA。虽然它不会从正则表达式生成NFA,但这并不难。第二个站点提供了关于NFA与DFA的长时间讨论,包括许多代码示例(主要是C语言)和指向我所知甚少的外部库

我一直在寻找一种算法,它输入一个正则表达式或字符串,然后将其转换为NFA和DFA,并实际打印出相应最终DFA的转换表

因此,我想知道是否已经有一个算法或C或Python库可以做到这一点,或者您是否有使用算法的建议,我可以实现


谢谢。

我不确定这些链接是否对您有帮助

第一个是用Python提供一个非常简单的NFA/DFA实现,可以从NFA转换为DFA。虽然它不会从正则表达式生成NFA,但这并不难。第二个站点提供了关于NFA与DFA的长时间讨论,包括许多代码示例(主要是C语言)和指向我所知甚少的外部库的链接。第三和第四个链接提供了第二篇文章作者开发的两个regex引擎实现的源代码,包括从regex到NFA的解析,然后从NFA到DFA的转换。但是请注意,我还没有看过这两个项目


否则,我要提到的是,大多数现实世界的正则表达式引擎使用NFA,而不是DFA,因为一些扩展特性无法用DFA执行。因此,如果上面的链接都不能帮助您,那么您可能会幸运地看到编译器,因为它们实际上使用DFAs。

如前所述,您的问题过于宽泛/主观,无法回答:您要问的是您是否应该自己编写代码,还是存在现有库。关于堆栈溢出,这些形式的问题在这里并不太合适。你能不能更新一下你的问题,让它更具体一些,比如“我如何使用库X来解决这个问题?”或者“什么算法在这里最合适?”现在,我在问,是否有一个现有的库,或者我是否应该从头开始实现if,或者(这就是我提到thomson的原因)如果有人知道我可以实现的算法。但是我修改了一点问题,我希望它更清楚。谢谢你的帮助,但不幸的是我查找了链接,找不到任何打印相应最终DFA状态表的算法。他们可能还没有打印转换表,但从最终计算的DFA中提取它足够简单。。。您只需遍历每个节点,并为它们分配一个唯一的顺序标识符。然后再次遍历该图,并输出该节点id、可能的转换列表以及每个转换的后续节点id。在您可能检查的结构中计算DFA确实是比较困难的部分。