答案 0 :(得分:0)
如果x
是({1}}的(可能是不正确的)子字符串,则y
可以写为x^r c y
x^R c wxz
和w
是z
之上的任意字符串。
现在我们可以尝试"切片"用这种语言的字符串来看看它们如何由CFG生成。这方面的非常规部分是确保(a+b)*
和x^R
出来正确;其余的都是微不足道的。所以我们需要一些规则,如:
x
这给了我们S -> aXa | bYb | c
。我们错过了x^R c x
和w
。我们可以通过在z
之后放置任意字符串来添加w
:
c
我们可以通过将S -> aSa | bSb | cA
A -> aA | bA | e
更改为z
并添加生成S
的新T
后跟任何内容来获得S
:
T
我们忽略了确保S -> TA
T -> aTa | bTb | cA
A -> aA | bA | e
。我们通过将|x| > 1
更改为两个作品T -> cA
来实现这一目标。这产生了建议的语法(不是唯一正确的语法,只有一个语法有效)并解释了我们如何到达那里。