如何编写我的无上下文语法?

时间:2009-04-01 21:40:44

标签: context-free-grammar

我正在尝试在字母Σ = {a,b}上写一个CFG,所有单词的开头和结尾都以相同数量的a开头,中间至少有一个b

现在我理解了CFG的基本概念,变量,生产规则等。不幸的是,我已经没有用于编写上述CFG的想法了。我到目前为止所有的一切都是

S → aYXYa
X → XbX | b | λ
Y → ???

认为生产规则SX会给我一个字符串,两边都有两个** a ** s ** b **在我想要的中间。但是,我不确定如何在a **的两侧放置尽可能多的** b **,同时确保*的数量完全相同*每边* a **。

任何建议,解决方案将不胜感激。感谢。

3 个答案:

答案 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。