找到所有语言L的无上下文语法(CFG) 单词使得一个单词中的每个终端在可能大的字母表中偶数次出现Σ
<击> 我的长期是(唯一的非终结者是S):
S⟶| SS
x∈Σ:S⟶xSx
x,y∈Σ:S⟶xxSyy| yySxx | xySxy | xySyx | yxSyx | yxSyx
这是对的吗?
制作会产生正确的单词,它们会生成所有单词吗?
击>
编辑:大字母表上的CFG可以描述一种语言,每个终端出现偶数次吗?
EDIT_2:如果存在解,那么Chomsky Normal Form是否可能是|Σ|中的多项式?
答案 0 :(得分:1)
甚至有一种常规语法来实现这一目标。由于每个常规语法都是按照定义无上下文的,因此答案是“是”。也可以构造有限自动机,但是因为你要求语法......
以下是如何:回想一下常规语法允许形式A - &gt;的规则。 b C或A - &gt; b或A - >; epsilon,其中A和C是非终端,b是终端。这实质上意味着每个非终端生成一个终端和另一个非终端,它将生成其余的字符串;我们可以说每个非终端都会对它生成的字符串进行某种特性的编码。
现在考虑字母表Sigma的所有子集。由于Sigma应该是有限的,所以子集(powerset)也是如此。让这组非终端成为西格玛的主力。
从规则开始:{} - &gt;每个终端a {a}。 对于每个非终端X,添加规则X - &gt;如果a在X中,则为X- {a};或X - &gt;如果a不在X中,则为X + {a} (我正在写一些+和 - 为了设置联合和区别)。
最后,添加{} - &gt; epsilon(空字)。
语法在其非终端中精确编码出现在奇数中的终端组,因此必须再次“取消”。