需要有关上下文无关语法的帮助。我想要一个字母b永远不会增加三倍的cfg。这意味着没有单词包含子字符串bbb。语言仅包含字母{a,b}
答案 0 :(得分:1)
以下是该语言的有用的递归定义:
首先,让我们确保此定义正确。毫不夸张地说,该定义定义了必须使用目标语言的字符串。子字符串为bbb的字符串不能满足上述规则。该定义是否涵盖所有情况,以便所有不带子字符串bbb的字符串都能工作?实际上,它必须。考虑语言中的任何字符串。它的长度小于三(在这种情况下,我们可以检查所有可能的字符串是否正确处理)。对于更长的字符串,它们必须以a,ab或abb结尾(它们不能以bbb结尾)。我们的规则暗示在语言中存在不带这些后缀的字符串x,可以以递归方式检查其成员资格。通过数学归纳可以将其反过来得出令人信服的证明。
有了上面的递归定义,我们可以写下相应的语法:
S -> e | b | bb | Sa | Sab | Sabb
这里真正的聪明才智得到了定义。我是怎么做到的?我想到了该语言中最短的字符串-唯一的字符串,这些字符串不适合某个模式-然后我问如何从较短的字符串中提取较长的字符串。也就是说,给定一个语言字符串,您如何将其变大?这是无上下文语法允许我们执行的关键。