1

字母 E = {a, b, c}

问答: http ://d.pr/i/3N41

图片

我知道我们必须在外面有两个 a,但为什么我们有[]-*这些对这个特定的表达有什么作用?除此之外,我不太确定这意味着什么http://d.pr/i/uff7 -{ w | |W|}它只是将语言放入的变量吗?

任何帮助是极大的赞赏!

4

3 回答 3

2

我在 Bash 中写这个的方式是 aa[abc]([abc][abc][abc])* 这意味着令牌应该以“aa”开头,后跟'a'or'b''c'因此( aa[abc] )

[abc]等价于(a + b + c)在正式表示中表示'a''b''c'

x*表示'x'任意次数,包括零

所以([abc][abc][abc])*意味着(('a' or 'b' or 'c')三次)发生任意次数。

正式的表达方式是[(a+b+c)(a+b+c)(a+b+c)]*

方括号就像普通的括号(例如,不像 Bash 或 Javascript 正则表达式),但我们通常在封闭的部分内部已经有括号时使用它们以增强可读性。星号适用于它前面的方括号中的孔块。

于 2013-05-05T12:31:58.157 回答
2

要首先回答您的后半部分问题,该表达式可以描述如下:

语言L a由一组单词w组成,其中 w 的长度3 的倍数,waa开头。

竖线介绍了w要包含在集合中必须满足的条件。

第二个w两侧的条表示长度。

然后看答案,你有aa,因为这是单词必须以它开头,后跟另一个字母(abc),给你一个匹配的 3 个字母的单词。

之后,任何其他单词都需要额外添加 3 个字母,每个字母可以是abc。所以星号 (*) 表示这可能发生 0 次或多次,而括号 [] 仅表示星号适用于表达式的哪一部分。

于 2013-05-05T12:35:52.410 回答
0

在这种情况下[...],是对三个字母系列进行分组,*表示出现 0 次或多次。

你有“aa”,然后你必须有一个字母,所以有(a+b+c),其余的都是可选的。

于 2013-05-05T12:19:46.440 回答