CFG的正常形式(如Chomsky正常形式)的重要性


12

我知道无上下文语法可以用来表示无上下文语言,可能会有歧义。我们也有正常形式,例如ChomskyGreibach正常形式。我不明白这个需要。

为什么它们在语言理论中很重要?我提到的所有教科书都讲述了这些正常形式,但没有说明其重​​要性。


2
给出构造性证明时,范式很方便。
KarolisJuodelė13年

Answers:


12

至少有两个相关用途。

  1. 证明的简单性
    围绕上下文无关的语法有很多证明,包括可归约性和自动机的等效性。这些越简单,您要处理的语法集就越严格。因此,此处的普通表格可能会有所帮助。

    εε

  2. 启用解析
    尽管可以使用PDA解析任何语法的单词,但这通常很不方便。范式可以为我们提供更多可使用的结构,从而简化了解析算法。

    作为具体示例,CYK算法使用Chomsky范式。另一方面,Greibach范式可以进行递归下降解析。尽管可能需要回溯,但空间复杂度是线性的。


5

Chomsky范式使多项式时间算法可以确定语法是否可以生成字符串。如果您知道动态编程,则该算法非常精巧。

InAnn

A[i,j]GI(i,j)

A[1,n]SS

def decide (string s,grammar G):
    //base case
    for i=1 to n:
        N[i,i]=I[i]    //as the substring of length one can be generated by only a
                       terminal.
    //end base case

    //induction
    for s=1 to n:       //length of substring
        for i=1 to n-s-1: //start index of substring
            for j=i to i+s-1:   //something else
                 if there exists a rule A->BC such that B belongs to N[i,j] and C
                 belongs to N[j+1,i+s-1] then add A to N[i,i+s-1]
    //endInduction

    if S belongs to N[1,n] then accept else reject.

我知道索引看起来很疯狂。但是基本上这是正在发生的事情。

  • 我认为基本情况非​​常清楚。

  • ss

  • 5sub1A>BCBCAN[1,6]

  • N[1,n]


  • 3
    这是CYK算法,a)您应这样命名,b)在我的回答中已经提到。请注意,多项式运行时仅给人留下深刻的印象,因为该算法在所有CFG上都是统一的,也就是说很通用。
    拉斐尔

    @Raphael好吧....我不知道名字:)
    ishan3243 2013年

    By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
    Licensed under cc by-sa 3.0 with attribution required.