构造生成给定语言的正则表达式

时间:2012-10-20 12:35:23

标签: string expression computation

这是我的教科书“Introduction to theory of Computation”中的一个例子。 鉴于字母∑ as{0,1}

{w|every 0 in w is followed by atleast one 1}} 

它的正则表达式显示为(01+)*. 1+表示只有一个1的实例。现在我理解的是(01+)*意味着像0101010101010101....这样的字符串如果我有一个字符串怎么办? 11111101 or 011111111或仅1 这些字符串确实符合给定的标准。但正则表达式(01+)*不会生成它们。

Secondly for `{w|w starts and ends with same symbol}` the expression is given as `0∑*0 U 1∑*1 U 0 U 1.`

据我所知,两件事的结合意味着第一个或第二个 OR BOTH 。如果我为0∑*0取一个字符串01110,为10001 1∑*1取另一个字符串,然后取这两个0111010001的并集,则联合字符串DOESNOT以相同的符号开头和结尾。这是否意味着联盟不能将两者结合起来或表达不正确?

1 个答案:

答案 0 :(得分:1)

1+表示'一个或多个1'。因此,它生成1,11,111等。所以正则表达式(01+)*实际上生成了一个字符串,其中“每0后跟一个或多个1,字符串中的第一个符号不是1”。

要获得{w|every 0 in w is followed by atleast one 1},正则表达式会略有不同。它将是1*(01+)*

在第二个问题中,你所采取的是串联。与01110联网的100010111010001。两个集合的联合是包含两个集合的所有元素的集合