我是自动机的新手,正在学习对语言进行正则表达。但是我一直被困在这个。
假设我们有一种语言L,即所有在字母集上定义为正好为1个三元组“ b” 的字符串的语言Σ= {a,b}
经过几次尝试,我想到了这个
(a *(ab)*(ba)*)* bbb(a *(ab)*(ba)*)*
但后来我意识到这也是错误的,因为字符串 abbbabababb 不适用于此字符串。
请问有人指出我的错误或帮我解决了,因为我已经花了将近一个小时的时间。
答案 0 :(得分:0)
从描述该语言的DFA开始:
States: start, b, bb, bbb, bbba, bbbab, bbbabb, x
Accepting: bbb, bbba, bbbab, bbbabb
Transitions:
start, a, start
start, b, b
b, a, start
b, b, bb
bb, a, start
bb, b, bbb
bbb, a, bbba
bbb, b, x
bbba, a, bbba
bbba, b, bbbab
bbbab, a, bbba
bbbab, b, bbbabb
bbbabb, a, bbba
bbbabb, b, x
(Example of this DFA in action)
从那里,您可以convert the DFA into a regular expression,尽管使用此算法时将省略x'dump'状态。您最终会得到类似
的表达式(|a|ba|bba)*(bbb|bbba(|a|ba|bba)*(|b|bb))