You are on page 1of 5

Oliver A. Vilca H.

Pg. 1

Expresiones regulares y autmatas nitos


Una expresin regular sirve como un descriptor de un lenguaje, tambin es una herramienta para describir patrones de texto, por ejemplo: 1. Se utiliza una notacin similar a una expresin regular para describir patrones de bsqueda. Por ejemplo en el procesamiento de documentos electrnicos, bioinformtica, base de datos y en comandos de bsqueda como el GREP de UNIX. 2. En los generadores de analizadores lxico como el Lex y el Flex. El anlisis lxico es una fase de un compilador que divide el cdigo de entrada en unidades lgicas denominadas tokens de uno o ms caracteres. Ejemplos de tokens son las palabras reservadas (ejemplo: if ), identicadores y signos como +,>. 3. En bsqueda de texto exible, se utiliza la expresin regular como un patrn de bsqueda, por ejemplo: a??bc[f-p] puede represetar a todas las cadenas (palabras) de texto que inician con la a seguida de cualquier dos carateres (smbolos), seguida de bc, y, nalmente un carater que puede ser desde la f hasta la k, es decir, uno del rango de carateres comprendido entre la f y k.

Bor ra
rs es una expresin regular, denota la concatenacin. r es una expresin regular, denota la estrella de kleene. (r ) es una expresin regular, denota el mismo lenguaje r .

Una ventaja adicional es que se puede convertir en una mquina (autmata nito), el cual puede automticamente decidir si una cadena (palabra) pertenece o no al lenguaje denotado por la expresin regular. Cadena Una cadena (o algunas veces palabra) es una secuencia nita de smbolos escogidos de un alfabeto. Por ejemplo: aba es una cadena del alfabeto = {a, b} La cadena vacia. Es la cadena de cero ocurrencias de smbolos, es denotado por . Longitud de una cadena. Es el nmero de smbolos (posiciones) de una cadena. Por ejemplo aba tiene longitud 3. La notacin para la longitud de una cadena w es |w|. Y || = 0 (la nica cadena cuya longitud es cero). La estrella de Kleene (o la clausura de Kleene). De un lenguaje L se denota por L . Es la unin innita i0 Li , donde L0 = {}, L1 = L y Li , para i > 1 es LLL L, la concatenacin de i copias de L. Expresin regular. Se puede describir una expresin regular recursivamente como sigue: Las constantes (cadena vacia) y (conjunto vacio) son expresiones regulares. Si a , es un smbolo, entonces a es una expresin regular. Induccin: Si r y s son expresiones regulares entonces: r |s es una expresin regular, denota la unin de los lenguajes que representan dichas expresiones regulares.

Nota: Debido a que en algunos casos el operador | (unin) no est muy accesible en el teclado del computador, en algunas aplicaciones como el JFLAP se utiliza el + y algunos autores lo utilizan Precedencia: Para evitar el uso exagerado de parntesis se puede emplear la precedencia de operadores. 1. Operador unario : Tiene la mayor precedencia y es asociativo por la izquierda, es decir, se aplica slo a la secuencia ms corta de smbolos a su izquierda que constituye una expresin regular. 2. La concatenacin, o punto: tiene la segunda mayor precedencia y es asociativo por la izquierda. Este operador se representa con un punto, pero por nes prcticos se obvia, en su lugar se ubican los smbolos

dor

Resumen de clases Oliver Amadeo Vilca Huayta

Oliver A. Vilca H.

Pg. 2

3. La unin |: tiene la menor precedencia y es asociativo por la izquierda. En ocasiones no se desea que una expresin regular sea agrupada segn la precedencia de los operadores. En dicho caso, se puede emplear parntesis para agrupar los operandos de la forma que se requiera. por conveniencia.

Ejemplos:

Complete los espacios en blanco.

Lenguaje regular {a, b} {, b} {a, ab} {abe, ace, _____}

{a, b, c, d} {, b, bb, bbb, bbbb, ...} {a, ab, abb, abbb, abbbb, ...}

Bor ra
{, c, ab, cc, ccc, cccc, ...} {a, ab, abb, abbb, abbbb, . . . ac, abc, abbc, abbbc, abbbbc, . . . } a |b a b (a|b) (ab) Todas las cadenas que se pueden formar con el alfabeto = {a, b}, incluido la cadena vacia

Lenguajes cuyas clausuras no son innitas: = {}. Asimismo, 0 = {}, mientras que i , para algun i 1 es vacio, debido a que no se puede seleccionar alguna cadena del conjunto vacio. Finalmente = {}. Ejemplo: Construya una expresin regular para: L = {w {a,b}* : w tiene una cantidad par de as } Si se tratara solamente de as la respuesta sera: (aa) el cual genera una cantidad par de as (cero es par). Pero es necesario considerar el alfabeto = {a, b} el cual permite la cadena como: babba, baabababb. La respueta es: (b ab ab ) que tambin puede escribirse: (b|ab a)

Ejemplo: Dado el lenguaje formado sobre el alfabeto = {a, b} donde se tiene la condicin de que cada b esta precedida por una a (pueden haber mas as que la preceden). Por ejemplo: , aaabaa, ababa, aaa. L = {w {a, b} : en w cada b est precedido por al menos una a} Respuesta: (a|ab)

Ejemplo: Dado el lenguaje formado con el alfabeto = {a, b} donde todas las cadenas no tienen la subcadena aa ni la subcadena bb. Es decir, el siguiente lenguaje: L = {w {a, b} : w no tiene la subcadenas aa ni bb } Solucin: Para obtener el resutado se ordena las cadenas (que se pueden generar) en tres las como sigue:

dor
Expresin regular a|b |b a|ab = a(|b) a(b|c|d)e (a|b)(a|b) (a|b)|(c|d) = a|b|c|d b ab c ab|c ab (|c) = ab |ab c

Oliver A. Vilca H.

Pg. 3

Para generar el primer conjunto de cadenas (primera y segunda la) se tiene: (ab) (a|). A este resultado se le debe incluir el segundo conjunto de cadenas, siendo el resultado: (ab) (a|)|(ba) (b|). Si se observa mas el ejercicio se obtiene: (b|)(ab) (a|)

Algebra de expresiones regulares


Complete los espacios en blanco.

Bor ra
Expresiones regulares en Unix/Linux
El smbolo . representa cualquier caracter.

Lenguaje regular La clausura de : Ley de idempotencia para la unin: r |r Elemento neutro de la unin: |r = |r Elemento neutro de la concatenacin: r = r Elemento nulo de la concatenacin: r = r Clausura de una expresin que ya est clausurada: (r )

Por conveniencia en el Unix/Linux se utiliza una notacin extendida de expresiones regulares para facilitar su uso, considerando las caractersticas y restricciones de la computadora (ejemplo cdigos). Se presenta una breve descripcin sin desviarse en detalles. Permite escribir clases de caracteres para representar grandes conjuntos cadenas lo mas compacto posible. Sus reglas son las siguientes:

La secuencia [c1 c2 cn ] representa la expresin regular: c1 |c2 | |cn Por ejemplo se puede utilizar para representar los cuatro caracteres utilizados en los operadores de comparacin del C/C++ [<>=!]. La secuencia [ c1 c2 cn ] representa cualquier caracter que no sea: c1 |c2 | |cn Rango [x y ] que signica todos los caracteres de x hasta y en la secuencia ASCCI. Por ejemplo las letras maysculas se pueden representar como [A Z ] y el conjunto de todas las letras y dgitos como [A Za z 0 9]. Los corchetes y otros caracteres reservados del UNIX pueden representarse precedindolos con \.

Ejemplos del comando GREP del Unix: $ # Buscar lneas con al menos una letra de la a a la z (minsculas o maysculas). $ grep [a-zA-Z] sistemas.txt $ # Lista lneas con cualquier carcter que no sean ni letra ni nmero. $ grep [a-zA-Z0-9] archivo.txt

Expresiones regulares para el programador

A continuacin algunas de las herramientas de programacin disponibles que ofrecen motores de bsqueda con soporte para expresiones regulares:

dor
Resultado

a, ab, aba, abab, ababa, ababab, . . . b, ba, bab, baba, babab, bababa, . . .

Oliver A. Vilca H.

Pg. 4

JavaScript: a partir de la versin 1.2 (ie4+, ns4+) JavaScript tiene soporte integrado para expresiones regulares. PCRE: biblioteca de ExReg para C, C++ y otros lenguajes que puedan utilizar bibliotecas dll (Visual Basic 6 por ejemplo). .Net Framework: provee un conjunto de clases mediante las cuales es posible utilizar expresiones regulares para hacer bsquedas, reemplazar cadenas y validar patrones.

Ejercicios propuestos
(a) (b) (c) (d) a* a*b* a*b* b*a* = a* | b* abab (a(cd)*b)* abcd (a*(cd)*b*)*

1. Verdadero o Falso. Explique su respuesta:

Bor ra
(a) (b) (c) (d) b*a* | a*b* = (a|b)* abcd (a(cd)*b)* (a|b) = (a b ) (ab|a)*ab = (aa*b)* 3. Escriba una expresin regular para los siguientes lenguajes: 4. Escriba una expresin regular para el siguiente lenguaje:

2. Verdadero o Falso. Explique su respuesta:

(a) {w {0,1}* : w tiene una cantidad de 1s divisible por cinco } (b) {w {a,b}* : w no tiene tres bs consecutivas } Es decir, cadenas que tienen a lo mas dos bs consecutivas. (c) {w {a,b}* : w tiene exactamente una ocurrencia de bbb } (d) {w {a,b}* : w no tiene la subcadena aba }

L = {a

m bn

: m + n es par }

5. Desmuestre o refute lo siguiente: (ab|a) = (aa b)

6. Demuestre refute que: a b(ba b|a) = a b(a ba ba )

7. Escriba una expresin regular para la diferencia de los siguientes lenguajes: a b b

8. Derivadas de expresiones regulares, fue introducido por Brzozowski1 . Sea E una expresin regular sobre un alfabeto y sean a y b dos smbolos distintos de . La derivada de E con respecto a a (de longitud unitaria), se dene recursivamente como sigue: [8p] (a) a () = () = (b) a a a (F ) a (F G) a = (1) (2) (3) (4)

Janusz A. Brzozowski (1964) Derivatives of regular expressions.

dor
[6p] [5p] [5p] [5p] = = (F )F a a (F )G | = a (F )G
a (G)

Java: existen varias bibliotecas hechas para java que permiten el uso de RegEx, y Sun planea dar soporte a estas desde el SDK.

Si F, En otro caso.

Oliver A. Vilca H.

Pg. 5

Derive: (a|b) a(a|b)2 respecto a a y b.

Bor ra

dor

Dena la derivada de una expresin regular E respecto a una cadena w de .