【问题标题】:How to convert regular expressions to grammar and DFA如何将正则表达式转换为语法和 DFA
【发布时间】:2021-07-10 15:04:38
【问题描述】:

您好,我正在尝试找出将正则表达式 L = (a+ab)* 表示为 DFA 并生成 L 的正则语法。

下图展示了将表达式表达为NFA,然后再转换为DFA的过程。

所以如果你从 DFA 中得到正则语法,

A-> aB | BC | e

B-> aB |巴| e

C-> aC | bC

但问题是,当你用这个语法得到正则表达式时,你得到一个更复杂的表达式,而不是 (a+b)*。

C = aC + bC = (a+b)*

B = aB + bA + e = a*(bA+e)

A = aB + bC + e = aa* bA + aa* + b(a+b) + e = (aa* b)* (aa* +b(a+b)*+e)

我想知道我的解决方案是否有问题。

【问题讨论】:

    标签: regex automata dfa


    【解决方案1】:

    其实X = (aa*b)*(aa*+b(a+b)*+e) 可以简化为(a+b)*。在这里,我试图解释我将 X 简化为 (a+b)* 的步骤:

    1. 我们将简化分为三个部分:a) empty stringb) every possible string starting with bc) every possible string starting with a。如果我们能得到这些,就意味着 X=(a+b)*。
    2. 如果你把第一部分(aa*b)*当作e看第二部分,你会发现我们可以得到a) empty stringb) every possible string starting with b。我们只需要获取c) every possible string starting with a即可。
    3. 这部分是一场斗争,但我想我得到了它。现在我们只查找以 a 开头的字符串。首先,我们在第二部分有 aa* 来获得所有的“a”。此外,如果我们有 2 个或更多连续的“b”,则字符串的其余部分将被第二部分 b(a+b)* 接受。所以唯一需要担心的是单个“b”。最后,由第一部分得到单个'b'。

    虽然它很复杂(而且可能没有必要),但这证明了 X=(a+b)*。结果,您的解决方案是正确的。

    【讨论】:

      猜你喜欢
      • 2017-10-04
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 2019-04-08
      • 2017-09-02
      • 2013-10-28
      相关资源
      最近更新 更多