这种语言的上下文无关语法

时间:2011-02-24 14:39:06

标签: context-free-grammar automata regular-language automata-theory

我正在研究一些测试准备材料并坚持这个问题。

显示L = {w e {a,b} *:w = wR的上下文无关语法,每个a后面紧跟一个b}。

wR是相反的。所以,在英语中,一个回文,每个“a”后跟一个“b”,使用任意数量的a和b。

到目前为止,我在相反的部分得到了这个,但我无法弄清楚如何合并每个a后跟一个b部分,同时确保回文属性仍然存在。

S -> bSb | b | [the empty string]

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

因为每个“a”后面必须跟一个“b”,并且得到的单词必须是回文(如果从结尾读到开头就是相同的),这意味着每个“a”也必须是之前是“b”。

我们从中间开始构建单词,向两个方向发展。规则是当中间部分以“a”(这是非终结符号A)结束(并因此开始)时,必须遵循(并且先于)“b”。另一方面,当中间部分被“b”(这是非终结符号B)所包围时,它可以用单个“a”(前一个例子)或任何数量的“b”扩展。在中间均匀编号为“b”的特殊情况也被处理。起始符号S仅允许受“b”限制的单词,因此所有规则都匹配。

S -> B | [empty]
B -> bAb | bBb | bb | b
A -> aBa | a

编辑:我之前的解决方案不正确,我希望现在可以使用。