【问题标题】:Converting regular expression to finite state machine将正则表达式转换为有限状态机
【发布时间】:2012-07-11 06:05:44
【问题描述】:

您是否有关于将任何正则表达式转换为有限状态机 (FSM) 的算法的提示。例如,解析正则表达式并将状态适当地添加到 FSM 的算法?有什么参考或更深入的想法吗?

我是用 Python 写的

【问题讨论】:

  • 这不是re.compile 基本上在做什么?你想自己重写一个正则表达式引擎吗?
  • 尝试使用re.DEBUG 选项编译正则表达式。
  • 这是课堂作业吗?
  • 仅供娱乐。我写了一个通用的 fsm(非常简单的),我现在想要一个函数 regExpToFSM() 来构建一个对应于给定正则表达式的 fsm。

标签: python regex state-machine fsm


【解决方案1】:

使用 Michael Sipser 的 Introduction to the Theory of Computation。第 1 章给出了将正则表达式转换为确定性或非确定性有限状态自动机(DFA 或 NFA)的详细算法,以证明它们的等价性(DFA、NFA 和正则表达式可以匹配完全相同的类字符串)。

总体思路是:将正则表达式转换为 NFA,这可以非常简单地完成(* 是一个循环,| 和字符范围是分支点)。然后,您将 NFA 转换为(更大的)DFA,这涉及为每个 set 替代 NFA 状态创建一个 DFA 状态。 DFA 最多具有与 NFA 状态集的 powerset 一样多的状态(例如,具有 3 个状态的 NFA 可以转换为具有最多 2^3 = 8 个状态的 DFA),并且可以识别任何目标字符串而无需回溯.详细阅读本书。

【讨论】:

    猜你喜欢
    • 2016-08-19
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2016-10-08
    • 2011-10-02
    • 2016-04-02
    • 1970-01-01
    相关资源
    最近更新 更多