简化正则表达式,自动机理论

时间:2016-10-05 06:54:56

标签: regex regular-language automata

我最近需要找出该语言的正则表达式 {w | | w |是奇数,w以字母{a,b}开头和结尾符号b}。

我想出了一个解决方案

b(ab+bb+aaab+aabb+abab+abbb+bbbb+bbab+babb+baab)*

解决方案很长,所以我希望有人可以告诉我一种可以简化的方法,

2 个答案:

答案 0 :(得分:3)

你可以尝试b|(b(a|b)((a|b)(a|b))*b) 您描述的语言只能生成b,并且由第一个分支捕获,这是它可以生成的唯一大小为1的字符串。然后它可以产生大小3,5,7,...字符串。这些被第二个分支捕获。开头和结尾的b是不言自明的。那些占2个字符。中间位是{w | |w| is odd}上的经典语言{a,b}

更强大的语法允许b((a|b)((a|b)^2)*b)?这样的东西,它更紧凑,但相当。

答案 1 :(得分:0)

最简单的一个:

(b(a|b)(aa|ab|ba|bb)*b)|b