我一直试图转换正则表达式
首先使用Thompson的结构得到非确定性有限自动机(NFA),给出:
,看起来是正确的。
然后我使用子集构造从NFA创建DFA,如图所示。
但这对我来说看起来不正确,因为根据我构建的DFA,0后跟0无效。我想知道我应该如何在原始正则表达式中对epsilon进行建模,因为我只是将其视为正常的epsilon。
答案 0 :(得分:0)
已经有一个匹配 - 因此你的图表中dfa的状态B必须已经是一个接受状态(只需将其标记为接受不会修复它!)。我无法重建你的想法,但你应该以类似
的方式结束A --0--> (B)
A --1--> C
B --0--> (B)
B --1--> C
C --0--> (B)
C --1--> C
如果您从另一方开始思考,可以通过删除第一部分(0|)(0|1)*0
来简化正则表达式(0|)
。这可以完成,因为(0|1)
匹配(0|)
将匹配的所有内容(以及更多内容)。
您也可以在图表中看到nfa。
S0->S1->S2->S5 === S7->S7->S8->S11
S0->S3->S4->S5 === epsilon
也许这有助于让你的想法朝着正确的方向发展..