¿Dónde caen la mayoría de las implementaciones de REGEX en la escala de complejidad?


19

La mayoría de las implementaciones modernas de expresiones regulares, como las de perl o .NET, van más allá de la definición informática clásica de REGEXes con características como mirar hacia adelante y mirar hacia atrás. ¿Estas características les permiten analizar declaraciones que no se pueden describir con un autómata finito y sin pushdown? ¿Cuánto más cerca de estar completos los hace esto si pueden?


2
Una pregunta estrechamente relacionada: ¿Tenemos algo interesante entre "expresiones regulares con referencias inversas" y "expresiones regulares que pueden contener código de programa arbitrario"? Por ejemplo, ¿son las expresiones regulares con referencias hacia atrás y mirar hacia atrás / mirar atrás estrictamente más expresivas que las expresiones regulares con referencias hacia atrás pero sin mirar hacia atrás / mirar hacia atrás? ¿Qué pasa con los "verbos especiales de control de retroceso" en Perl?
Jukka Suomela

Relacionado (y posiblemente incorrecto): stackoverflow.com/questions/2974210/…
Aryabhata

Respuestas:


18

No creo que el verdadero problema sea la cuestión de lo que significa ilimitado; Esto no es peor que cualquier otra situación en el análisis.

El problema radica en caracterizar las referencias inversas, que son muy potentes y muy limitadas: permiten la descripción de algunos lenguajes sin contexto, sin permitir algunos lenguajes sin contexto. Por ejemplo, la expresión regular (a*)b\1b\1coincide con cadenas de la forma , y puede usar el lema de bombeo para mostrar que este no es un lenguaje sin contexto. Sin embargo, por otro lado, las expresiones regulares con referencias inversas no parecen ser suficientes para coincidir con el lenguaje de paréntesis equilibrado, que es el lenguaje prototípico libre de contexto.unnortesiunnortesiunnorte

Es bastante fácil dar una semántica denotacional que diga qué cadenas están en un lenguaje para expresiones regulares, pero dar una buena caracterización teórica de autómatas parece mucho más desafiante. Es algo así como una máquina de registro, en cuyos registros puede copiar subcadenas de su entrada, y que puede usar para probar su cadena actual, pero para la que carece de la capacidad de modificar estos registros.

Las personas que hacen teoría de modelos finitos tienen un montón de modelos de máquinas funky, y sería interesante saber si esto corresponde a alguno de sus modelos.


9

El problema al responder esta pregunta es capturar la noción de "ilimitado" en una implementación real. Por ejemplo, la expresión regular /(.*)\1/capturará el lenguaje , que no está libre de contexto. En la práctica, puede haber límites en la pila utilizada (es decir, tal vez w no puede ser más larga que un gran número K ), lo que efectivamente convertiría el lenguaje en L K = { w w | w Σ , w K }L={wwEl |wΣ}wKLK={wwEl |wΣ,w∣≤K}, que para cualquier fija es una expresión regular nuevamente.K

Pero, en principio, las expresiones regulares como se especifica son más poderosas que los lenguajes normales, ya que esta pregunta relacionada se discute con mucho más detalle (con un ejemplo ingenioso también).


¿No sería {ww | w ∈ Σ ∗, ∣w∣≤K} un CSL o TM reconocible?
dhruvbird

arggh. debería haber hecho ww ^ R. Arreglará. gracias
Suresh Venkat

En realidad, tenía una pregunta sobre esto. ¿Es ww un CSL o es reconocible? No estaba (aún) capaz de llegar a un LBA para ello, por lo que sólo me preguntaba ...
dhruvbird

1
{ww:wΣ}

5

Un resultado interesante, tomado de esta otra pregunta , también vinculada por Suresh Venkat, es que las expresiones regulares "prácticas" son NP completas, y por lo tanto deberían ser equivalentes en potencia al SAT.

Al no ser un experto, aunque estoy de acuerdo en que intuitivamente "las expresiones regulares con referencias inversas no parecen ser suficientes para que coincida con el lenguaje de paréntesis equilibrado", está sucediendo algo extraño. La completitud de NP implica que cualquier problema de NP puede reducirse polinómicamente a una expresión regular, por lo que probablemente solo haya una reducción polinómica del lenguaje de "paréntesis equilibrados" a uno reconocible con expresiones regulares. Pero, de nuevo, puede haber una expresión absurda para analizar una CFL, ¡ya que incluso pueden analizar números unarios no primos!

Probablemente, la lección es que las clases de complejidad y las clases de idiomas no son comparables, en general. Lo que también sugiere reformular su pregunta, para hacer referencia a la jerarquía de Chomsky en lugar de la "escala de complejidad" (incluso si, para ser justos, eso no me confundió).

Charles Stewart escribe:

Aho, 1990, "Algoritmos para encontrar patrones en cadenas" muestra que el problema de membresía para los idiomas regulares con retroceso es NP completo.

Una vista previa parcial (al menos de la declaración) se puede encontrar en Google Books , en la página 289, y una referencia bibliográfica al documento se puede encontrar aquí . Tenga en cuenta que en el documento, rewbr significa Expresión regular con referencias de fondo.


3

PCRE, la implementación más popular de "expresiones regulares" también implementa patrones recursivos, que van más allá de las referencias. Se acaba de hacer una pregunta sobre su complejidad en Stackoverflow. De acuerdo con la respuesta práctica en profundidad de Perl guru brian d foy, esto hace que PCRE sea tan poderoso como las gramáticas libres de contexto. Sin embargo, la sintaxis es horrible en comparación con la forma Backus-Naur.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.