繁体   English   中英

我对么? (有限自动机)

[英]Am I correct? (Finite Automata)

我被赋予了正则表达式,我想将其转换为NFA然后转换为DFA。 这是正则表达式:

a(b | c)* a | aac * b

然后我使用Thomson的算法将其转换为NFA: NFA

这是DFA: DFA

有人可以快速看看,如果我错了或者对,请告诉我?

由于这很可能是家庭作业,我很犹豫,只是给你完整正确的解决方案。

您的NFA看起来是正确的,但有许多多余的状态,这些状态不是必需的,但不会对其正确性产生负面影响。 (乍一看,你可以删除11个州。)

但是,您的DFA不正确。 这是因为当您分支开始处理字符串或其他条件的一个条件时,您稍后将它们一起重新加入。 这允许它从与a(b|c)*a匹配的接受字符串中获取路径,并通过前往节点15,1711来获取另一个bc 然后它接受此字符串,即使它与您的表达式不匹配。

你需要做的是基本上阻止这种情况发生。 如果您有其他问题,请随时提出。

我强烈建议您制作一个您应该知道并且不应该被接受的测试字符串列表,然后跟踪它们,确保您的自动机以正确(接受或拒绝)状态结束。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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