【问题标题】:Converting dot-star regular expression into NFA将点星正则表达式转换为 NFA
【发布时间】:2012-05-30 02:37:45
【问题描述】:

我正在将一组给定的正则表达式转换为单个 NFA,但我遇到了一些问题。我应该如何转换诸如“ab.*c”之类的正则表达式(表示匹配一个'a',一个'b',任意数量的字符,然后是一个'c')?

我的最终目标是将单个 NFA 转换为 DFA(为此我使用了子集构造算法)。

【问题讨论】:

  • 这需要更多上下文。一旦你知道算法(实际上即使你不知道),转换是微不足道的,如果你不知道,首先不清楚你想如何使用 NFA,或者你会如何理解一个答案,就此而言。你的知识水平如何?
  • 我不会直接与 NFA 合作,因为我只想与 DFA 合作。我正在将正则表达式转换为 DFA(通过 regex -> NFA -> DFA),但是 .* 是我认为我处理不正确的情况,因为当我尝试构建具有交叉转换的自动机时,我得到了状态-空间爆炸(但不是当我尝试在没有交叉转换的情况下构建它时)。

标签: regex algorithm dfa nfa kleene-star


【解决方案1】:

正则表达式中的.* 对应于 NFA 中每个字母的循环状态。

该状态还将使c 转换为接受状态。

在循环转换和接受转换中都有c 是完全可以的——这就是它不确定的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 2013-08-01
    • 1970-01-01
    • 2010-10-18
    • 2012-12-26
    • 2013-10-28
    • 1970-01-01
    相关资源
    最近更新 更多