代码之家  ›  专栏  ›  技术社区  ›  Khaled Alshaya

正规语言的定义

  •  6
  • Khaled Alshaya  · 技术社区  · 15 年前

    我已经尝试过了,为了理解规则语言的定义 Discrete Mathematics and its Applications(Rosen) 没有达到理解这本书中的定义为何如此的目的。在第(789)页,我是 再措词 定义:

    类型3语法定义为:

    w1 --> w2
    

    其中,w1是非终端,w2的形式为:

    w2 = aB
    w2 = a
    

    其中b是非终端,a是终端。特殊情况是,当w1是起始符号,w2是lambda(空字符串)时:

    w1 = S
    S --> lambda
    

    两个问题我找不到答案。首先,为什么不能 W2 属于形式 文学士 . 第二,为什么 兰姆达 仅允许用于起始符号 只有 . 书中指出,正则语言等价于有限状态自动机,我们可以很容易地看到,我们可以为这两种情况构建FSA。我查看了其他资源,这些资源中不存在这些限制。

    1 回复  |  直到 12 年前
        1
  •  5
  •   sdcvvc    15 年前

    首先,为什么w2不能是ba的形式。

    以W为起始符号的语法如下:

    W -> lambda
    W -> aX
    X -> Wb
    

    它产生{a n n :n自然不是常规语言。因此,如果您只想生成常规语言,那么这个限制是必要的。或者,您可以允许w2=ba,但是 禁止 w2=ab类规则-这也提供常规语言。这种语法将建立一个“向后”的词。

    如果您允许这两种类型的规则,您将得到一个名为 linear languages .

    其次,为什么lambda只允许用于起始符号。

    这不是必要的限制。

    您可以消除对非终端符号使用lambda的所有情况:采用一些规则w->lambda,将其删除,并将所有规则u->a w替换为u->a w和u->a。显然,您不能消除对终端符号使用lambda的情况(该语言不再生成空词)。

    因此,在许多地方使用lambda的每一个类型3语法都可以“规范化”为只对起始符号使用lambda的语法。