[英]Construct a context free grammar for a language in Chomsky Normal Form
我正在尝试以 Chomsky Normal Form 构建一个 CFG,并尽可能少地接受包含唯一字符串 a^21 的语言。
我知道我可以转换
S -> AAAAAAAAAAAAAAAAAAAAAA -> a
但是有没有其他方法可以缩短该语言然后将其转换为乔姆斯基范式?
我们可以很容易地证明,我们至少需要六个符号才能为这种语言生成 CNF 中的 CFG,方法是认识到我们最多可以在每次产生时将生成的字符串长度加倍,而且我们必须从 2^0 开始:
A_21 := ...
A_16 := A_16 A_16
A_8 := A_4 A_4
A_4 := A_2 A_2
A_2 := A_1 A_1
A_1 := a
然后我们可以证明 CNF 中没有语法,有六个产生式来生成我们的目标语言。 我们通过自下而上构建语法来开始论证。
A_1 := a
来获取任何字符串。A_2 := A_1 A_1
才能得到长度大于 1 的任何字符串。A_3
或跳过它并生成A_4
,或两者兼而有之。 我们将在下面考虑这些情况。 案例 1: A_3
A_3 := A_2 A_1
。A_21 := XY
形式A_21 := XY
。 所以我们最多可以添加两个。 即使我们添加了现在可能的最大产生式 - A_6
和A_12
- 我们也不能按要求产生A_21
(我们最多可以产生A_18 := A_6 A_12
。所以添加A_3
不能得到我们生成我们语言的语法在六个制作中。 案例 2: A_4
A_4 := A_2 A_2
。A_21 := XY
形式A_21 := XY
。 所以我们最多可以添加两个。 我们目前的选项是A_5
、 A_6
和A_8
。 A_5
和A_6
将失败,原因与我们针对上述案例 1 所述的原因相同。 然而, A_8
不会因为这个推理而失败,所以我们添加A_8 := A_4 A_4
。A_20, A_19, A_17
或A_13
。 我们无法使用我们现有的作品生成任何这些。因此,我们排除了具有 6 个产生式的语法。 如果您尝试使用上述推理找到具有 7 个产生式的语法,您会找到几个。 既然我们知道 CNF 中有 7 个产生式的语法,而没有 6 个产生式,那么您就完成了。 以下是 7 个产生式语法中的一些:
S := A_18 A_3
A_18 := A_9 A_9
A_9 := A_6 A_3
A_6 := A_3 A_3
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_17 A_4
A_17 := A_9 A_8
A_9 := A_8 A_1
A_8 := A_4 A_4
A_4 := A_2 A_2
A_2 := A_1 A_1
A_1 := a
S := A_16 A_5
A_16 := A_8 A_8
A_8 := A_4 A_4
A_5 := A_4 A_1
A_4 := A_2 A_2
A_2 := A_1 A_1
A_1 := a
S := A_15 A_6
A_15 := A_9 A_6
A_9 := A_6 A_3
A_6 := A_3 A_3
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_14 A_7
A_14 := A_7 A_7
A_7 := A_4 A_3
A_4 := A_3 A_1
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_13 A_8
A_13 := A_8 A_5
A_8 := A_5 A_3
A_5 := A_3 A_2
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_12 A_9
A_12 := A_9 A_3
A_9 := A_6 A_3
A_6 := A_3 A_3
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_11 A_10
A_11 := A_10 A_1
A_10 := A_8 A_2
A_8 := A_4 A_4
A_4 := A_2 A_2
A_2 := A_1 A_1
A_1 := a
还有更多。 困难的部分是显示没有任何 6 个作品。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.