在Chomsky Normal Form中为语言构造上下文无关语法

时间:2016-04-26 16:31:07

标签: theory context-free-grammar computation-theory chomsky-normal-form

我试图用Chomsky Normal Form构建一个CFG,尽可能少地接受包含唯一字符串a ^ 21的语言。

我明白我可以转换

S - > AAAAAAAAAAAAAAAAAAAAA A - >一个

但有没有其他方法可以缩短该语言,然后将其转换为Chomsky Normal Form?

1 个答案:

答案 0 :(得分:1)

我们可以非常轻松地表明,我们需要至少六个符号,希望通过识别我们每次生成时最多可以将生成的字符串长度加倍,并希望在CNF中为此语言生成CFG,我们必须从2 ^ 0开始:< / p>

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中没有语法,其中六个产生了我们的目标语言。我们通过自下而上构建语法来开始论证。

  1. 我们必须A_1 := a才能获得任何字符串。
  2. 我们必须A_2 := A_1 A_1才能获得长度大于1的字符串。
  3. 我们现在可以生成A_3或跳过它并生成A_4或两者。我们在下面考虑这些案例。
  4. 案例1:A_3

    1. 我们添加A_3 := A_2 A_1
    2. 我们已经有3个制作,并知道我们需要A_21 := X Y形式之一。所以我们最多可以添加两个。即使我们添加了现在最大的作品 - A_6A_12 - 我们也无法根据需要生成A_21(我们最多可以生成A_18 := A_6 A_12。所以添加A_3无法为我们提供在六个作品中生成语言的语法。
    3. 案例2:A_4

      1. 我们添加A_4 := A_2 A_2
      2. 我们已经有3个制作,并知道我们需要A_21 := X Y形式之一。所以我们最多可以添加两个。我们目前的选项为A_5A_6A_8。由于我们针对上述案例1所述的相同原因,A_5A_6将失败。但是,A_8并没有因为这种推理而失败,因此我们添加了A_8 := A_4 A_4
      3. 我们现在只有一个产品,需要它是A_20, A_19, A_17A_13。我们无法使用现有作品生成任何这些作品。
      4. 因此我们排除了一个包含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个制作。