我正在从Daniel I.A的书中学习计算机理论。科恩。我的第一个问题是我不能完全理解正则表达式生成的单词。
我们以此为例:(aaa+b)*
我的理解是,这将生成:
aaab
aaabaaab
aaabaaabaaab
,即相同的表达重复无限次。请告知我对此的看法是否正确,如果我偏离轨道,请帮助我更好地理解这一点。
接下来,一般来说,对于给定的正则表达式,我该如何将其转换为CFG?有这样的公式或某种标准做法吗?您可以使用上面的正则表达式或任何表达式作为示例。
提前致谢!
根据答案中所讨论的内容和对该答案的评论,我认为FA看起来像这样:
答案 0 :(得分:0)
正则表达式是一个很大的话题。并非一切都可以在一篇文章中解释。我建议您阅读Regular-Expressions.info
中的正则表达式在这里,我将解释您的模式在您使用的quantifiers
的上下文中匹配的内容。
<强>量词:强>
+
将匹配一个或多个模式。
*
将匹配0或更多。
正则表达式: (aaa+b)*
<强>解释强>
您的第一点是正确的,它将与nothing
匹配,因为使用*
量词。
然而,你的第二点是不完整的。
如您所见,+
位于a
之后。它仅适用于a
,表示一个或多个a
。
因此,以下模式也将是匹配。
aaaab
:请注意前三个a
然后一个a
与+
aaaaaabaab
:此处第一个aaaaaab
将是整场比赛的子匹配。