2009-07-05 8 views
57

Estoy interesado en crear un motor de expresiones regulares, como un proyecto paralelo, solo para fines de aprendizaje.Construyendo un motor de expresiones regulares - recursos en línea?

sé la teoría detrás de evaluación de expresiones regulares, y tener un conocimiento suficiente de máquinas de estados finitos, etc.

Lo que me interesa es cómo un motor de expresiones regulares se implementa en software. Así que me preguntaba si había algún tipo de tutorial o recurso en línea que explicara la implementación de un motor de expresiones regulares, la traducción de la expresión regular a un FSM y demás. No quiero ningún sitio que simplemente explique la teoría detrás de esto.

Gracias.

Respuesta

40

Russ Cox tiene una buena colección de artículos sobre Implementing Regular Expressions, especialmente su artículo Regular Expression Matching Can Be Simple And Fast vale la pena leer.

+1

El sitio parece estar fuera de servicio desde hace unos días. [Aquí] (http://webcache.googleusercontent.com/search?q=cache:XQrcPV-4kngJ:swtch.com/~rsc/regexp/regexp1.html+) un enlace al artículo guardado en caché por Google. –

+0

Las páginas de expresiones regulares de Russ Cox son geniales. Yo también los encontré cuando buscaba recursos, por la misma razón que el OP. Estoy usando estas páginas como una guía suelta para construir una biblioteca de expresiones regulares para C y usar [este blog] (http://regexvm.blogspot.ie) para documentar a lo largo del camino. No soy una autoridad en el tema, pero otros pueden beneficiarse al observar mis luchas. –

12

En primer capítulo del Código Hermosa (Amazon, online draft) Brian Kernighan habla de elegante muy pequeña de coincidencias de Rob Pike, expresiones regulares. Es realmente simple, pero Kernighan le da siete ejercicios para extenderlo, lo cual podría ser una buena introducción para usted.

14

Creo que el artículo How Regexes Work de Mark-Jason Dominus es excelente. Está dirigido a personas que no son programadores, pero está escrito de una manera muy algorítmica y, por lo tanto, se puede utilizar para implementar dicho motor, especialmente si tiene alguna experiencia con la compilación. Lo he hecho yo mismo.

El artículo también menciona consejos y trucos más avanzados, y tiene cierta información sobre las limitaciones del motor.

4

Llego tarde a la fiesta, pero encontré this WSU course assignment el más útil para presentar una implementación de motor regex a un alto nivel. No sé C, así que fue bueno que el material se presentara en un formato independiente del idioma. Es importante destacar, que hace un gran trabajo explicando:

  • por qué utilizar postfix notación
  • Lo que la pila de fragmentos NFA es
  • El algoritmo de sufijo-a-NFA en pseudocódigo
  • La estructura de datos NFA

Además, encontré Pace professor's article útil en la implementación del método re2post mencionado por WSU y Cox.

Recomendaría leer el artículo de WSU primero y luego el artículo de Russ Cox para más profundidad.

1

El quinto capítulo de Algorithms por Robert Sedgewick es una muy buena introducción al tema. Explica qué es una NFA y cómo se puede construir una NFA a partir de una expresión regular. Los ejemplos tienen visuales y son muy claros. Incluso tiene un código para un reproductor de expresiones regulares simple. Y hay algunos ejercicios para implementar más características de expresiones regulares.

0

Para lectores alemanes, el capítulo tres "Pattern-Matching-Algorithmen für einfache Strings" de "Algorithmen auf Sequenzen" podría ser interesante. El autor es el Prof. Dr. Sven Rahmann, Lehrstuhl XI, Fakultät für Informatik, TU Dortmund. Todos los algoritmos tienen ejemplos de Python.

Cuestiones relacionadas