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

Computer Theory: CFG and Regular Languages

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

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

我的理解是这将生成:

请指出我的想法是否正确,如果我偏离了轨道,请帮助我更好地理解这一点。

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

提前致谢!

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

正则表达式是一个很大的话题。不是所有的事情都可以用一个post来解释。我建议您阅读 Regular-Expressions.info

中的正则表达式

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

量词:

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

  • * 将匹配 0 个或多个。

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

解释:

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

  • 但是你的第二点不完整。 如您所见,+a 之后。它将仅应用于最后一个 a,这意味着一个或多个 a。 所以下面的模式也将是一个匹配项。

  • aaaab:注意前三个 a 然后一个 a 匹配由 +[=28= 引起的重复]

  • aaaaaabaab:这里第一个aaaaaab将是整个匹配的子匹配。

You can better understand visually here.