乔姆斯基层次结构 - 类型1上下文敏感语言

时间:2016-03-29 15:39:29

标签: theory context-sensitive-grammar chomsky-hierarchy

我尝试用不同的关卡来解读Chomsky层次结构。

我检查了一些例子,这是一个我不太懂的例子。也许有人知道为什么这个不是上下文敏感的语言:

S → aA 
A → aA | ε
B → bA

1 个答案:

答案 0 :(得分:0)

您提供的语法G毫无疑问是无上下文的(每个规则在LHS中有一个非终端,在RHS中有一串终端和非终端)。因此,它生成的语言L是无上下文的。因此,由于无上下文语言的类别是上下文相关语言的适当子集,语言L是上下文敏感的。 (我不知道你在哪里读到这种语言L不是上下文敏感的。要么你误读了这个,要么你读的是完全错误的。)

我会猜测这种混乱的原因。我们假设您声称语法 G(不是语言 L)不是上下文相关的。现在,也许奇怪的是,如果一种语言是上下文敏感的,这并不意味着生成这种语言的所有语法都是上下文敏感的(对于其他类别也是如此,当然除了不受限制之外)一)。如果语言是上下文敏感的,这意味着生成它的上下文敏感语法。因此,即使L对上下文敏感,这并不一定意味着G也是上下文敏感的。

如果G(无上下文语法)不是上下文敏感的话会很奇怪。这是否真实取决于您对上下文敏感语法的确切定义。正如您可以阅读的那样,例如,在related Wikipedia article中,对于上下文相关语法至少有两个备选定义:

  1. 所有规则都是αAβ→αγβ形式的语法,其中A是非终端符号,α,β,γ是终端和非终端的字符串。
  2. 所有规则都是α→β形式的语法,其中α和β是终端和非终端的串,但是α的长度不大于β的长度。作为例外,起始符号S可以有规则S→ε(否则将被禁止)。
  3. 根据定义1,语法G是上下文敏感的(上下文字符串α和β通常是空的)。但是,根据定义2,语法G不是,因为非终端A的空生产规则不是起始符号。

    然而,可以提供等效语法G',其根据两个定义对上下文敏感并产生相同的语言L。一种这样的语法可以构造如下:

    A产生零或多个“a”的字符串。我们可以通过以下方式替换它的定义:

    A → A' | ε
    A' → a | aA'
    

    其中A'产生一个或多个“a”的字符串。请注意,A的规则不是递归的。我们可以在S和B的规则中替换A的产生,然后消除非终端A.这给了我们:

    S → aA' | a
    A' → a | aA'
    B → bA' | b
    

    根据上述两种定义,这种语法(通过注意A'和S产生相同的语言可以进一步简化)是上下文敏感的。