【问题标题】:Context free grammar for this language此语言的上下文无关语法
【发布时间】:2011-07-03 15:02:55
【问题描述】:

我正在编写一些测试准备材料,但遇到了这个问题。

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

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

到目前为止,我为反向部分得到了这个,但我不知道如何在确保回文属性仍然成立的同时合并每个 a 后跟一个 b 部分。

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

非常感谢任何帮助!

【问题讨论】:

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


    【解决方案1】:

    由于每个“a”后面都必须跟着一个“b”,并且结果词必须是回文(从头到尾读都是一样的),这意味着每个“a”也必须是前面有一个“b”。

    我们从中间开始构建单词,向两个方向发展。规则是,当中间部分以“a”(这是非终结符 A)结束(并因此开始)时,它必须跟在(和之前)一个“b”。另一方面,当中间部分被“b”包围时(这是非终结符 B),它可以用单个“a”(前一种情况)或任意数量的“b”展开。中间偶数“b”的特殊情况也得到处理。开始符号 S 只允许被 "b"s 限制的单词,因此所有规则都匹配。

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

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

    【讨论】:

    • 我相信这是可行的,我非常感谢深入的解释,因为这不仅仅是我想要的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2012-01-04
    • 2016-03-18
    相关资源
    最近更新 更多