[英]Converting a regular expression to a DFA
我一直在尝试转换正则表达式
首先使用汤普森(Thompson)的构造将其转换为不确定的有限自动机(NFA),得到:
,看起来正确。
然后,我使用子集构造从NFA创建DFA,如下所示。
但这对我来说似乎不正确,例如,按照我构建的DFA,例如0后跟0无效。 我想知道如何在原始正则表达式中建模epsilon,因为我只是将其视为普通epsilon。
已经有一个匹配项-因此,图中dfa的状态B必须已经是一个接受状态(只是将其标记为接受不会解决该问题!)。 我无法重构您的想法,但您应该以类似
A --0--> (B)
A --1--> C
B --0--> (B)
B --1--> C
C --0--> (B)
C --1--> C
如果您从另一侧开始思考,则可以通过删除第一部分(0|)
来简化正则表达式(0|)(0|1)*0
。 之所以可以这样做是因为(0|1)
匹配(0|)
将匹配(以及更多)的所有内容。 您也可以在nfa图中看到它。
S0->S1->S2->S5 === S7->S7->S8->S11
S0->S3->S4->S5 === epsilon
也许这可以帮助您向正确的方向发展。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.