📜  正则语言的∈-NFA L = (01 + 2*)1

📅  最后修改于: 2021-09-27 14:53:41             🧑  作者: Mango

Epsilon NFA 是有限自动机的一部分。 ∈ 是代表空输入的符号。 ∈-NFA 是允许自动机在没有输入的情况下改变其状态的表示。 ∈-非确定性有限自动机具有与常规 NFA 不同的转换函数。这是 ∈-NFA 的正式定义。

∈-NFA is defined in 5 tuple representation {Q, q0, Σ, δ, F} where
Q is the set of all states,
q0 is the initial state,
Σ is the set of input symbols,
δ is the transition function which is δ:Q × (Σ∪∈)->2Q and
F is the set of final states.

ε-NFA 的简单构造规则:

∈-NFA for a+ :

这里,“a+”意味着输入表达式中必须至少有一个“a”才能被接受。它在 epsilon 之前和之后,因为表达式可能包含也可能根本不包含任何其他内容。从状态 q2 到 q1 有 epsilon 反馈,因此表达式中可以有多个“a”。

∈-NFA for a* :

这里,’a*’表示表达式中可以有任意数量的’a’,包括0。前面的结构只是稍微修改了一下,这样即使没有输入符号,即如果输入符号为空,那么表达式也是有效的。

∈-NFA for a+b :

此结构接受 a 或 b 作为输入。所以有两条路径,都通向最终状态。

∈-NFA for ab :

对于串联,a 后面必须跟 b。只有这样才能达到最终状态。这里允许使用两种结构,但由于它是 ∈-NFA,所以推荐使用第二种结构。

∈-NFA 对于 L = (01+2*)1 :

按照上述规则,要构造Regular Language L = (01+2*)1 的ε-NFA。

L = (01+2*)1 可分为两部分。第一部分是(01+2*),第二部分是1。由于它们是串联的,所以它们在第四条规则的帮助下线性连接。现在第一部分可以进一步分为两部分 – 01 和 2*。考虑到 a = 0 和 b = 1,可以借助第四条规则绘制 01。考虑到 a = 2,可以借助第二条规则绘制 2*。现在因为 01 和 2* 与“+”相连符号,从第一个节点将有两条路径,都将到达倒数第二个节点。当后面跟着一个“1”时,这个结构为我们提供了上述语言的最终 ∈-NFA。

最终 ∈-NFA 将是: