Regex 出于好奇,这里有多少人知道正则表达式是如何编译的?

Regex 出于好奇,这里有多少人知道正则表达式是如何编译的?,regex,language-theory,Regex,Language Theory,我在理论课上讲过这个,我很好奇这里有多少人知道正则表达式编译实际上是什么。我在网上看过了,在我看来,这是一个我认为更古老的话题 是的,在阅读这个问题之前,谁知道正则表达式编译是通过将正则表达式转换成ε不确定有限自动机来执行的?谁不知道那是什么 好的。我想我会是第一个承认这一点的人,虽然我在几年前参加了一门编译器课程,并且知道它的一般原理,但我认为我需要拿出“龙书”如果我真的被要求写做这类事情的代码,请再次阅读更多关于这个主题的内容。有一个非常简单而优雅的C小正则表达式编译器,是Rob Pike编

我在理论课上讲过这个,我很好奇这里有多少人知道正则表达式编译实际上是什么。我在网上看过了,在我看来,这是一个我认为更古老的话题


是的,在阅读这个问题之前,谁知道正则表达式编译是通过将正则表达式转换成ε不确定有限自动机来执行的?谁不知道那是什么

好的。我想我会是第一个承认这一点的人,虽然我在几年前参加了一门编译器课程,并且知道它的一般原理,但我认为我需要拿出“龙书”如果我真的被要求写做这类事情的代码,请再次阅读更多关于这个主题的内容。

有一个非常简单而优雅的C小正则表达式编译器,是Rob Pike编写的,Brian Kernighan在O'Reilly的第1章中描述的。这很容易学习。编译器课程也涵盖了这一点:标记类型可以用正则表达式定义。所以我想这方面的知识并不罕见。

我知道这与有限状态机有关,但除此之外没有什么。不是我想钻研的主题。。。我怀疑引擎盖下有点恶心。因此,似乎没有多少人知道如何使用正则表达式,也不知道它们是如何工作的。

可能更好,因为这是一个程序员投票,而不是一个有编程答案的问题。我想他们也不喜欢这个问题。“谁不知道呢?”是一个很难有意义地回答的问题……事实上,大多数实现实际上并不编译为有限自动机。今天使用的大多数正则表达式方言可以匹配不规则的语言(因此有限自动机无法匹配)。这是一个回溯解释器——它没有编译成自动机。