字母E = {a,b,c}
问题与答案: http://d.pr/i/3N41
我知道我们必须在外面有两个a但是为什么我们有[]
和*
- 这些特殊表达式会做什么?除此之外,我不太清楚这意味着什么http://d.pr/i/uff7 - { w | |W|}
它只是一个将语言放入的变量?
非常感谢任何帮助!
答案 0 :(得分:2)
我在Bash中写这个的方式是aa [abc]([abc] [abc] [abc])*这意味着
该令牌应以“aa”开头,然后是'a'
或'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正则表达式不同)但我们通常在封闭部分内部有括号时使用它们以增强可读性。星号适用于前面方括号中的孔块。
答案 1 :(得分:2)
首先回答问题的后半部分,该表达式可以描述如下:
语言 L a 由单词 w 组成,其中 w 的长度为3的倍数和 w 以 aa 开头。
垂直条引入了 w 必须满足的条件才能包含在集合中。
第二个 w 两侧的条形表示长度。
然后看看答案,你有 aa ,因为这就是这个词必须以什么开头,然后是另一个字母( a , b 或 c ),给你一个3个字母的单词匹配。
之后,任何其他单词都需要额外的3个字母,每个字母可以是 a , b 或 c 。所以星号(*)表示这可以发生0次或更多次,括号[]只表示星号适用于表达式的哪一部分。
答案 2 :(得分:0)
在这种情况下,[...]
正在对三个字母系列进行分组,*
表示出现0次或更多次。
你有“aa”然后你必须有一个字母,所以有(a + b + c),其余的是可选的。