繁体   English   中英

将正则表达式转换为DFA

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM