计算机理论:CFG 和常规语言
Computer Theory: CFG and Regular Languages
我正在从 Daniel I.A 的书中学习计算机理论。科恩。我的第一个问题是我不完全理解正则表达式生成的单词。
我们以此为例:(aaa+b)*
我的理解是这将生成:
- 没有字-因为整个表达式后面都是*,也就是0
或更多次。
- 这种形式的词:
aaab
aaabaaab
aaabaaabaaab
,即相同的表达无限次重复。
请指出我的想法是否正确,如果我偏离了轨道,请帮助我更好地理解这一点。
接下来,一般来说,对于给定的正则表达式,我该如何将其转换为 CFG?是否有公式或某种标准做法可以这样做?您可以使用上述正则表达式或任何表达式作为示例。
提前致谢!
根据答案中讨论的内容和对该答案的评论,我认为 FA 看起来像这样:
正则表达式是一个很大的话题。不是所有的事情都可以用一个post来解释。我建议您阅读 Regular-Expressions.info
中的正则表达式
在这里,我将解释您的模式将在您使用的 quantifiers
上下文中匹配什么。
量词:
+
将匹配一个或多个模式。
*
将匹配 0 个或多个。
正则表达式: (aaa+b)*
解释:
您的第一点是正确的,它将匹配 nothing
,因为使用了 *
量词。
但是你的第二点不完整。
如您所见,+
在 a
之后。它将仅应用于最后一个 a
,这意味着一个或多个 a
。
所以下面的模式也将是一个匹配项。
aaaab
:注意前三个 a
然后一个 a
匹配由 +
[=28= 引起的重复]
aaaaaabaab
:这里第一个aaaaaab
将是整个匹配的子匹配。
我正在从 Daniel I.A 的书中学习计算机理论。科恩。我的第一个问题是我不完全理解正则表达式生成的单词。
我们以此为例:(aaa+b)*
我的理解是这将生成:
- 没有字-因为整个表达式后面都是*,也就是0 或更多次。
- 这种形式的词:
aaab
aaabaaab
aaabaaabaaab
,即相同的表达无限次重复。
请指出我的想法是否正确,如果我偏离了轨道,请帮助我更好地理解这一点。
接下来,一般来说,对于给定的正则表达式,我该如何将其转换为 CFG?是否有公式或某种标准做法可以这样做?您可以使用上述正则表达式或任何表达式作为示例。
提前致谢!
根据答案中讨论的内容和对该答案的评论,我认为 FA 看起来像这样:
正则表达式是一个很大的话题。不是所有的事情都可以用一个post来解释。我建议您阅读 Regular-Expressions.info
中的正则表达式在这里,我将解释您的模式将在您使用的 quantifiers
上下文中匹配什么。
量词:
+
将匹配一个或多个模式。*
将匹配 0 个或多个。
正则表达式: (aaa+b)*
解释:
您的第一点是正确的,它将匹配
nothing
,因为使用了*
量词。但是你的第二点不完整。 如您所见,
+
在a
之后。它将仅应用于最后一个a
,这意味着一个或多个a
。 所以下面的模式也将是一个匹配项。aaaab
:注意前三个a
然后一个a
匹配由+
[=28= 引起的重复]aaaaaabaab
:这里第一个aaaaaab
将是整个匹配的子匹配。