任何非空字符串 - 常规语言

时间:2013-05-06 13:55:33

标签: regular-language

我真的没有看到表达式的区别。

任何字符串然后是:任何非空字符串

字母Σ

{a, b, c}

我了解(a+b+c)*可以是a, b, c

但另一个(a+b+c)会产生什么不同?

enter image description here

这些答案取自一些演讲幻灯片。

有人可以解释为什么我们需要另一个(a+b+c)吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

请记住,星号表示零次或多次出现。所以第一个例子可能会产生一个空字符串。但是,第二个字符串必须以a,b或c中的一个开头,然后可能是零个或多个其他字符,因此它的长度至少为一个字符。

答案 1 :(得分:1)

如果字符串只是“”,则该字符串可以为空。这是字符串的有效值,因此它将成为“任何字符串”的一部分。

答案 2 :(得分:1)

当您将Kleen star clouser应用于任何RE时,如果(a+b+c)*,则会生成空字符串(长度= 0),因此当*替换为0时,结果将为空串。为了摆脱那个空字符串,我们在(a+b+c)之前放置(concat)(a+b+c)*,以便(a+b+c)*生成的每个字符串都以a or b or c为前缀,这样我们就是确保此RE无法生成空字符串。