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

Simplify Regular Expression, Automata Theory

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

我想出了一个解决方案

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

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

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

的经典语言

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

最简单的一个:

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