我正在尝试为:
创建一个CFGL = {az n |a∈{x,y} *和n = a中x的个数或}中的y个数
我不确定如何或从哪里开始。
我理解语言描述是x和y的字符串,后跟一串z,其中z的数量必须与x或y相同。
示例:{xxyxyyxxyzzzzz, yxyxyxyyyzzzzzz, etc...}
这是我的“最佳”解决方案:
S => xSz | ySz | ϵ
我知道这是错误的,因为z产生相同数量的x和y组合,而不是单独的x或y。
编辑:
我认为这是答案,但我不确定。它似乎有效。
S => xSz | ySz | xS | yS | ϵ
编辑:
那不行,因为它也接受无效字符串......
答案 0 :(得分:1)
我认为您的问题可以分解为两种语言的联合
L = L 1 U L 2
L 1 是(x i ,y j )z k 其中i == k和L 2 足够j == k
换句话说,L 1 包含相等的x和z,而L 2 包含相等的y和z。
因此,对于L 1 ,我们可以将CFG组成
S 1 =&gt; 1 S 1 z |乙<子> 1 子>
1 =&gt; 1 B 1 | B 1 A 1 | X
B 1 =&gt; yB 1 | ë
前两个产品确保它产生相同数量的x和z;
同样,我们可以为L 2 构建CFG:
S 2 =&gt; 2 S 2 z |乙<子> 2 子>
2 =&gt; A 2 B 2 | B 2 A 2 | ÿ
B 2 =&gt; xB 2 | ë
最后,我们可以将这些作品联合起来得到答案:
S =&gt; S 1 |小号<子> 2 子>
答案 1 :(得分:0)
我认为这就是答案:
S = A | B
A = C xSz | C
B = D ySz | D
C = yC | e
D = xD | e
不确定是否可以减少