【问题标题】:The Definition of Regular Languages正则语言的定义
【发布时间】:2011-02-22 13:51:21
【问题描述】:

我已经尝试并烧了我的大脑来理解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不能是Ba的形式。其次,为什么lambda只允许用于起始符号only。书中指出,常规语言相当于有限状态自动机,我们可以很容易地看到,我们可以为这两种情况构建 FSA。我查看了其他资源,这些资源中不存在这些限制。

【问题讨论】:

  • 你检查过这本书有没有勘误?
  • @David M 不,我没有这样做,但我现在会这样做。有趣的是,在第 (795) 页上,练习#19 (i, j) 正是根据这个定义解决的。
  • 我刚刚检查了第 6 版的勘误表。并且没有找到任何东西:highered.mcgraw-hill.com/sites/dl/free/0072880082/299357/…

标签: regex computer-science grammar regular-language


【解决方案1】:

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

以下文法以W为起始符号:

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

它生成 {an bn : n natural } 这不是常规语言。因此,如果您只想生成常规语言,则此限制是必不可少的。或者,您可以允许 w2 = Ba,但 禁止 w2 = aB 类型的规则 - 这也给出了常规语言。该语法将构建一个单词“backwards”。

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

第二,为什么 lambda 只允许用于起始符号。

这不是必要的限制。

您可以消除所有非终结符号的 lambda 用法:取一些规则 W -> lambda,删除它,然后将所有规则 U -> aW 替换为 U -> aW 和 U -> a。显然,您不能消除使用 lambda 作为终端符号(该语言不会再产生空字)。

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

【讨论】:

  • 很好的答案。非常感谢:)
猜你喜欢
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
相关资源
最近更新 更多