如何确定正则表达式实现是否使用DFA或NFA?

时间:2011-11-25 10:54:22

标签: regex algorithm squeak dfa nfa

我面临的问题是,某个regex implementation是基于DFA还是NFA。

我有什么出发点来解决这个问题。人们也可以问:我在找什么?什么是基本模式和/或特征?一个好的和解释性的链接或一些比较(即使不直接致力于正则表达式)也是完美的。

2 个答案:

答案 0 :(得分:3)

如果它是一个黑盒子,那么给它一些输入并用病理案例测量它的时间特征,参考图形in this discussion of NFS vs backtracking regex implementations。 (注意NFS图是微秒而不是秒)。

另外,如果它是一个纯粹的NFA,那么它就不会有一些非常规的特征,这些特征是一些需要回溯的“正则表达式”解析器。

或者,查看RxParser类的文档;文档似乎在Web上不可用,需要吱吱声运行时才能浏览。

答案 1 :(得分:2)

我认为你的意思是“正则表达式实现”而不是算法(通常意义上的)。

您可以使用已知会导致一种方法或另一种方法出现问题的已知表达式进行测试。同时寻找更容易在一个或另一个中实现的功能(这不是一个可靠的方法 - 正则表达式引擎的开发人员找到了实现以前困难的新方法。)

通常答案是阅读文档,或查看已知的参考文献("Mastering Regular Expressions"文档许多常见案例)。最后为什么不问作者呢?