0 calificaciones0% encontró este documento útil (0 votos) 72 vistas7 páginasExpresiones Regulares
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 cualquierCapitulo 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
Clase 5
Aún no hay calificaciones
Clase 5
19 páginas