📌  相关文章
📜  NPDA 接受语言 L = {ambncn | m,n≥1}

📅  最后修改于: 2021-09-28 10:07:38             🧑  作者: Mango

先决条件 – 下推自动机,下推自动机按最终状态接受
问题:设计一个非确定性的 PDA 来接受语言L = \{a^m b^n c^n | m, n \geq 1\} , IE,

L = {abc, aabc, aabbcc, abbbccc, aabbbccc ...... } 

以下 DFA 必须包含:

  1. a的数量等于c的数量。
  2. b 的数量与 a 和 c 的数量无关。
  3. 必须保持 a、b 和 c 的顺序。

解释:
a、b 和 c 的顺序保持如下,即所有的 a 先到,然后所有的 b 和 c 到。由于 b 的数量正好等于 c 的数量。所以,b 和 c 的数量将由堆栈维护。使用的堆栈将有一个开始符号和用于 b 和 c 计数的额外符号。

\Gamma = { a, z }

在哪里, \Gamma = 所有堆栈字母的集合。
z = 堆栈起始符号。
用于构建PDA的方法 –

  • 步骤 1:每当 ‘a’ 出现时将其压入堆栈,如果再次出现 ‘a’ 则也将其压入堆栈。
  • 第 2 步:当 ‘c’ 出现时,每次都从堆栈中弹出一个 ‘a’。
  • 第 3 步:当 ‘b’ 出现时,忽略它并改变状态图中的状态。
  • Step-4:如果最后堆栈变空,则停止执行。因此该字符串被PDA接受。

请注意,始终保持 a、b 和 c 的顺序。

堆栈转换函数:

\delta (q0, a, z)  \vdash (q0, z) \delta (q0, b, z)  \vdash (q1, bz) \delta (q1, b, b)  \vdash (q1, bb) \delta (q1, c, b)  \vdash (q2,  \epsilon ) \delta (q2, c, b)  \vdash (q2,  \epsilon ) \delta (q2,  \epsilon , z)  \vdash (qf, z)

状态转移图:

这里,q0 = 初始状态
qf = 最终状态
\epsilon = 表示弹出操作
并且,q1,q2= 中间状态