生成语言L的BNF文法

BNF grammar that generates language L

我花了很多时间,但仍然无法理解如何解决这个问题。我有答案。你能告诉我他是怎么想出来的吗?

是否有我可以遵循的特定规则或标准结构?我知道并集和串联的规则,但不知道它们颠倒时的规则。

如果 xy 的(可能不正确的)子串,那么 x^r c y 可以写成 x^R c wxz 其中 wz(a+b)*.

上的任意字符串

现在我们可以尝试"slice"这种语言的字符串,看看它们是如何被CFGs生成的。非常规部分是确保 x^Rx 正确;其余的都是微不足道的。所以我们需要一些规则,例如:

S -> aXa | bYb | c

这给了我们 x^R c x。我们缺少 wz。我们可以通过让任意字符串出现在 c:

之后来添加 w
S -> aSa | bSb | cA
A -> aA | bA | e

我们可以通过将 S 更改为 T 并添加一个新的 S 来获得 z,它会产生 T 后跟任何内容:

S -> TA
T -> aTa | bTb | cA
A -> aA | bA | e

我们所忽略的只是 |x| > 1。我们通过将 T -> cA 更改为两个作品 T -> acAa | bcAb 来做到这一点。这会产生建议的语法(不是唯一正确的语法,只有一种有效的语法)并解释我们如何到达那里。