先决条件——下推自动机,下推自动机被最终状态接受
问题 – – 设计一个接受语言 L = { 的非确定性 PDA | m,n>=1},即
L = { abc, abbc, abbbc, aabbcc, aaabccc, aaaabbbcccc, ...... }
在每个字符串,a 的数量等于 c 的数量。而 b 的数量与 a 和 c 的数量无关。这个问题与接受语言L = {的NPDA非常相似 |米,n>=1}。唯一的区别是这里我们使用代替 .
解释 –
这里,我们需要保持a、b、c的顺序。也就是说,所有的a先来,然后所有的b,然后c。因此,我们需要一个堆栈和状态图。 a 和 c 的计数由堆栈维护。 a 的数量正好等于 c 的数量 我们将采用 2 个堆栈字母:
= { a, z }
在哪里, = 所有堆栈字母的集合
z = 堆栈起始符号
用于构建PDA的方法 –
由于我们要设计 NPDA,因此每次 ‘a’ 出现在 ‘b’ 之前。当 ‘a’ 出现时,将其压入堆栈,如果再次出现 ‘a’ 则也将其压入堆栈。并且,当 ‘c’ 出现时,每次都从堆栈中弹出一个 ‘a’。而对于’b’,我们不会在堆栈中做任何事情,只会改变状态图中的状态。
因此,最后如果堆栈变空,那么我们可以说该字符串已被 PDA 接受。
堆栈转换函数 –
(q0, a, z) (q0, az) (q0, a, a) (q0, aa) (q0, b, a) (q1, a) (q1, b, a) (q1, a) (q1, c, a) (q2, ) (q2, c, a) (q2, ) (q2, , z) (qf, z )
其中,q0 = 初始状态
qf = 最终状态
= 表示弹出操作
所以,这是我们接受语言 L = { 所需的非确定性 PDA |米,n>=1 }。