先决条件 – 下推自动机,下推自动机按最终状态接受
问题:设计一个非确定性的 PDA 来接受语言 , IE,
L = {abc, aabc, aabbcc, abbbccc, aabbbccc ...... }
以下 DFA 必须包含:
- a的数量等于c的数量。
- b 的数量与 a 和 c 的数量无关。
- 必须保持 a、b 和 c 的顺序。
解释:
a、b 和 c 的顺序保持如下,即所有的 a 先到,然后所有的 b 和 c 到。由于 b 的数量正好等于 c 的数量。所以,b 和 c 的数量将由堆栈维护。使用的堆栈将有一个开始符号和用于 b 和 c 计数的额外符号。
= { a, z }
在哪里, = 所有堆栈字母的集合。
z = 堆栈起始符号。
用于构建PDA的方法 –
- 步骤 1:每当 ‘a’ 出现时将其压入堆栈,如果再次出现 ‘a’ 则也将其压入堆栈。
- 第 2 步:当 ‘c’ 出现时,每次都从堆栈中弹出一个 ‘a’。
- 第 3 步:当 ‘b’ 出现时,忽略它并改变状态图中的状态。
- Step-4:如果最后堆栈变空,则停止执行。因此该字符串被PDA接受。
请注意,始终保持 a、b 和 c 的顺序。
堆栈转换函数:
(q0, a, z) (q0, z) (q0, b, z) (q1, bz) (q1, b, b) (q1, bb) (q1, c, b) (q2, ) (q2, c, b) (q2, ) (q2, , z) (qf, z)
状态转移图:
这里,q0 = 初始状态
qf = 最终状态
= 表示弹出操作
并且,q1,q2= 中间状态