【问题标题】:Please help me covert the dfa to regular expression [closed]请帮我将 dfa 转换为正则表达式 [关闭]
【发布时间】:2019-04-08 23:10:47
【问题描述】:

我不知道如何使用算法将此 dfa 转换为正则表达式。请帮帮我。

【问题讨论】:

  • 这个 DFA 没有接受状态,所以它的正则表达式很简单。
  • 这是作业,与编程无关。您的课程材料很可能包含有关如何将 dfa 转换为正则表达式的算法和课程。
  • 我只是无法理解算法是如何工作的。因此,如果有人可以尝试解释细节,我将不胜感激!
  • 只需按照箭头并在一张纸上写下您找到的每条路径。离开相同状态的多个箭头是交替的 (|)。循环是量词 (*)。如果仍有不清楚的地方,请在您的问题中具体说明。目前,您的问题过于笼统。
  • @RuudHelderman 非常感谢!!但是你能为我写详细信息吗..对不起,我真的不知道如何开始..

标签: regex automata dfa


【解决方案1】:

假设这个符号表示 (1) 既是初始状态也是唯一的接受状态,这个自动机的转移表是:

 q     s     q'
(1)    a    (3)
(1)    b    (2)
(2)    a    (1)
(3)    a    (2)
(3)    b    (3)

令 r、s 和 t 是导致 (1)、(2) 和 (3) 的正则表达式。那么

r = e + sa
s = rb + ta
t = ra + tb

我们可以开始迭代求解这个系统。首先,我们在 t 的表达式中看到自引用,我们可以使用规则 x = y + xz x = yz*:

删除 if
r = e + sa
s = rb + ta
t = rab*

现在我们可以通过替换前两行来去掉 t:

r = e + sa
s = rb + rab*a

现在我们需要一个 r 的表达式,所以我们不妨硬着头皮在第一行的 s 表达式中加上 sub:

r = e + (rb + rab*a)a
  = e + rba + rab*aa
  = e + r(ba + ab*aa)

根据我们的规则,我们进一步减少:

r = (e)(ba + ab*aa)*
  = (ba + ab*aa)*

抽查表明这个正则表达式是正确的。如果您接受以下用于减少涉及正则表达式的表达式的规则的有效性(即证明它们或在没有证明的情况下接受它们),则推导构成正则表达式的有效证明:

rule 1: x = y + xz IFF x = yz*
rule 2: w = xy AND x = z IFF w = zy
rule 3: w = x + y AND x = z IFF w = z + y

上面对等式的解释是这样的:当且仅当 LHS 的语言等于 RHS 的语言时,LHS 等于 RHS。虽然 (0+1)(0+1) 和 00+01+10+11 是不同的正则表达式,但它们生成的四个字符串的语言相同,因此出于讨论的目的是相等的。

【讨论】:

  • 非常感谢!抱歉迟了回应!并且超级清晰地展示了你是如何锻炼的!
  • 嗨教授你能帮我问另一个问题吗:stackoverflow.com/questions/53692526/…
  • @cyshes21 这个问题有点复杂,已经结束了。你也许可以把它清理一下,然后再问一次。
猜你喜欢
  • 2015-07-15
  • 2013-10-28
  • 2017-10-04
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
相关资源
最近更新 更多