我们已经讨论了下推自动机 (PDA) 及其在空栈文章中的接受度。现在,在本文中,我们将讨论 PDA 如何接受基于最终状态的 CFL。给定一个 PDA P:
P = (Q, Σ, Γ, δ, q0, Z, F)
P 接受的语言是所有消耗的字符串的集合,PDA 可以从初始状态移动到最终状态,而不管堆栈上留下任何符号,可以表示为:
L(P) = {w |(q0, w, Z) =>(qf, ɛ, s)}
这里,从起始状态 q0 和堆栈符号 Z,当输入 w 被消耗时达到最终状态 qf ɛ F。堆栈可以包含与达到最终状态无关的字符串s,并且 w 将被接受。
示例:定义语言 {a^nb^n | 的下推自动机n > 0} 使用最终状态。
解: M = 其中 Q = {q0, q1, q2, q3} 和 ∑ = {a, b} 和 Γ = { A, Z } 和 F={q3} δ 由下式给出:
δ( q0, a, Z ) = { ( q1, AZ ) }
δ( q1, a, A) = { ( q1, AA ) }
δ( q1, b, A) = { ( q2, ɛ) }
δ( q2, b, A) = { ( q2, ɛ) }
δ( q2, ɛ, Z) = { ( q3, Z) }
让我们看看这个自动机如何为 aaabbb 工作:
说明:最初,自动机的状态是 q0,栈上的符号是 Z,输入是 aaabbb,如第 0 行所示。在读取 a(第 1 行中以粗体显示)时,状态将更改为 q1,它将压入堆栈上的符号 A。在下一个 a(如第 2 行所示),它将另一个符号 A 压入堆栈并保持状态 q1。读取 3 个 a 后,堆栈将是 AAAZ,顶部为 A。
读取 b 后(如第 4 行所示),它将弹出 A 并移动到状态 q2,堆栈将为 AAZ。当所有 b 被读取时,状态将是 q2,堆栈将是 Z。在第 7 行,在输入符号 ɛ 和堆栈上的 Z 上,它将移动到 q3。由于在处理输入后已达到最终状态 q3,因此字符串将被接受。
这种类型的接受称为最终状态接受。
接下来我们将看到这个自动机如何为 aab 工作:
正如我们在第 4 行中看到的,输入已被处理并且 PDA 处于非最终状态 q2,字符串aab 将不被接受。
让我们基于此来讨论问题:
Qu-1。考虑下面给出的带有输入字母 ∑ 的 PDA 的转换图。 = {a, b} 和堆栈字母 Γ = {X, Z}。 Z 是初始堆栈符号。让 L 表示 PDA 接受的语言。 (GATE-CS-2016)
解决方案:我们首先将给定 PDA 的状态标记为:
接下来,给定的 PDA P 可以写为:
Q = {q0, q1, q2} and ∑ = {a, b}
And Γ = {A, Z} and F={q0,q2} and δ is given by :
δ( q0, a, Z ) = {( q0, XZ)}
δ( q0, a, X) = {( q0, XX )}
δ( q0, b, X) = {( q1, ɛ)}
δ( q1, b, X) = {( q1, ɛ)}
δ( q1, ɛ, Z) = {( q2, Z)}
正如我们所看到的,q0 是初始状态和最终状态, ɛ 将被接受。对于每一个 a,X 被压入堆栈并且 PDA 保持在最终状态。因此,PDA 可以接受任意数量的 a。
如果输入包含 b,则为每个 b 从堆栈中弹出 X。如果在处理输入后堆栈变空,PDA 将进入最终状态 (δ( q1, ɛ, Z) = {( q2, Z)})。因此,如果存在,b 的数量必须等于 a 的数量。
由于对于给定的状态和输入只有一次移动,因此 PDA 是确定性的。所以,正确选项是(D)。