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

Computer science 如何设计NPDA以接受这些语言?,computer-science,automata,Computer Science,Automata,我想设计NPDA(非确定性下推自动机),它接受以下两种语言。 请解释如何设计它们 L(r) where r = abb*aba* L(r) = {a^nb^2n : n > 0} 第一个可能是这样工作的: 在第一种状态下读取a并将a推到堆栈上;向新国家过渡 在第二种状态下读取a b并将a b推到堆栈上;向新国家过渡 永远以第三种状态读取b,每次将b推到堆栈上。如果最终读取a,则转换到新状态并在堆栈上推送a 在第四种状态下读取b,将b推到堆栈上;向新国家过渡 永远在第五种状态下读取a,将a

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

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

第一个可能是这样工作的:

  • 在第一种状态下读取a并将a推到堆栈上;向新国家过渡
  • 在第二种状态下读取a b并将a b推到堆栈上;向新国家过渡
  • 永远以第三种状态读取b,每次将b推到堆栈上。如果最终读取a,则转换到新状态并在堆栈上推送a
  • 在第四种状态下读取b,将b推到堆栈上;向新国家过渡
  • 永远在第五种状态下读取a,将a推到堆栈上;在任何时候,都会不确定地过渡到新状态
  • 在第六种状态下,只需不读取任何内容并从堆栈中弹出内容。如果输入已被完全读取且堆栈为空,则此状态为接受,npda接受输入字符串
  • 第二个可能是这样的:

  • 读取至少一个a并将其推送到堆栈上,然后转换到新状态
  • 在第二种状态下永远读取a,每次将一个a推到堆栈上;如果你看到b,去一个新的州
  • 在第三种状态下读取b,并从堆栈中弹出a;去一个新的国家
  • 在第四种状态下读取b,并使堆栈保持独立;回到第三种状态
  • 继续在第三和第四状态下读取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都设计为在接受状态下接受。

    我无法理解每个转换对应的转换函数。请告诉我如何根据前一种语言确定转换函数。