[英]What would be the PDA (pushdown automata) of the language a^mb^n where n<m
[英]Create a pushdown automata for the following language
因此,我在书中遇到练习问题,发现了这个问题。 构造一个在sigma(a,b,c)上接受语言L的npda。
L = {w:a的数量= b + 1的数量}
所以我正在解释它,因为它接受的所有字符串再加上一个a和一个字母b。 我认为所有州都应该有一个具有过渡的循环(c,landa,landa),因为我们并不真正在乎c。 之后,我真的很困惑,因为要覆盖的情况太多,因为a和b的放置是任意的。 解决这个问题的方法是什么? 谢谢!!
PDA可以使用堆栈来记住任意数量的信息。 这使得PDA比有限自动机具有无限的功能。 确定PDA的关键是弄清楚如何使用堆栈,然后围绕它构建PDA。
我们如何使用堆栈来确保a
的数量等于b
的数量加1? 好了,堆栈可以轻松地跟踪已经看到的符号的运行平衡。 例如,如果我们看到四个a
s和两个b
s,则我们的堆栈可以通过包含aaZ
来表示这一事实,其中Z
是“堆栈底部”符号。 当然,我们可能会使用其他方法和其他表示形式,但这对于此类问题特别整洁。 要完全解释该表示形式:
Z
,只是堆栈符号的底部。 a
,而堆栈顶部是a
或Z
,则添加另一个a
。 a
且堆栈的顶部是b
,则删除一个b
。 b
并且堆栈的顶部是b
或Z
,则添加另一个b
。 b
,而堆栈的顶部是a
,则删除a
。 c
,则不理会堆栈。 如果我们对所有输入一遍又一遍地执行此操作,则堆栈的内容将等于x^m
,其中x
是a
而b
出现的频率更高,并且m
是该n的差的绝对值每个符号的编号。
要接受您的语言,您必须简单地识别输入已用尽且堆栈组成等于aZ
。 这可以通过添加一些状态和lambda / epsilon转换来清除堆栈和/或进入接受状态来完成。
感谢Peter Leupold指出,原始答案的其余部分都使语法错误。 我尝试修复它,不喜欢答案能得到多长时间,因此我省略了它。 我将简单地补充说,另一种可能性是为一种语言生成CFG,并使用一种算法为其衍生PDA。 在这种情况下,对我来说,直接给PDA少了很多麻烦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.