从正则表达式构造有限自动机



我们可以使用汤姆逊构造法从正则表达式中找出有限自动机。我们将把正则表达式简化为最小的正则表达式,并将这些表达式转换为NFA,最后转换为DFA。

一些基本的RA表达式如下:

情况1 - 对于正则表达式“a”,我们可以构造以下FA:

Finite Automata for RE

情况2 - 对于正则表达式“ab”,我们可以构造以下FA:

Finite Automata for RE1

情况3 - 对于正则表达式(a+b),我们可以构造以下FA:

Finite Automata for RE2

情况4 - 对于正则表达式(a+b)*,我们可以构造以下FA:

Finite Automata for RE3

方法

步骤1 从给定的正则表达式构造一个带有空移动的NFA。

步骤2 去除NFA中的空转移,并将其转换为等价的DFA。

问题

将以下RA转换为等价的DFA:1(0+1)*0

解决方案

我们将连接三个表达式“1”、“(0+1)*”和“0”。

NDFA with Null Transition for RA

现在我们将移除ε转移。在从NDFA中移除ε转移后,我们得到以下结果:

NDFA with Null Transition for RA1

这是一个对应于RE - 1(0+1)*0的NDFA。如果要将其转换为DFA,只需应用第1章中讨论的将NDFA转换为DFA的方法。

带有空移动的有限自动机 (NFA-ε)

带有空移动的有限自动机 (FA-ε) 不仅在从字母集接收输入后转换,而且在没有任何输入符号的情况下转换。这种无需输入的转换称为空移动

NFA-ε 由一个 5 元组 (Q, ∑, δ, q0, F) 形式表示,包括

  • Q - 一个有限的状态集

  • - 一个有限的输入符号集

  • δ - 一个转移函数 δ : Q × (∑ ∪ {ε}) → 2Q

  • q0 - 一个初始状态 q0 ∈ Q

  • F - Q 的一组最终状态/状态 (F⊆Q)。

Finite Automata with Null Moves

上述(FA-ε) 接受一个字符串集 - {0, 1, 01}

从有限自动机中移除空移动

如果在一个NDFA中,顶点X到顶点Y之间存在ϵ-移动,我们可以使用以下步骤将其移除:

  • 查找从Y发出的所有边。
  • 复制从X开始的所有这些边,而不更改边标签。
  • 如果X是初始状态,则使Y也成为初始状态。
  • 如果Y是最终状态,则使X也成为最终状态。

问题

将以下NFA-ε 转换为没有空移动的NFA。

Finite Automata with Null Moves1

解决方案

步骤1 -

这里 ε 转移在q1q2之间,所以设q1XqfY

这里从qf发出的边是对于输入0和1到qf

步骤2 -

现在我们将复制从q1开始的所有这些边,而不更改从qf开始的边,并获得以下FA:

NDFA After Step 2

步骤3 -

这里q1是初始状态,所以我们也使qf成为初始状态。

所以FA变为:

NDFA After Step 3

步骤4 -

这里qf是最终状态,所以我们也使q1成为最终状态。

所以FA变为:

Final NDFA Without Null Moves
广告