【问题标题】:deriving regular expressions from a regular language从正则语言派生正则表达式
【发布时间】:2011-01-31 11:08:24
【问题描述】:

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

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

【问题讨论】:

  • 你能提供一个链接到你正在使用的符号的描述吗?我想我知道其中大部分是什么意思,但我不确定“nm”是什么意思。
  • @sepp2k 我认为不在集合描述中。那么 nm =>3 意味着什么?
  • @Martin:呸,你当然是对的。我没有正确阅读。猜猜它只是意味着乘法。

标签: regex regular-language


【解决方案1】:

n>=1 and m>=1 and nm>=3 适用于以下各项:

n=1,m>=3

n>=3,m=1

n>=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*)))

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

【讨论】:

  • 符号“n => 1, m =>1, nm =>3”是什么意思。看了你的回答我也想不通?
  • 哦,如果这回答了您的问题,您应该将其标记为已回答!
  • 这意味着对于整数 n 和 m,n >= 1 AND m >= 1 AND n*m >= 3。在集合生成器表示法中,{a ^ n | n >= 0 } = { , a, aa, aaa, aaaa, ... }
  • @Sean >= 符号虽然颠倒了...看起来像一个箭头,如果这可能有意义的话。
  • @Sean,我得到了你的解决方案,但我不确定为什么我们必须包含 n>=2,m>=2 的最后一部分
【解决方案2】:

写下该语言的一组示例词。感受一下他们。寻找模式。寻找常见的前缀/后缀/子字符串。

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 可能后跟零个或多个 bs。或者只是两个以上bs 的系列。

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

您也可以说它是至少两个as 的系列或至少两个bs 的系列或as 后跟bs 的系列。我不会写下那个表达。

作业,毕竟,所以我将把它留给你去脱糖,然后把它和第一个结果放在一起。 (顺便说一句:我使用的所有快捷键都是只是语法糖,它们不会使正则表达式更强大。即有一个简单的句法转换将它们变成标准正则表达式.)

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

【讨论】:

    猜你喜欢
    • 2019-07-15
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 2015-08-20
    • 2013-04-27
    • 2016-12-02
    相关资源
    最近更新 更多