计算机理论:CFG和常规语言

时间:2016-03-12 10:39:45

标签: context-free-grammar regular-language

我正在从Daniel I.A的书中学习计算机理论。科恩。我的第一个问题是我不能完全理解正则表达式生成的单词。

我们以此为例:(aaa+b)*

我的理解是,这将生成:

  • 没有单词 - 因为整个表达式后跟*,即0 或更多事件。
  • 此形式的单词:aaab aaabaaab aaabaaabaaab,即相同的表达重复无限次。

请告知我对此的看法是否正确,如果我偏离轨道,请帮助我更好地理解这一点。

接下来,一般来说,对于给定的正则表达式,我该如何将其转换为CFG?有这样的公式或某种标准做法吗?您可以使用上面的正则表达式或任何表达式作为示例。

提前致谢!

根据答案中所讨论的内容和对该答案的评论,我认为FA看起来像这样:

FA

1 个答案:

答案 0 :(得分:0)

正则表达式是一个很大的话题。并非一切都可以在一篇文章中解释。我建议您阅读Regular-Expressions.info

中的正则表达式

在这里,我将解释您的模式在您使用的quantifiers的上下文中匹配的内容。

<强>量词:

  • +将匹配一个或多个模式。

  • *将匹配0或更多。

正则表达式: (aaa+b)*

<强>解释

  • 您的第一点是正确的,它将与nothing匹配,因为使用*量词。

  • 然而,你的第二点是不完整的。 如您所见,+位于a之后。它仅适用于a,表示一个或多个a。 因此,以下模式也将是匹配。

  • aaaab:请注意前三个a然后一个a+

  • 造成的重复相匹配
  • aaaaaabaab:此处第一个aaaaaab将是整场比赛的子匹配。

You can better understand visually here.