为该语言构建NPDA

时间:2019-06-25 22:36:03

标签: automata non-deterministic pushdown-automaton

使用以下语言构建NPDA: L = {w:w∈{a,b} ^ *,a的个数至少是b的个数}

1 个答案:

答案 0 :(得分:0)

我们的策略可以是这样:

  • 输入a,堆叠A / Z:按a
  • 输入a,堆栈b:弹出
  • 输入b,堆叠a:弹出
  • 输入b,堆栈b / Z:推入b
  • 如果没有其他输入则接受并堆叠a / Z

为什么这样做?如果我们的a大于b,则最终在堆栈上有a。如果a和b的数目相同,我们将在堆栈上得到Z。如果b大于a,我们最终将b放在堆栈上。因此,当输入用尽时,我们会在顶部接受a或Z。

q    e    s    q'   s'
q0   a    Z    q0   aZ
q0   a    a    q0   aa
q0   a    b    q0   -
q0   b    Z    q0   bZ
q0   b    a    q0   -
q0   b    b    q0   bb
q0   -    a    q1   a
q0   -    Z    q1   Z
q1   -    a    q1   -

如果输入字符串的a至少等于b,则此PDA在第1季度以一个空堆栈结尾。