考虑下面的下推自动机 (PDA),它在输入字母表 (a, b, c) 上运行。它具有堆栈字母 {Z 0 , X},其中 Z 0是堆栈底部标记。 PDA 的状态集是 (s, t, u, f} 其中 s 是开始状态,f 是最终状态。PDA 通过最终状态接受。下面给出的 PDA 的转换以标准方式描述例如,转换 (s, b, X) → (t, XZ 0 ) 表示如果 PDA 处于状态 s 并且栈顶符号为 X,那么它可以从输入中读取 b 并且在弹出堆栈顶部并将符号 Z 0和 X(按此顺序)压入堆栈后移动到状态 t。
(s, a, Z 0 ) → (s, XXZ 0 )
(s, ϵ, Z 0 ) → (f, ϵ)
(s, a, X) → (s, XXX)
(s, b, X) → (t, ϵ)
(t, b, X) → (t,.ϵ)
(t, c, X) → (u, ϵ)
(u, c, X) → (u, ϵ)
(u, ϵ, Z 0 ) → (f, ϵ)
PDA 接受的语言是
(A) {a l b m c n | l = m = n}
(B) {a l b m c n | l = m}
(C) {a l b m c n | 2l = m+n}
(D) {a l b m c n | m=n}答案: (C)
解释:每个输入 ‘a’ 将两个 X 插入堆栈,每个 X 只能由 ‘b’ 或 ‘c’ 使用。在输入 ‘a’ 上,没有给出 ϵ 的规则。因此,对于每个“a”,终止由“b”或“c”或两者执行。
例子:
输入:
a 3 b 2 c 4
堆栈:Z 0
三点后:
堆:
XXXXXXZ 0
在两个 b 之后:
堆:
0
四个 c 之后:
你可以达到最终状态。
这里也接受 a 3 b 2 c 4 。
这个问题的测验