如何从有限自动机生成正则表达式?


将确定性有限自动机 (DFA) 转换为正则表达式 (RE) 有两种方法。它们如下所示:

  • Arden 方法
  • 状态消除法

让我们详细了解这些方法。

Arden 定理

设 P 和 Q 为两个正则表达式。

如果 P 不包含空字符串,则关于 R 的方程 R = Q + RP

其唯一解为 R = QP*

这里:

  • 有限自动机没有 ε 移动

  • 它必须只有一个初始状态 q1

  • 其状态为 q1, q2, q3,……qn。最终状态可以是某个 qi,其中 i<=n

  • qi 是表示有限自动机接受的字符串集的正则表达式,即使 qi 是最终状态。

使用 Arden 定理求 DFA 的 RE

为了找到给定自动机的正则表达式,我们首先为所有状态创建如下所示的方程:

q1=q1α11+q2α21+----------+qnαn1+𝟄
q2=q1α12+q2α22+-----------+qnαn2
-
-
-
-
qn=q1α1n+q2α2n+------------+qnαnn.

通过重复应用替换和 Arden 定理,我们可以用 αij 来表示 qi。为了获得 FSA 识别的字符串集,我们必须取对应于最终状态的所有 qi 的并集。

示例

注意 - 对于并行边,该状态在表达式中将有多个表达式。

然后,我们求解这些方程以获得 qi 关于 αij 的方程,该表达式就是所需解,其中 qi 是最终状态。

q1 = qa + q3a + ε (ε 移动是因为 q1 是初始状态)

q2 = q1b + q2b + q3b

q3 = q2a

现在,我们将求解这三个方程

  • q2 = q1b + q2b + q3b

q2 = q1b + q2b + (q2a)b (代入 q3 的值)

q2 = q1b + q2(b + ab)

q2 = q1b(b + ab)* (应用 Arden 定理)

  • q1 = q1a + q3a + ε

q1 = q1a + q2aa + ε (代入 q3 的值)

q1 = q1a + q1b(b + ab)*aa + ε (代入 q2 的值)

q1 = q1(a + b(b + ab)*aa) + ε

q1 = ε(a + b(b + ab)*aa)*

q1 = (a + b(b + ab)*aa)*

因此,正则表达式为 (a + b(b + ab)*aa)*。

状态消除法

步骤 1

  • DFA 的初始状态没有任何入边。

  • 如果初始状态存在任何入边,则需要创建一个没有入边的新的初始状态。

示例

步骤 2

  • DFA 中必须只有一个最终状态。

  • 如果 DFA 中存在多个最终状态,则需要将所有最终状态转换为非最终状态,并创建一个新的单个最终状态。

示例

步骤 3

  • DFA 的最终状态没有任何出边。

  • 如果最终状态存在任何出边,则需要创建一个没有出边的新的最终状态。

示例

步骤 4

依次消除所有中间状态。这些状态可以按任何顺序消除

最后,将只剩下一个初始状态到最终状态。

此转换的成本是所需的正则表达式。

更新于:2021年6月16日

2K+ 次查看

开启您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.