【问题标题】:NFA DFA and Regex to Transition Table [closed]NFA DFA 和正则表达式到转换表 [关闭]
【发布时间】:2013-10-28 22:27:25
【问题描述】:

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

因此,我想知道是否已经有算法或 C 或 Python 库可以执行此操作,或者您是否有使用算法的建议,我可以实施。

谢谢。

【问题讨论】:

  • 如所写,您的问题有点过于宽泛/主观,无法回答:您是在问是否应该自己编写代码,或者是否有现有的库。这些形式的问题在 Stack Overflow 上并不合适。您能否更新您的问题以提供更具体的内容,例如“我如何使用库 X 来解决这个问题?”或者“什么算法在这里最合适?”
  • 现在,我在问,是否有一个现有的库,或者我是否应该从头开始实现,或者(这就是我提到汤姆森的原因)如果有人知道我可以实现的算法.但是我修改了一点问题,希望更清楚。

标签: regex dfa nfa


【解决方案1】:

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

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

否则,我会提到大多数现实世界的正则表达式引擎使用 NFA,而不是 DFA,因为某些扩展功能根本无法使用 DFA 执行。因此,如果上面的 hte 链接都不能帮助您,那么您可能会对编译器编译器有所帮助,因为它们是实际使用 DFA 的那些。

【讨论】:

  • 感谢您的帮助,但不幸的是,我查看了链接,找不到任何打印出相应最终 DFA 状态表的算法。
  • 他们可能还没有打印转换表,但是从最终计算出的 DFA 中提取它很简单......你只需要遍历每个节点,然后分配它们是唯一的、连续的标识符。然后再次遍历图,并输出该节点 id,可能的转换列表以及每个转换的后继节点的 id。在您可能检查的结构中计算 DFA 确实是更难的部分。
猜你喜欢
  • 2020-03-23
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 2015-07-15
  • 2018-04-16
  • 2015-12-21
  • 2017-02-09
相关资源
最近更新 更多