构造接受以下语言的npda
L1 = {a n + 2 b m c n + m :m> = 1,n> = 0} >
L2 = {a n b m :m> = 0,n = m + 3}
答案 0 :(得分:0)
对于第一个,NPDA将需要两个a,然后读取a和b(以及至少一个b)并推入堆栈,然后读取c并从堆栈中弹出。如果纸堆是空的并且输入已用尽,则机器可以接受。
Q s S Q' S'
-----------------------
q0 a Z q1 Z // read two a
q1 a Z q2 Z
q2 a Z q2 cZ // read all a
q2 a a q2 ca // and at least one b
q2 b Z q3 cZ
q2 b a q3 ca
q3 b c q3 cc // read all b
q3 c c q4 - // and at least one c
q4 c c q4 - // read all c
q4 - Z q5 Z // go to accepting state on empty stack
对于第二个,NPDA将要求三个a,然后读取a并推入堆栈,然后读取b并从堆栈中弹出。如果纸堆是空的并且输入已用尽,则机器可以接受。
Q s S Q' S'
-----------------------
q0 a Z q1 Z
q1 a Z q2 Z
q2 a Z q3 Z
q3 a Z q3 aZ
q3 a a q3 aa
q3 b a q4 -
q3 - Z q5 Z
q4 b a q4 -
q4 - Z q5 -
请注意,这里的q3和q4都可以转换为接受状态q5并接受,前提是它们已经耗尽了输入并且正在查看一个空堆栈。