build立一个正则expression式引擎 – 在线资源?
我有兴趣构build一个正则expression式引擎,作为一个侧面项目,只是为了学习的目的。
我了解正则expression式评估的理论,对有限状态机等有足够的了解。
我感兴趣的是如何在软件中实现正则expression式引擎。 所以我想知道是否有任何types的教程或在线资源解释正则expression式引擎的实现,从正则expression式到FSM的翻译等等。 我不想要任何只是解释它背后的理论的网站。
谢谢。
Russ Cox收集了很多关于实现正则expression式的文章,特别是他的文章Regular Expression Matching可以简单而快速的阅读。
我认为Mark-Jason Dominus的正则expression式工作原理非常出色。 它针对的是非程序员,但是它是以非常algorithm的方式编写的,因此可以用来实现这样的引擎,特别是如果您有任何编译经验的话。 我自己也是这么做的
文章还提到了更高级的技巧和窍门,并且提供了关于引擎限制的一些信息。
在“ 美码”第一章( 亚马逊 , 在线稿 )中,Brian Kernighan谈到Rob Pike优雅的,非常小的正则expression式匹配器。 这很简单,但Kernighan提供了七个练习来扩展它,这可能是一个很好的介绍给你。
我有2个有趣的正则expression式机制的链接,
- 正则expression式匹配可以很简单
- Moserware:.NET正则expression式如何真正的工作
如果您对C感到满意,您可能会从查看Perl兼容正则expression式的源代码中受益。
我迟到了,但是我发现这个WSU课程作业在提供一个高级的正则expression式引擎实现上是最有用的。 我不知道C,所以材料以与语言无关的格式呈现是很好的。 重要的是,它做了一个伟大的工作解释:
- 为什么要使用后缀表示法
- NFA碎片的堆栈是什么
- 伪代码中的后缀到NFAalgorithm
- NFA数据结构
另外,我发现佩斯教授的文章有助于实现WSU和Cox提到的re2post
方法。
我build议先阅读WSU文章,然后再阅读Russ Cox的文章,以获得更深入的了解。
罗伯特·Sedgewick algorithm的第五章是一个非常好的介绍。 它解释了什么是NFA,以及如何从正则expression式构buildNFA。 这些例子有视觉效果,非常清晰。 它甚至有一个简单的正则expression式匹配的代码。 还有一些练习来实现更多的正则expression式function。
另一个简单明了的实现(C,less于500行) RecursiveRegexpRaptor
对于德语读者来说,“ Algorithmen auf Sequenzen ”的第三章“模式匹配algorithm”可能是有趣的。 作者是多特蒙德大学信息技术学院Lehrstuhl XI教授Sven Rahmann教授。 所有algorithm都有Python示例。