如何设计NPDA以接受这些语言?

时间:2020-02-03 14:23:33

标签: computer-science automata

我想设计一种NPDA(非确定性下推自动机),它接受以下两种语言。 请说明如何设计它们。

L(r) where r = abb*aba*
L(r) = {a^nb^2n : n > 0}

1 个答案:

答案 0 :(得分:2)

第一个可能是这样的:

  1. 在第一状态下读取a并将a压入堆栈;过渡到新状态
  2. 在第二种状态下读取b并将b压入堆栈;过渡到新状态
  3. 永远读第三状态的b,每次将b压入堆栈。如果您最终阅读了a,请转换为新状态,然后将a推入堆栈
  4. 在第四种状态下读取b,将b压入堆栈;过渡到新状态
  5. 永远读第五种状态,将a推入堆栈;在任何时候都不确定地过渡到新状态
  6. 在第六种状态下,什么都不读,然后将东西弹出栈。如果输入已被完全读取且堆栈为空,则此状态为接受且npda接受输入字符串。

第二个可能是这样的:

  1. 读取至少一个a并将其压入堆栈,然后过渡到新状态
  2. 在第二种状态下永远读一遍,每次将a推到堆栈上;如果看到b,请进入新状态
  3. 在第三种状态下读取b,然后将a弹出堆栈;进入新状态
  4. 在第四种状态下读取b,并且不理会堆栈;回到第三状态
  5. 在第三和第四状态下继续读取b,直到用尽输入为止;如果您处于第四种状态,则输入已用完并且堆栈为空,那么pda才会接受输入字符串

编辑:所需转换的概述。

第一个:

q0 is initial
(q0, a, Z) -> (q1, aZ)
(q1, b, a) -> (q2, ba)
(q2, b, b) -> (q2, bb)
(q2, a, b) -> (q3, ab)
(q3, b, a) -> (q4, ba)
(q4, a, b) -> (q4, ab)
(q4, a, a) -> (q4, aa)
(q4, e, a) -> (q5, a)
(q4, e, b) -> (q5, b)
q5 is accepting

第二个:

q0 is initial
(q0, a, Z) -> (q1, aZ)
(q1, a, a) -> (q1, aa)
(q1, b, a) -> (q2, a)
(q2, b, a) -> (q3, e)
(q3, b, a) -> (q2, a)
q3 is accepting

两个NPDA都设计为在堆栈为空且输入已用尽时以接受状态接受。