我正在尝试在字母Σ = {a,b}
上写一个CFG,所有单词的开头和结尾都以相同数量的a
开头,中间至少有一个b
现在我理解了CFG的基本概念,变量,生产规则等。不幸的是,我已经没有用于编写上述CFG的想法了。我到目前为止所有的一切都是
S → aYXYa
X → XbX | b | λ
Y → ???
我认为生产规则S
和X
会给我一个字符串,两边都有两个** a
** s ** b
**在我想要的中间。但是,我不确定如何在a
**的两侧放置尽可能多的** b
**,同时确保*的数量完全相同*每边* a
**。
任何建议,解决方案将不胜感激。感谢。
答案 0 :(得分:7)
作为以前教过这门课程的前教授,我不打算给你答案。但是,我会给你一个提示:
你有正确的想法将它分为两个部分,a和其他部分。但是,你没有正确地做其中任何一个。
首先尝试写作: n ba n 然后从那里分支。
希望有所帮助。
答案 1 :(得分:3)
S → aSa | B B → b | bB
这应该是您正在寻找的CFG。每当你在开头和结尾处理同样的事情时,请记住你不能保证以相同的方式填充相同的var。因此,你必须明确这些。
答案 2 :(得分:1)
我的CS大学时代已经有一段时间,但这看起来很合理:
S - > aSa | BX
X - > bX | ë
基本上,你从S开始并根据需要添加多个a,然后切换到X并添加任意数量的b。