提供生成奇数长度语言的上下文无关语法 {w = 0*1* : |w|很奇怪}

Provide a context-free grammar that generates odd length language {w = 0*1* : |w| is odd}

提供上下文无关语法,在

上生成以下语言

Σ = {0,1}: {w = 0*1* : |w|是奇数}

我的解决方案:

S->AB|0|1

A->0A|^

B->1B|^

但是使用这个语法我们可以创建偶数个字符串。

我想要生成 L = {0,1,000,111,001,011,00000,11111,00001,00011....}

奇数是奇数和偶数之和,所以语言中的句子要么是奇数个 0 后跟偶数个 1,要么是偶数个 0 后跟奇数的数量。此外,奇数是偶数加一;如果我们在前面的描述中进行替换,我们会得到 "an even number of 0s followed by either 0 or 1, followed by an even number of 1s"。由于每个偶数都比偶数多 0 或 2,所以我们最终得到。

S -> A 0 B | A 1 B
A -> ε | A 0 0
B -> ε | B 1 1

S -> 0 | 1 | 0 0 S | S 1 1