繁体   English   中英

生成具有死态或多余状态的DFA的正则表达式

[英]Regular expression that generates a DFA with dead or superfluous states

我正在寻找在我的词法分析器中实现DFA最小化器的方法,但似乎无法生成看起来好像已经是表达式的最小DFA的DFA。

我正在从NFA构造DFA,而NFA是使用后缀正则表达式的thomson构造构建的。 这几乎与龙书中所描述的完全一样。 为了制作词法分析器,使用从开始状态开始的epsilon转换将几个NFA组合在一起。 DFA算法就是在此组合NFA上应用的。

那么,是否有任何“已知”正则表达式会生成DFA,从而为消除死角和最小化状态提供一个很好的测试平台?

当然,我可以破解一个奇怪的DFA并在上面应用算法,但这不是一个合适的测试用例吗? 如果这样的话,我构建DFA的方法就不容易出现死态,那么该信息将同样有价值,因为从那时起,我可以完全跳过实施状态消除功能。

编辑:如果您需要实现细节才能准确回答,则代码可在github上找到 ,尤其是NFA.csDFA.cs类。 此外,如果有帮助,我还会在博客文章中撰写有关正在使用的构造算法的系列文章

好的,所以我以完全绕行的方式发现了这一点。 因为从解析器中获得了不错的调试输出,所以我制作了可视化正则表达式的工具。 这恰如其分地说明了这样一种表达方式,即使用标准的汤普森构造技术将为您提供一个非常愚蠢的自动机: (a+b+c+)+|abc

工具中显示的地址: http ://regexvisualizer.apphb.com/?Regex=%28a%2Bb%2Bc%2B%29%2B%7Cabc&NfaSize=300&DfaSize= 250#

该工具目前没有任何优化即可直接进行汤普森构造。 如果除去完全多余的表达式的|abc部分,则该表达式应保持不变。 没有。

暂无
暂无

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

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