从常规语言中导出正则表达式

时间:2010-03-24 20:53:27

标签: regex regular-language

鉴于下面的语言,我如何找到语言的正则表达式

L = {a ^ n b ^ m | n => 1,m => 1,nm => 3}

2 个答案:

答案 0 :(得分:4)

对于以下各项,

n> = 1且m> = 1且nm> = 3为真:

n = 1时,M> = 3

N'GT; = 3,m = 1的

N'GT; = 2,M> = 2

所以L = {abbb,abbbb,abbbbb,...} U {aaab,aaaab,aaaaab,...} U {a ^ n b ^ m | n> = 2,m> = 2}

这个正则表达式应该等同于L:

((abbb(b *))|(aaa(a *)b)|(aa(a *)bb(b *)))

可能有一个比这更简洁的答案。

答案 1 :(得分:3)

写下一组语言示例单词。感受他们。寻找模式。寻找公共前缀/后缀/子串。

abbb
abbbb
abbbbb
aabb
aabbb
aabbbb
aaab
aaabb
aaabbb
aaaab
aaaabb
aaaabbb

例如:请注意,所有字词均以a开头,以b结尾。所以,你的正则表达式看起来像a...b...部分是什么样的?

bb
bbb
bbbb
ab
abb
abbb
aa
aab
aabb
aaa
aaab
aaabb

这类似于a后跟至少一个ab可能后跟零个或多个b s。或者只是一系列超过两个b s。

a(a+|b)b*|b{2,}

您还可以说它是一系列至少两个a s或一系列至少两个b s或一系列a s后跟{{1 }}秒。我不会写下那个表达。

毕竟,这个作业,所以我会留给你去解决这个问题并将其与第一个结果放在一起。 (顺便说一句:我使用的所有快捷方式只是只是语法糖而且使正则表达式更强大。也就是说有一个简单的句法转换将它们变成标准的正则表达式。)

[我只是希望我是对的,不要自言自语: - )]