汤普森算法中的否定?

时间:2016-07-23 16:34:29

标签: regex algorithm state-machine nfa

我正在读这篇文章,学习如何为正则表达式编写状态机

https://en.wikipedia.org/wiki/Thompson%27s_construction

但是我只看到像联合,连接,克莱恩之星这样的东西,但没有任何关于否定的内容,这里提到

https://en.wikipedia.org/wiki/Nondeterministic_finite_automaton#Closure_properties

这种结构会是什么?

2 个答案:

答案 0 :(得分:3)

汤普森自动机非常不适合否定:它不是确定性的,实际上使用了大量的自发过渡(这也是非确定性的来源)。相反,Brzozowski automaton非常适合于否定,交集,更常见的是所有布尔函数。

你可以玩Vcsn来试验类似的结构。它实际上甚至支持加权表达式和更多运算符。 This page包含几个示例,说明如何将扩展正则表达式转换为自动机。

Redgrep实现了Brzozowski方法。在this very nice video中,设计师解释了这是如何工作的。

答案 1 :(得分:0)

我认为求反可以交替构造,例如^ 0和1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9相同。取反只能用在一个字母上,并且字母是有限的。因此,否定也可以看作是一个补充符号(在我看来)。