繁体   English   中英

为以下语言创建下推自动机

[英]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是“堆栈底部”符号。 当然,我们可能会使用其他方法和其他表示形式,但这对于此类问题特别整洁。 要完全解释该表示形式:

  1. 堆栈最初是Z ,只是堆栈符号的底部。
  2. 如果看到a ,而堆栈顶部是aZ ,则添加另一个a
  3. 如果看到a且堆栈的顶部是b ,则删除一个b
  4. 如果我们看到b并且堆栈的顶部是bZ ,则添加另一个b
  5. 如果看到b ,而堆栈的顶部是a ,则删除a
  6. 如果看到c ,则不理会堆栈。

如果我们对所有输入一遍又一遍地执行此操作,则堆栈的内容将等于x^m ,其中xab出现的频率更高,并且m是该n的差的绝对值每个符号的编号。

要接受您的语言,您必须简单地识别输入已用尽且堆栈组成等于aZ 这可以通过添加一些状态和lambda / epsilon转换来清除堆栈和/或进入接受状态来完成。

感谢Peter Leupold指出,原始答案的其余部分都使语法错误。 我尝试修复它,不喜欢答案能得到多长时间,因此我省略了它。 我将简单地补充说,另一种可能性是为一种语言生成CFG,并使用一种算法为其衍生PDA。 在这种情况下,对我来说,直接给PDA少了很多麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM