C++ 用于检查两个正则表达式是否相等/同构的库

C++ 用于检查两个正则表达式是否相等/同构的库,c++,python,c,regex,nfa,C++,Python,C,Regex,Nfa,我需要一个库,它将接收两个正则表达式,并确定它们是否同构(即,是否匹配完全相同的字符串集) 例如,a | b同构于[ab] 据我所知,正则表达式可以转换为NFA,而NFA在某些情况下可以有效地转换为DFA。然后可以将DFA转换为最小DFA,如果我理解正确,它是唯一的,因此可以比较这些最小DFA是否相等。我意识到并不是所有的正则表达式NFA都能有效地转换成DFA(特别是当它们是从不是真正“正则”的Perl regexp生成时),在这种情况下,理想情况下,库只会返回一个错误或一些其他表示转换不可能的

我需要一个库,它将接收两个正则表达式,并确定它们是否同构(即,是否匹配完全相同的字符串集) 例如,a | b同构于[ab]

据我所知,正则表达式可以转换为NFA,而NFA在某些情况下可以有效地转换为DFA。然后可以将DFA转换为最小DFA,如果我理解正确,它是唯一的,因此可以比较这些最小DFA是否相等。我意识到并不是所有的正则表达式NFA都能有效地转换成DFA(特别是当它们是从不是真正“正则”的Perl regexp生成时),在这种情况下,理想情况下,库只会返回一个错误或一些其他表示转换不可能的指示


我在网上看到了大量关于这方面的文章和学术论文(甚至有些课程的编程作业要求学生这样做),但我似乎找不到实现这一功能的库。我更喜欢Python和/或C/C++库,但任何语言的库都可以。有人知道这样一个图书馆吗?如果没有,是否有人知道有一个图书馆离我很近,我可以用它作为起点

还没有尝试过,但是对于Perl来说似乎很有希望:如果第一种语言是第二种语言的子集,那么两个正则表达式是等价的,反之亦然

for Java也支持这一点。您可以使用它将正则表达式转换为DFA,检查它们是否等效。

否。这是一个研究项目的一部分。但这并不是这个项目的核心,所以如果不必要的话,我宁愿不花时间自己动手。我只是在开玩笑。这是一个很好的问题。所以+1。实际上,最小DFA不应该直接比较等式,但是可以比较它们的图同构来确定等价性。我检查了这个,它看起来正是我想要的。我无法通过粗略地查看代码来判断它是如何工作的,但它在我测试它的所有简单案例中都起作用。谢谢你的指点!