0% encontró este documento útil (0 votos)
72 vistas7 páginas

Expresiones Regulares

Expresiones Regulares

Cargado por

Raul Casillas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
72 vistas7 páginas

Expresiones Regulares

Expresiones Regulares

Cargado por

Raul Casillas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
Lenguajes y expresiones regulares ‘Comenzamos este capitulo presentando la notacién conocida como “expresiones regulares”. Estas expresiones es otto tipo de notacién para la definicién de lenguajes, la cual hemos visto brevemente en la Secci6n 1.1.2. También puede pensarse en las expresiones regulares como en un “lenguaje de programacién", en el que cs posible escribir algunas aplicaciones importantes, como por ejemplo aplicaciones de bisqueda de texto © componentes de compilador. Las expresiones regulates estén estrechamente relacionadas con los autGmatas finitos no deterministas y pueden considerarse una alternativa, que el usuario puede comprender ffcilmente, a la notacién de los AFN para describir componentes de software. Eneste capitulo, después de definirlas expresiones regulates, demostraremos que éstas pueden definir todos los lenguajes regulares y sélo estos. Veremos la forma en que se utiizan las expresiones regulares en diversos sistemas software. A continuacién, examinaremos as leyes algebraicas que se aplican alas expresiones regulares. Son muy similares a las leyes algebraicas que se aplican en aritmética, aunque también existen importantes diferencias entee el Algebra de las expresiones regulares y de las expresiones aritméticas. 3.1 Expresiones regulares Ahora vamos a desviar nuestra atenci6n de las descripciones tipo maquina de los lenguajes, autématas fnitos deterministas y no deterministas, a un tipo de expresin algebraica: la YexpresiGn regulas”. Comprobaremios que Por tanto, las expresiones regulares sirven como lenguaje de entrada de muchos sistemas que procesan cadenas. Algunos ejemplos son Jos siguientes: 1. Comandos de busqueda tales como el comando grep de UNIX 0 comandos equivalentes para localizar cadenas en los exploradores web o en los sistemas de formateo de texto. Estos sistemas emplean una notacién de tipo expresién regular para describ los patrones que el usuario desea localizar en un archivo. Los distintos sistemas de bisqueda convierten la expresién regular bien en un AFD oen un AFN y simulan dicho autémata sobre el archivo en que se va a realizar la busqueda, 72. Introduccién ala teorla de autématas, lenguajes y computacén 2. Generadores de analizadores Iéxicos, como Lex 0 Flex. Recuerde que un analizador Iéxico es el com- ponente de un compilador que divide el programa fuente en unidades Igicas o sintéctiens formadas por ‘uno o mas earacteres que tienen un significado, Entre las unidades Iogicas o sintécticas se incluyen las palabras clave (por ejemplo, wisi Le), identficadores (por ejemplo, cualquier letra seguida de cero 0 mis Tetras y/o digitos) y signos como ~ 0 <=. Un generador de analizadores léxicos acepta descripeiones de las formas de las unidades ldgicas, que son principalmente expresiones regulares, y produce un AFD que reconoce qué unidad Igica aparece a continuacién en la entrada, 3.1.1 Operadores de las expresiones regulares Las expresiones regulares denotan Ienguajes. Por ejemplo, Ia expresiGn regular 01° + 10° define el Ienguaje gue consta de todas las cadenas que comienzan con un 0 seguido de cualquier niimero de 1s o que comienzan por tun 1 seguido de cualquier niimero de Os, No esperamios que el lector sepa ya céimo interpretar las expresiones regulares, porlo que por el momento endré que aceptar como un acto de fe nuestra afirmacién acerca del lenguaje de esta expresién. Enseguida definiremos todos los simbolos empleados en esta expresién, de modo que pueda ver por qué nuestra interpretacién de esta expresién regular es la correcta, Antes de describir la notacién de las expresiones regulares, tenemos que estudiar las tres operaciones sobre los lenguajes que representan los ‘operadores de las expresiones regulares. Estas operaciones son: 1. Launién de dos lenguajes L y M, designada como LU M, es el conjunto de cadenas que pertenecen a L, aM 0 aambos. Por ejemplo, si L = (001, 10,111} y M = {£,001}, entonces LUM = {€, 10,001, 111. 2. Laconcatenacidnde los lenguajes Ly M es el conjuntode cadenas que se puede formar tomando cualquier cadena de Ly concatendndola con cualquier cadena de M. Recuerde la Seccién 1.5.2, donde detfinimos Ja concatenacién de una pareja de cadenas; el resultado de Ia concatenacién es una cadena seguida de Ja otra, Para designar la concatenacin de lenguajes se emplea el punto o ningin operador en absoluto, aunque el operador de concatenacién frecuentemente se llama “punto”. Por ejemplo, siL ~ {001, 10,111} y M = {e,001}, entonces LM, o simplemente LM, es {001, 10,111, 001001, 10001, 111001}. Las tres primeras cadenas de LM son las cadenas de L concatenadas con €. Puesto que & es el elemento identidad para la concatenacién, las cadenas esultantes son la misma cadenas de L. Sin embargo las tres iltimas cadenas de LM se forman tomando cada una de las cadenas de Ly concatendndolascon la segunda cadena de M, que es 001. Por ejemplo, la concatenacién de In cadena 10 de L con Ia cadena 001 de M nos proporciona Ia cadena 10001 para Li. 3. La clausura (0 asterisco, o clausura de Kleene)' de un lenguaje L se designa mediante L* y representa cl conjunto de cadenas que se pueden formar tomando cualquier mimero de cadenas de L, posiblemente con repeticiones (es decir, la misma cadena se puede seleccionar més de una vez) y concantenando todas cllas. Por ejemplo, si L = {0,1}, entonces L* es igual a todas las cadenas de Os y 1s. Si L = {0,11}. entonces L* constard de aquellas cadenas de Os y 1s tales que los 1s aparezcan por parejas, como por ejemplo 011, 11110 €, pero no O1011 ni 101, Mas formalmente, L* es la unin infinita Uso L', donde B= (eh, L) = Ly Li parai> Les LLL (la coneatenaci6n de /copias de L). EJEMPLO 3. Dado que la idea de clausura de un lenguaje es algo engafiosa, vamos a estudiar algunos ejemplos. Primero, sea L = (0,11). 2 = {e}, independientemente de qué lenguaje sea L; la potencia 0 representa la seleccin de Fl domino aura de Kleene” have referenda aS. C. Kleen, qui de la nots de las expesones regulars y est opetado. Capitulo 8 Lenguales y expresiones regulares 73. Uso del operador * ‘Veamos en primer lugar el operador + presentado en Ia Secci6n 1.5.2, donde lo aplicamos a un alfabeto, por ejemplo, 3*. Dicho operador sirve para formar todas las cadenas cuyos simbolos han sido seleccionados de un alfabeto 3. El operador de clausura es précticamente igual, aunque existen algunas diferencias sutiles de tipo. ‘Supongamos que L es el lenguaje que contiene cadenas de longitud 1 y que para cada simbolo a perteneciente a & existe una cadena a en L, Luego aunque L y & “parezcan'” lo mismo, son de tipos Giferentes; L es un conjunto de cadenas y Zs un conjunto de simbolos, Por otro lado, L* designa cl mismo Tenguaje que 3° cero cadenas de L. L! = L, representa la eleccidn de una cadena de L. Por tanto, los dos primeros términos de Ia expansi6n de L* nos da {¢,0,11} ‘A continuacién considere L?, Seleccionamos dos cadenas de L, permitiendo repeticiones, de modo que tenemos cuatro posibilidades. Estas cuatro selecciones nos dan L? = {00,011,110,1111}.De forma similar, L* es el conjunto de cadenas que se pueden formar eligiendo tres posibilidades de las dos cadenas de L, lo que nos proporciona, {000,0011,0110, 1100, 01111, 1101111110, 111111} Pra calcular £*, tenemos que calcular L’ para cada iy hallar Ia unién de todos estos lenguajes. L' tiene 2! miembros. Aunque cada L’¢s finito, la unién de un nimero infinite de érminos L' generalmente es un lenguaje infnito, como en el caso de nuestro ejemplo, Sea ahora Lel conjunto de todas las cadenas de 0s. Observe que Les infnito, a diferencia de en el ejemplo anterioren el que era un lenguaje fnito. Sin embargo, noes dificil descubrir que es L*. L° = {€}, como siempre. L! = LL? es el conjunto de cadenas que se pueden formar tomando una cadena de Os y concatenarla con otra cadena de Os, El resultado sigue siendo una cadena de 0s. De hecho, toda cadena de Os se puede escribir como la concatenacién de dos cadenas de 0s (no olvide que € es una “cadena de 0”; esta cadena siempre puede ser una de las dos cadenas que concatenemos). Por tanto, ? = L, Del mismo modo, L? = L, ete. Luego la unién infinita Lr = 19 UL U7 U-~ es Len el caso particular de que el lenguaje L sca cl conjunto de todas las cadenas de Os Veamos un tltimo ejemplo, 0° = {e}. Observe que 0° = (e}, mientras que 0, pars todo i > I, es el Conjunto vacio, ya que no podemos seleccionar ninguna cadena en el conjunto vacio, De hecho, es uno de los {dos lenguajes cuya clausura no es infnita a 3.1.2 Construccién de expresiones regulares Todos los tipos de flgebras se inician con las expresiones elementales, que normalmente son constantes y/o variables, Las Algebras nos permiten construir mis expresiones aplicando un cierto conjunto de operadores & las expresiones elementales y a las expresiones previamente construidas. Normalmente, también se necesitan algunos métodos que permitan agrupar operadores con sus operands, tales como los paréntesis. Por ejemplo, la iamiliar élgebra dela aritmética se inicia con constantes, como los niimeros enteros y reales, mas las variables y se construyen expresiones mas complejas utlizando operadores aritméticos como + y x. EI Algebra de las expresiones regulares sigue también este patron, utilizando constantes y variables que representan lenguajes y operadores para las tres operaciones mencionadas en la Seccién 3.1.1 (la uniéa, el punto y el asterisco). Podemos deseribir las expresiones regulares recursivamente del siguiente modo. En esta ‘74 Inrodueién ala tora de autématas,lenguales y computacién definicién, no s6lo describimos lo que so BASE, FI easo basco consta de tres partes: | PASO INDUCTIVO, Existen cuatro partes en el paso de inducci6n, una para cada uno de los tres operadores y otra para la introduccién de paréntess. | Observe que el punto puede utilizarse opcionalmente para explicitar el operador de concatenacién, bien ‘como una operacién sobre lenguajes o como el operador en una expresi6n regular. Por ejemplo, 0.1 es tuna expresién regular que significa lo mismo que 01 y que representa el lenguaje {01}. Sin embargo, nosotros vamos a evitar el uso del punto en la concatenaci6n de expresiones regulares? | 4, Si E es una expresién regular, entonces (E, una E encerrada entre paréntesis, es también una expresién regula, que representa el mismo lengua que E. Formalmente; L((E)) = L(E) EJEMPLO 3.2 Escribamos una expresidn regular para el conjunto de cadenas que constan de Os y 1s alternos. Primero, desa- rrollamos una expresién regular para cl lenguaje formade por una sola cadena Oi. Podemos luego emplear el ‘operadorasterisco para obtener una expresién para todas las cadenas de la forma 0101 ---OL Laregla basica de las expresiones regulares nos dice que 0 y 1 son expresiones que tepresentan los lenguajes {0) y {1}, respectivamente. Si concatenamos las dos expresiones, obtenemos una expresién regular para el lenguaje {01}; esta expresion es O1. Como regla general, si queremos una expresi6n regular para el lenguaje ormado por una sola cadena w, utilizaremos la propia cadena w como expresisn regular. Observe que en la expresin regular, los simbolos de w normalmente se escribirdn en negrita, pero este cambio de tipo de fuente cs s6lo una ayuda para diferenciar las expresiones de las cadenas y no debe considerarse signiticativo, Ahora obtenemos todas las cadenas formadas por cero o més ocurrencias de 01, ulilizando la expre- sin regular (01)*. Observe que primero hemos colocado los paréntesis alrededor de 01, con el fin de evitar Tbe hecho, a expesonesvqulaves de UNIX wi caviter ASC Zan el punto para un propito completamente diferente: para representa cualquier Capitulo 8 Lenguales y expresiones regulares 75. Expresiones y sus lenguajes Estrictamente hablando, una expresién regular £ es s6lo una expresién, no un lenguaje, Deberfamos emplear L(E) cuando deseemos hacer referencia al lenguaje que E representa. Sin embargo, es habitual cemplear "E” cuando realmente lo que se quiere decir es “L(E)”. Utilizaremos este convenio siempre y cuando esté claro que estamos hablando de un lenguaje y no de una expresién regular. confusiones con la expresién 01°, cuyo lengusje son todas las cadenas que conslan de wn O y un nimero cualquier de Is. La razén de esta inerpretacion se explicn en la Sec 3.1.3, pero podemos adelantar que cl operador asterisco precede al punto y que por tanto cl argumento del asterisco se seleeions antes de realizar cualquier coneatenacion Sinembargo, L((01)*) noesexactamenteelengusje que descamos. Slo incluye aquella cadenasformadas por Osy Is alternos que comienzan por Oy terminan por 1. También necesitamos considera la posiblidad de aque exstaun Lal principio 0 un 0a final de as cadens. Un método seria consrur tres expresionesreglares ais que mancjasen ests tres otras posibildades, Fs decir, (10) representa ls cadenasallrnas que comienzan por Ly terminan por 0, mientras que 0(10)" se puede emiplear para las cadenas que comienzany terminan por Oy 1(01)* para as cadenas que comienzany terminan por 1. La expresin regular completa es (01)" + (10 +0(10)" = 1(01)* Observe que utilizamos el operador + para obtener la unién de los cuatro lenguajes que nos proporcionan todas las cadenas con ceros y unos alternos. ‘Sin embargo, existe otra forma de obtener una expresién regular algo mas sucinta, Partimos de nuevo de la expresién (01)*. Podemos aiadir un 1 opcional al principio si concatenams por la izquierda la expresién € | 1. Del mismo modo, aiadimos un 0 opeional al final con la expresidn € | 0. Por ejemplo, empleando la definicién del operador + Le +1) = Le) UL(1) = {6} UU} = {6,1} ‘Si concatenanios este lenguaje con cualquier otro lenguaje L, la opeisa € nos proporciona todas las cadenas de L, mientras que la opei6n I nos proporciona Iw para todas las cadenas w de L. Por tanto, otra expresién para el Conjunto de cadenas formadas por ceros y unos alternos es (e-+1)(01)"(e+0) Observe que es necesario encerrar entre paréntesis cada uma de las expresiones afiadidas, con el fin de garantizar gue los operadores se agrupan correctamente, Oo .3 Precedencia de los operadores en las expresiones regulares 3. Por ejemplo, sabemos que en x)-+ 2 primero se realiza el producto xy y luego la suma, y esto es equivalente a escribir la expresiOn empleando paréntesis ast tohtay ata tomes), be oma na coe dev operations pulse spipercocres a] por la izquierda, por lo que x y—zes equivalente a (xy) 76 Inrodvceén ala tora de autématas,lenguales y computacién Be Ess Por supuesto, en ocasiones no desearemos que una expresién regular sca agrupada segin la precedencia de los operadores. En dicho caso, podemos emplear paréntesis para agrupar los operandos de Ia forma que deseemos. Ademés, nunca esta de més encetrar entre paréntesis los operandos que se quieran agrupar, incluso aunque la agrupacién deseada sea la prevista por las reglas de precedencia, EJEMPLO 3.3 La expresién 01" + 1 se aplica dela forma siguiente: (0(1")) + 1. El operador + se aplica en primer lugar. Dado {que el simbolo 1 situado inmediatamente a su izquierda es una expresién regular valida, éste es el operando de +. A continuacién, realizamos las concatenaciones entre 0'y (1°), obteniendo la expresién (0(1")). Por dltimo, cL operador de unién se aplica entre la dtima expresién y la que esté a su derecha, que es 1. ‘Observe que el lenguaje de la expresién dada, aplicada de acuerdo con las reglas de precedencia, es la ‘cadena I ms todas ls cadenas formadas por un 0 seguido de cualquier ndimero de 1s (incluyendo ningdin 1). Si bbubiéramos querido aplicar la concatenacién antes que el operador », podrfamos haber empleado paréntesis ast (01)* +1. El lenguaje de esta expresién es la cadena 1 y todas las cadenas que repitan 01, cero 0 més veces. Si bubiéramos querido realizar en primer lugar la operacién de uni6n, podriamos haber encerrado entre paréntesis dicha operaci6n definiendo la expresi6n 0(1" +1). El lenguaje de esta expresi6n es el conjunto de cadenas que ‘comienzan con un 0 seguido de cualquier nsimero de 1s. 0 3.1.4 Ejercicios de la Seccién 3.1 Bjercicfo 3.1.1. Escriba expresiones regulares para ls siguientes lenguajes * a) El conjunto de cadenas del alfabeto {a,b,c} que contienen al menos una a y al menos una b. ») El conjunto de cadenas formadss por Os 1s cuyo décimo simbolo por la derecha sea 1 €) El conjunto de cadenas formadas por 0s y 1s con alo sumo una parcja de Is consecutivos, ! Bjercicio 3.1.2. Escriba expresiones regulares para los siguientes lenguajes * a) Elconjunto de todas las cadenas formadas por eros y unos tales que cada pareja de Os adyacentes aparece antes que cualquier pareja de 1s adyacentes. bb) El conjunto de cadenas formadas por ceros y unos cuyo aiimero de ceros es divisible por cinco. 1 Ejercicio 3.1.3. Escriba expresiones regulares para los siguientes lenguajes: 1) El conjunto de todas las cadenas formadas por ceros y unos que contienen 101 como subcadena. CCapitule 3 Lenguales y expresiones regulares 77 ) El conjunto de todas las cadenas con el mismo niimero de ceros que de unos, tales que ningin prefijo tiene dos ceros mas que unos ni dos unos mas que ceros. ©) El conjunto de todas las cadenas formadas por ceros y unos cuyo nimero de ceros es divisible por cinco ¥y cuyo niimero de unos es par. ! Kjercicio 3.1.4. Proporcione las descripciones informales de los lenguajes correspondientes alas siguientes expresiones regulares: * a) (1+ e)(001)"0" b) (O'1")*000(0+1)* ©) 04 10)"1 * Ejercicio 3.1.5, En el Ejemplo 3.1 apuntamos que @ es uno de los dos lenguajes cuya clausura es fnita. ;Cusl esl otro? demostrar que las expresiones regulares definen la misma clase, tenemos que probar que: 1. Todo lenguaje definido mediante uno de estos autématas también se define mediante una expresion regular, Para demostrar esto, podemos suponer que el lenguaje es aceptado por algin AFD. 2, Todo lenguaje definido por una expresidn regular puede definirse mediante uno de estos autématas. Para esta parte de la demostracién, lo mas sencillo es probar que existe un AFN con transiciones- que acepta el mismo Ienguaje. La Figura 3.1 muestra todas las equivalencias que hemos prohado o que vamos a probar. Un arco desde Ia clase X hasta la clase ¥ significa que todo lenguaje definido por la clase X también esta definido por la clase Dado que el grafoesfurtemente conexo (es decir, desde cualquiera de los cuatro nodes es posible legar a clalqier ote nodo), vemos qv Seo (AEN 4 \ } } } Esquema de demostracién de la equivalencia de cuatro notaciones diferentes para los lenguajes Figura 3. regulares,

También podría gustarte