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?
19
Respuestas:
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 regularunnorte⋅ b ⋅ anorte⋅ b ⋅ anorte
(a*)b\1b\1
coincide 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.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.
fuente
El problema al responder esta pregunta es capturar la noción de "ilimitado" en una implementación real. Por ejemplo, la expresión regularL = { w w | w ∈ Σ∗} w K LK= { w w | w ∈ Σ∗, ∣ w ∣ ≤ K} , que para cualquier fija es una expresión regular nuevamente.K
/(.*)\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 }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).
fuente
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:
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.
fuente
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.
fuente