Sunteți pe pagina 1din 16

1 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

CONTENIDO (capítulo 4)

4 LAS EXPRESIONES REGULARES (ERs)


4.1 EXPRESIONES REGULARES PARA LENGUAJES REGULARES FINITOS
4.1.1 EL OPERADOR POTENCIA
4.2 EJERCICIOS
4.3 EXPRESIONES REGULARES PARA LENGUAJES REGULARES INFINITOS
4.3.1 LA EXPRESIÓN REGULAR UNIVERSAL Y SU APLICACIÓN
4.4 OPERACIONES SOBRE LENGUAJES REGULARES
4.4.1 GENERALIDADES
4.4.2 LA UNIÓN DE LENGUAJES REGULARES
4.4.3 LA CONCATENACIÓN DE LENGUAJES REGULARES
4.4.4 LA CLAUSURA DE KLEENE DE UN LENGUAJE REGULAR
4.4.5 LA CLAUSURA POSITIVA DE UN LENGUAJE REGULAR
4.4.6 EL COMPLEMENTO DE UN LENGUAJE REGULAR
4.4.7 LA INTERSECCIÓN DE DOS LENGUAJES REGULARES
4.5 EXPRESIONES REGULARES Y LENGUAJES DE PROGRAMACIÓN
4.6 DEFINICIÓN FORMAL DE LAS EXPRESIONES REGULARES
4.7 EQUIVALENCIAS ÚTILES ENTRE EXPRESIONES REGULARES
4.8 EXPRESIONES REGULARES EXTENDIDAS
4.8.1 UN METALENGUAJE PARA EXPRESIONES REGULARES
4.8.2 DEFINICIONES REGULARES
4.9 RESUMEN
4.10 EJERCICIOS

4 LAS EXPRESIONES REGULARES (ERs)


La forma más precisa y más útil de REPRESENTAR a los Lenguajes Regulares es mediante las llamadas
EXPRESIONES REGULARES. Estas expresiones se construyen utilizando los caracteres del alfabeto sobre el cual
se define el lenguaje, el símbolo  (que representa la ausencia de cualquier carácter), ciertos operadores especiales
que veremos a continuación, y, eventualmente, haciendo uso de paréntesis para modificar las prioridades de los
operadores, tal como ocurre también con las expresiones aritméticas.

4.1 EXPRESIONES REGULARES PARA LENGUAJES REGULARES FINITOS


Una EXPRESIÓN REGULAR para un LR finito se obtiene mediante la utilización de caracteres del alfabeto, el
símbolo , y los operadores: concatenación (), que ordena la ubicación de ciertos caracteres, y unión (+), también
llamado operador “ó”, que representa una elección entre caracteres o grupos de caracteres.
El operador “concatenación” tiene mayor prioridad que el operador “unión”.

Ejemplo 1
La Expresión Regular a representa al Lenguaje Regular que contiene solamente la palabra a, es decir: L = {a}.

 Observe que, ahora, un carácter puede representar un símbolo de un alfabeto, una palabra de longitud
1 o una Expresión Regular. El contexto determina a qué se refiere ese carácter en una situación
determinada.

Ejemplo 2
La Expresión Regular  representa al Lenguaje Regular que solo contiene la palabra vacía: L = {}.

Ejemplo 3
La Expresión Regular ab (habitualmente se escribe ab y se lee “a concatenado con b” o, simplemente, “ab”)
representa el LR de una sola palabra, L = {ab}.

20090411
2 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

 Recuerde que, en general, la concatenación no es conmutativa; por ello, se puede hablar de


“concatenación a izquierda” y de “concatenación a derecha”.

Ejemplo 4
Por lo enfatizado anteriormente, las Expresiones Regulares ab y ba representan dos lenguajes distintos. En la
primera ER, el símbolo b está “concatenado a derecha”, mientras que en la segunda ER el carácter b está
“concatenado a izquierda”.

Ejemplo 5
La Expresión Regular a+ba, que se lee “a unión ba” o “a ó ba” o “a más ba”, describe la posibilidad de elegir entre
dos palabras: la palabra a o la palabra ba.
En consecuencia, esta ER está asociada a la unión de los LRs {a}  {ba} o, más simplemente, al LR con dos
palabras: {a, ba}.

 La operación de “unión” es conmutativa. Por consiguiente, las ERs a+ba y ba+a representan el mismo
Lenguaje Regular.

Nota 1: El operador “unión” (+) también se puede simbolizar con | (“barra vertical”). En consecuencia: a+ba y a|ba
representan la misma ER.

Ejemplo 6
La ER ab | , que también se puede escribir ab + , representa al LR que contiene dos palabras: la palabra vacía y
la palabra ab, es decir: L = {, ab}.

 Como se ha dicho anteriormente, el operador “concatenación” tiene mayor prioridad que el operador
“unión”, como ocurre con la multiplicación y la suma en el ámbito de las expresiones aritméticas. Por lo
tanto, en caso de tener que modificar estas prioridades se deben utilizar paréntesis.

Ejemplo 7
La ER aa+b (aa unión b) es diferente a la ER a(a+b) (a concatenado con, a unión b). La primera ER representa al
LR {aa, b}, mientras que la segunda ER, a(a+b) = aa+ab, representa al LR {aa, ab}.

 La factorización en el ámbito de las ERs tiene alguna diferencia con la que se puede hacer entre las
expresiones aritméticas. Ello se debe a que, como ya se informó, la “concatenación” no es conmutativa. En
consecuencia, debemos hablar de “factorización a izquierda”, si se realiza porque se detectó un prefijo
común a dos o más palabras, o de “factorización a derecha”, si lo que se detectó es un sufijo común.

Ejemplo 8
La ER abb+aab tiene el prefijo a y el sufijo b comunes a ambas palabras. Por lo tanto, se puede “factorizar a
izquierda”, obteniendo la expresión a(bb+ab), o se puede “factorizar a derecha”, obteniendo la expresión
(ab+aa)b, o se puede “factorizar a izquierda y a derecha”, obteniendo, así, la ER a(b+a)b.

Ejemplo 9
Sea la ER abbaac+abac+abacccac. Se observa que las tres palabras tienen el prefijo común ab y también
poseen el sufijo común ac. Por lo tanto, esta ER se puede factorizar y reescribir de esta manera:
ab(ba++accc)ac.
Aquí se han aplicado, simultáneamente, “factorización a izquierda” y “factorización a derecha”, y, en ambos casos,
los factores están formados por cadenas de longitud mayor que 1.

Ejemplo 10
La ER ba + ab no se puede factorizar “a izquierda” ni tampoco “a derecha”.

20090411
3 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

 Dos Expresiones Regulares son EQUIVALENTES si representan el mismo Lenguaje Regular.

Ejemplo 11
Las ERs a+b y b+a son equivalentes porque ambas representan al LR {a, b}.
En cambio, las ERs a(a+b) y (a+b)a no son equivalentes porque la “concatenación” no es conmutativa y, por ende,
representan a diferentes LRs; la primera ER representa al LR {aa, ab}, mientras que la segunda ER representa al LR
{aa, ba}.

Ejemplo 12
El lenguaje “Todas las palabras con dos caracteres sobre el alfabeto {a, b}” puede ser representado por las siguientes
Expresiones Regulares equivalentes:
aa+ab+ba+bb = a(a+b)+b(a+b) = (a+b)(a+b).

4.1.1 EL OPERADOR POTENCIA

Ejemplo 13
La ER +(a+b)3 representa al LR: “La palabra vacía y todas las palabras de tres caracteres sobre el alfabeto {a, b}”.

Nota 2: Si bien el operador POTENCIA no es un operador “oficial” para la construcción de ERs, sí aparecerá en las
extensiones de las ERs. Además, conviene agregarlo para indicar la repetición de un carácter o de una sub-ER un
número de veces determinado, y así simplificar la escritura de ERs más complejas.

Ejemplo 14
El lenguaje “Todas las palabras de longitud 27 sobre el alfabeto {a, b} y que comienzan con 25 aes” se puede
representar mediante la siguiente ER: a25(a+b)2. ¡Imagine cuánto más compleja sería la escritura y, más aún, la
lectura, de esta expresión si no se utilizara el operador “potencia”!

Ejemplo 15
El lenguaje “Todas las palabras de longitud 27 sobre el alfabeto {a, b}” se representa fácilmente mediante la
siguiente ER: (a + b)27.

Ahora disponemos de tres operadores:


El operador +, ó, que permite una elección y tiene la menor prioridad de los 3 operadores;
El operador de concatenación, con una prioridad intermedia;
El operador potencia, de máxima prioridad.

Para comprender estas prioridades a nivel de operadores de Expresiones Regulares, cuya aplicación correcta produce
palabras de un LR, analicemos la ER del Ejemplo 14: a25(a+b)2.
La expresión a25 está concatenada con la expresión (a+b)2.
Como ambas subexpresiones contienen potenciones y el operador de potenciación tiene la prioridad máxima,
primero debemos resolver cada subexpresión para luego hacer la concatenación.
En la subexpresión de la izquierda, a25, la solución es sencilla: es la cadena formada por 25 aes.
En la subexpresión de la derecha: (a+b)2 = (a+b)(a+b) = aa+ab+ba+bb.
En definitiva, el LR está formado por 4 palabras; una que tiene 27 aes, otra que tiene 26 aes y termina con una b,
otra que tiene 25 aes, una b y una a final, y una palabra que tiene comienza con 25 aes y termina con dos bes.

ººº

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo:

Ejemplo 16
Sea el lenguaje L = {an / 1  n  1000}. Este es un LR finito y, por lo tanto, puede ser representado por una ER.
Dado que el lenguaje L tiene 1000 palabras, la ER que lo representa deberá tener 1000 términos, es decir:
a + aa + aaa + ... + a999 + a1000, y los “puntos suspensivos” no es un operador ni una codificación válidos.

20090411
4 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

Deberíamos “inventar” un nuevo operador “potencia, como: a1..1000.

4.2 EJERCICIOS
(1) Escriba una ER que represente al LR “Todas las palabras que comienzan con una a, seguida de dos o tres bes”.
(2) Escriba una ER que represente al LR “Todas las palabras de longitud 5 que comienzan con una a y terminan con
una b”.
(3) Escriba una ER que represente al LR “La palabra vacía y todas las palabras de longitud 5 que comienzan con aa
o con bb, y que terminan con aa o con bb”.
(4) Compruebe que las ERs 1(0+1)(0+1)1 y 1001+1011+1101+1111 son equivalentes.
(5) Describa, mediante una frase sin ambigüedades, al LR del ejercicio anterior.
(6) Escriba, por enumeración, el LR +(a+b)3.
(7) Sea la ER 101101+1001101+1001. Obtenga una ER más compacta, que sea equivalente a esta expresión.
Ayuda: utilice las factorizaciones que crea conveniente.

4.3 EXPRESIONES REGULARES PARA LENGUAJES REGULARES INFINITOS


En esta sección analizamos a las ERs más útiles: las que representan a los Lenguajes Regulares infinitos. La
característica fundamental de estos lenguajes es que tienen un carácter o un grupo de caracteres, que se repite un
número indeterminado de veces.

Para representar estas repeticiones “indeterminadas”, incorporamos el operador que fuera presentado en el primer
capítulo, y que se denomina “estrella de Kleene” o “clausura de Kleene”, o, más simplemente, “operador estrella”.
Este operador se representa con un asterisco (*) colocado como supraíndice de un carácter o de una expresión, y
tiene mayor prioridad que los operadores “concatenación” y “unión”.

 El operador estrella de Kleene o clausura de Kleene genera la cadena vacía y todas las cadenas que se
forman con la repetición, de su operando, un número de veces a elección.

Ejemplo 17
La ER a*, que corresponde a la expresión infinita  + a + aa + aaa + aaaa + ..., representa el LR infinito:
L = {an / n  0},
que podemos describir mediante la frase “La palabra vacía y todas las palabras formadas solo por aes”.

Ejemplo 18
La ER aa* corresponde a la expresión infinita a + aa + aaa + aaaa + ..., y representa el LR infinito:
L = {an / n  1},
que podemos describir mediante la frase “Todas las palabras formadas solo por aes”.
Note la diferencia sutil que hay entre las ERs a* y aa*: una sola palabra de diferencia.
Efectivamente, el LR representado por a* contiene la palabra vacía, que es la única palabra que no está en el LR
aa*; las restantes palabras están en ambos LRs.

Los operadores “estrella de Kleene”, concatenación y unión son los tres operadores “originales” e indispensables
para construir cualquier ER. Existen otros operadores, como el operador “potencia” y el que conoceremos a
continuación, que se han agregado a los tres operadores originales o básicos con la finalidad de facilitar la escritura y
la lectura de ciertas ERs.

Incorporamos un nuevo operador “no básico”, llamado clausura positiva, que tiene la misma prioridad que el
operador “clausura de Kleene” y que se representa mediante un símbolo + ubicado como supraíndice, así: a+.
El operador “clausura positiva” se utiliza para simplificar la escritura de ERs como la del Ejemplo 18: la ER aa* se
puede escribir a+, por lo que a+ = aa* = a*a.

20090411
5 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

La diferencia existente entre el operador “clausura positiva” y el operador “clausura de Kleene” es, justamente, la
que se señala en el Ejemplo 18: mientras que el operador “clausura de Kleene” garantiza la existencia de la palabra
vacía, el operador “clausura positiva” la elimina (excepto que la palabra vacía pertenezca al lenguaje que es
“clausurado positivamente”, como veremos en el Ejemplo 21).

Ejemplo 19
Las siguientes ERs son equivalentes:  = * = +.

Ejemplo 20
Volviendo a las ERs a* y a+, se pueden comprobar las siguientes equivalencias:
(1) a*a* = a*, ya que a*a* = ( + a + aa + ...) ( + a + aa + ...) =  + a + aa + ... = a*;
(2) a+ = aa* = a*a = aa*a* = a+a* = a*a+ = a*a*aa*, entre otras.

Ejemplo 21
Si la ER a “clausurar” fuera  + a, entonces: ( + a)* = ( + a)+ = a*, porque la palabra vacía pertenece al lenguaje
original.

Nota 3: En los ejemplos que siguen se presentarán ERs acompañadas, cada una, por una frase que describe al LR que
esta expresión representa. Se podrá apreciar que, muchas veces, resulta difícil elaborar una frase que sea clara, corta
y sin ambigüedades. Esto se debe a que, cualquiera sea el Lenguaje Natural que utilicemos para describir un
determinado Lenguaje Formal (en nuestro caso empleamos el castellano), la frase será, muchas veces, ambigua.
Conclusión: cuando nos referimos a LRs, debemos preferir a las ERs por sobre las frases que describen a estos
lenguajes.

Ejemplo 22
Consideremos la Expresión Regular ab*. Las tres palabras de menor longitud son: a, ab y abb.
Esta ER representa al lenguaje infinito “Todas las palabras que comienzan con una a, la que será seguida de cierto
número de bes (si las hay)”. Se ha utilizado una frase muy barroca para describir un LR que aparece tan sencillo
cuando está descripto mediante una Expresión Regular.
Note que la expresión b* (se lee “b clausura de Kleene” o “b estrella”) representa que, para cada palabra, se debe
elegir la cantidad de bes que la formarán, o ninguna b; es decir: b* es la forma abreviada de la expresión infinita:
 + b + bb + bbb + ...
En consecuencia, ab* = a ( + b + bb + ...) = a + ab + abb + ... = a + ab + abb + ..., que se lee “palabra a ó
palabra ab ó palabra abb ó ...”.

Ejemplo 23
Sea la Expresión Regular ab+. Esta ER, muy similar a la del ejemplo anterior (ab*), solo se diferencia en que la
palabra vacía no es representada por la “clausura positiva” de b y, por lo tanto, la palabra a no pertenece a este
Lenguaje Regular. En consecuencia, las tres palabras de menor longitud son: ab, abb y abbb.

Ejemplo 24
La ER ab*a representa al Lenguaje Regular “Todas las palabras que comienzan con una a, terminan con otra a, y en
medio pueden tener bes”. Las tres palabras de menor longitud son: aa, aba y abba.
Consideremos ahora a la ER ab+a, que representa al LR: “Todas las palabras que comienzan con una a, terminan
con otra a, y en medio deben tener bes”. Las tres palabras de menor longitud son: aba, abba y abbba.
La diferencia entre las dos ERs de este ejemplo radica en el uso del operador “clausura de Kleene” en la primera y el
uso del operador “clausura positiva” en la segunda ER, diferencia que está claramente expuesta en el empleo de los
términos “pueden” y “deben” en las frases elaboradas para describir a los respectivos Lenguajes Regulares (observe
que, término por término, es la única distinción entre una frase y otra).

Ejemplo 25
La ER a*b* representa al lenguaje “Todas las palabras de aes y bes en las que un bloque de aes (si hay alguna)
precede a un bloque de bes (si las hay)”. Recuerde que el operador “estrella” representa también a la palabra vacía,

20090411
6 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

por lo que: la palabra vacía pertenece a este lenguaje (ya que  = ), las palabras que solo tienen aes pertenecen a
este lenguaje y las palabras que solo tienen bes también pertenecen a este lenguaje.
En consecuencia, la ER a*b* es equivalente a la ER  + a+ + b+ + a+b+.
El Lenguaje Regular definido por esta ER es, por comprensión: {anbr / n  0, r  0}. Las seis palabras de menor
longitud son:  (cuando n=0 y r=0), a (n=1, r=0), b (n=0, r=1), aa (n=2, r=0), bb (n=0, r=2) y ab (n=1, r=1).

Nota 4: Observe que en este último ejemplo se usan dos supraíndices distintos (n y r) en la descripción del LR como
conjunto, con lo que se afirma que las longitudes de los bloques de aes y de bes no tienen relación entre sí. Es más:
como ya se ha visto en un ejemplo de un capítulo anterior, si hubiera una relación entre estas dos longitudes, y dado
que el lenguaje es infinito, entonces no sería un Lenguaje Regular.

Ejemplo 26
La ER (ab)* parece equivalente a la ER a*b* del ejemplo anterior, pero no lo es: el operador “estrella” no es
distributivo con respecto a la concatenación. Tampoco lo es con respecto a la unión.
El LR definido por (ab)* es: “La palabra vacía y todas las palabras formadas por secuencias del par ab”. Las tres
palabras de menor longitud son: , ab y abab.

Ejemplo 27
La ER a* + b* representa un LR infinito; las cinco palabras de menor longitud son: , a, b, aa y bb.
Este LR es un subconjunto del LR representado por la ER a*b*. ¿Está de acuerdo?

*** Ejercicio: Verifique la afirmación del Ejemplo 27.

Ejemplo 28
La ER b*ab*ab* representa al lenguaje “Todas las palabras sobre el alfabeto {a, b} con exactamente dos aes”.
Algunas palabras de este lenguaje son: aa, babba, bbaabbb, aba.

Ejemplo 29
Consideremos ahora la ER (b*ab*ab*)*, construida con la aplicación del operador “estrella” a la ER del ejemplo
anterior. Dado que el operador “estrella” representa también a la palabra vacía, el lenguaje correspondiente a esta
nueva ER contiene la palabra .
Por otro lado, el operador “estrella” representa la concatenación del operando consigo mismo un número
indeterminado de veces; entonces, todas las palabras representadas por la expresión (b*ab*ab*)(b*ab*ab*) =
b*ab*ab*ab*ab* también pertenecen a este LR, y estas son: “todas las palabras con exactamente cuatro aes”. De la
misma forma, (b*ab*ab*)(b*ab*ab*)(b*ab*ab*) = b*ab*ab*ab*ab* ab*ab*, que representa “todas las palabras
con exactamente seis aes”, también pertenece a este lenguaje. Y así sucesivamente.
En definita: algunos matemáticos consideran que el menor número par es el 0, mientras que, para otros, el menor
número par es el 2. Si consideramos que 0 es el menor número par, entonces la ER (b*ab*ab*)* representa el
lenguaje: “Todas las palabras sobre el alfabeto {a, b} con un número par de aes”.
Si, en cambio, adherimos a la definición que dice que los números pares comienzan con el 2, el LR representado por
esta ER es “La palabra vacía y todas las palabras sobre el alfabeto {a, b} con un número par de aes”.

Ejemplo 30
La ER (1+0)1* representa el LR “Todos los números binarios que comienzan con un 1 o con un 0, el cual puede
estar seguido por una secuencia de 1s”. Los cuatro números binarios de menor longitud y que pertenecen a este
lenguaje son: 1, 0, 11 y 01.

Ejemplo 31
Sea la ER 1*0+(1+) + 11, que está formada por la unión de dos ERs: 1*0+(1+) y 11. La primera ER, 1*0+(1+),
está constituida por la concatenación de tres sub-expresiones, cada una de las cuales proporciona una cadena a la
formación de una palabra; la concatenación de estas tres cadenas producirá una palabra del Lenguaje Regular.
Por lo tanto, el LR definido por la ER 1*0+(1+) + 11 puede ser descripto así: “El número binario 11, y todos los
números binarios que contienen 0s, los cuales pueden estar precedidos por 1s y pueden estar seguidos por un 1”.
Algunas palabras de este lenguaje son: 11, 0, 10, 0001.

20090411
7 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

4.3.1 LA EXPRESIÓN REGULAR UNIVERSAL Y SU APLICACIÓN

Denominamos EXPRESIÓN REGULAR UNIVERSAL (ERU) a la ER que representa al Lenguaje Universal sobre
un alfabeto dado (¿Recuerda qué es el Lenguaje Universal? Revise el Capítulo 1).
En consecuencia, la ERU representa al LR que contiene la palabra vacía y todas las palabras que se pueden formar
con símbolos del alfabeto dado.

Ejemplo 32
Si el alfabeto es {a, b}, la ERU es (a+b)*. Algunas palabras son: , a, bbbabaa.
Si el alfabeto es {0, 1}, la ERU es (0+1)*. Algunas palabras son: 000110101, 00000.
Si el alfabeto es {a, b, c}, la ERU es (a+b+c)*. Algunas palabras son: cbaabbcca, bbbbbb.

Las ERUs tienen una aplicación muy importante en la construcción de ERs que representan a un gran número de
LRs infinitos, como apreciaremos en los ejemplos que siguen.

Ejemplo 33
El LR “Todas las palabras sobre el alfabeto {a, b} que comienzan con a”, se representa fácilmente mediante la
siguiente ER: a (a + b)*.
Si el LR fuera “Todas las palabras que comienzan con a, sobre el alfabeto {a, b, c}”, la ER que lo representa sería:
a (a + b + c)*.

Ejemplo 34
Sea el alfabeto  = {a, b} y sea el Lenguaje Regular “Todas las palabras que comienzan con una a y terminan con
otra a”. Este LR se puede representar fácilmente mediante la ER a (a + b)* a.

Ejemplo 35
Dado el alfabeto  = {a, b}, el LR “Todas las palabras que terminan con aa o con bb” se representa mediante la ER
(a + b)* (aa + bb).

Ejemplo 36
Dado el alfabeto  = {a, b}, el LR “Todas las palabras que contienen como mínimo dos aes” se representa mediante
la ER (a + b)* a (a + b)* a (a + b)*.

Ejemplo 37
Otra ER que representa el mismo lenguaje del ejemplo anterior es b*ab*a (a + b)*. Afirmamos, entonces, que estas
dos ERs son equivalentes porque representan el mismo lenguaje; en consecuencia:
(a + b)* a (a + b)* a (a + b)* = b*ab*a (a + b)*.
Otras ERs que representan a este mismo lenguaje son: (a + b)* ab*ab* y b*a (a + b)* ab*.

*** Ejercicio: Compruebe que las 4 ERs del Ejemplo 37 son equivalentes.

Nota 5: En un capítulo posterior se presenta un método para determinar si dos ERs dadas son equivalentes.

 DEFINICIÓN: un Lenguaje Formal es un LR si existe una ER que lo represente.

 A cada ER le corresponde un único LR. Sin embargo, un LR puede ser representado por varias ERs,
como sucede en el ejemplo anterior. Afirmamos entonces: dos ERs son equivalentes si representan el
mismo LR.

Ejemplo 38
El LR “Todas las palabras sobre el alfabeto {a, b} que tienen por lo menos una a y por lo menos una b” puede ser
representado por la siguiente ER: (a + b)* a (a + b)* b (a + b)* + (a + b)* b (a + b)* a (a + b)*.

20090411
8 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

O por esta otra: (a + b)* (a (a + b)* b + b (a + b)* a) (a + b)*.

Ejemplo 39
El LR “Todos los números binarios que comienzan con un número impar de 1s” se puede representar mediante la
ER 1 (11)* + 1 (11)* 0 (0+1)*, o mediante esta otra: (1 + 111) 0 (0+1)* + 111 (11)+ 0 (0+1)* + 1 (11)*.

4.4 OPERACIONES SOBRE LENGUAJES REGULARES


Una de las equivalencias vistas anteriormente dice: “Un LF es Regular si puede ser representado mediante una ER”.
En esta sección analizaremos diversas propiedades que tienen los LRs, y las relacionaremos con las ERs.

4.4.1 GENERALIDADES

Teniendo en cuenta que los LFs son conjuntos, las operaciones entre conjuntos –como la unión, la intersección y el
complemento– se aplican también a los LRs.
Además, hay otras operaciones propias de los LFs –como la concatenación y las clausuras– que, lógicamente, se
aplican al caso particular de los LRs.
Por ello, afirmamos: los LRs son cerrados bajo la unión, la concatenación, las dos clausuras (la de Kleene y la
positiva), el complemento con respecto al Lenguaje Universal y la intersección. Esto es: (1) la unión de dos LRs es
un LR; (2) la concatenación de dos LRs es un LR; (3) la clausura de Kleene de un LR es un LR; (4) la clausura
positiva de un LR es un LR; (5) el complemento de un LR con respecto al LU es un LR; (6) la intersección de dos
LRs es un LR.

4.4.2 LA UNIÓN DE LENGUAJES REGULARES

Sean L1 y L2 dos LRs. Entonces, la unión de L1 con L2, que se escribe L1  L2, es un LR que contiene todas las
palabras que pertenecen a cualquiera de los dos LRs.

Si L1 es representado por una ER R1 y L2 es representado por cierta expresión R2, la unión L1  L2 es representada
por la ER R1+R2.

Ejemplo 40
Si L1 es representado por a*b y L2 es representado por la a+b*, L1  L2 es representado por a*b + a+b*.

4.4.3 LA CONCATENACIÓN DE LENGUAJES REGULARES

La concatenación de dos LRs, L1L2 (o, simplemente, L1L2), es un LR en el que cada palabra está formada por la
concatenación de una palabra de L1 con una palabra de L2. Por ende, la cardinalidad del LR concatenación es el
producto de las cardinalidades de los LRs de partida.

Ejemplo 41
Sea L1 = {ab, cd} y sea L2 = {aa, acc, ad}. Entonces: L1L2 = {abaa, abacc, abad, cdaa, cdacc, cdad} y su
cardinalidad es 6.

Si L1 es representado por una ER R1 y L2 es representado por R2, entonces la concatenación L1L2 es representada por
la ER R1R2.

Ejemplo 42
Si L1 es representado por a*b y L2 es representado por a+b*, la concatenación L1L2 es representada por la ER
a*b(a+b*). Concatenando una palabra de a*b, como aab, con una palabra de a+b*, como bb, se obtiene aabbb,
que es una palabra del LR concatenación.

20090411
9 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

4.4.4 LA CLAUSURA DE KLEENE DE UN LENGUAJE REGULAR

Si L es un LR, su clausura de Kleene, L*, es un LR infinito (salvo una excepción) formado por: (1) la palabra vacía,
(2) las palabras de L y (3) todas aquellas palabras que se obtienen concatenando palabras de L, un número arbitrario
de veces.
La excepción es si el LR está formado solo por la palabra vacía.

Ejemplo 43
Sea L = {ab, ba}. Entonces, L* = {ε, ab, ba, abab, abba, baba, ababab, ababba, abbaba, bababa, …}.

Si L es representado por la ER R, L* es representado por R*.

Ejemplo 44
Si L es representado por a*b, L* es representado por (a*b)*. Las palabras , aab, aabab, babaabb pertenecen al
lenguaje L*.

4.4.5 LA CLAUSURA POSITIVA DE UN LENGUAJE REGULAR

Si L es un LR, su clausura positiva, L+, es un LR formado por las palabras de L y todas aquellas palabras que se
obtienen concatenando palabras de L, un número arbitrario de veces.

Si L es representado por R, L+ es representado por R+.

Ejemplo 45
Si L es representado por a*b, L+ es representado por (a*b)+. Las palabras aab, aabab, babaabb pertenecen al
lenguaje L+.

 La clausura positiva de un LR contiene a la palabra vacía solo si ésta pertenece al lenguaje original.

4.4.6 EL COMPLEMENTO DE UN LENGUAJE REGULAR

El complemento de un LR con respecto al LU, Lc, es un LR que está formado por todas aquellas palabras que no
pertenecen al lenguaje original.

Ejemplo 46
Sea el alfabeto {a, b}.
Si L es representado por la ER (a+b)+, o sea, la ERU “menos” la palabra vacía, entonces Lc solo contiene a la
palabra vacía.
Si L es a(a+b)*, es decir, el LR formado por todas las palabras que comienzan con a, entonces Lc es b(a+b)* + .

Nota 6: No existen operadores para describir el complemento de una ER, aunque en algunos casos se utiliza not.

4.4.7 LA INTERSECCIÓN DE DOS LENGUAJES REGULARES

Dado que los lenguajes son conjuntos, se pueden aplicar sobre ellos las operaciones propias de los conjuntos. El
complemento y la intersección son dos de ellas.
Lo más importante es que la aplicación de estas operaciones, muy útiles para trabajar con lenguajes difíciles de
definir de otra manera, produce lenguajes que siguen siendo Regulares.

La intersección de dos LRs es un LR constituido por todas aquellas palabras que pertenecen a los dos lenguajes
dados.

20090411
10 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

Ejemplo 47
Sea el alfabeto {a, b}.
Si L1 es a(a + b)* [todas las palabras que comienzan con a] y L2 es (a + b)*b [todas las palabras que terminan con
b], entonces L1  L2 es a(a + b)*b [todas las palabras que comienzan con a y terminan con b].

Nota 7: No existen operadores para describir la intersección de dos ERs.

4.5 EXPRESIONES REGULARES Y LENGUAJES DE PROGRAMACIÓN


Los componentes básicos de un LP –los identificadores, las palabras reservadas, las constantes, los operadores, los
símbolos de puntuación– constituyen diferentes LRs. Como tales, los podremos representar mediante ERs.

Ejemplo 48
Sea un LP 1 en el que IDENTIFICADOR es una secuencia de letras y dígitos que comienza con letra.
Supongamos que L representa a cualquiera de las letras y D representa a cualquiera de los dígitos.
Entonces, el LR infinito IDENTIFICADOR puede representarse mediante la ER L (L+D)*.

Ejemplo 49
Sea un LP 2 en el que CONSTANTE REAL es una secuencia de dígitos (por lo menos uno), seguido de un punto,
seguido, no obligatoriamente, de una secuencia de dígitos.
Entonces, el LR infinito CONSTANTE REAL puede representarse mediante la ER D+ . D*.

Ejemplo 50
Sea un LP 3 que solo tiene tres PALABRAS RESERVADAS: if, else y while.
Entonces, este LR finito puede representarse mediante la ER if + else + while.

4.6 DEFINICIÓN FORMAL DE LAS EXPRESIONES REGULARES


Las ERs se construyen utilizando los operadores básicos unión (+), concatenación () y clausura de Kleene (*), y se
definen formalmente de la siguiente manera recursiva:

(1) ø es una ER que representa al LR vacío (sin palabras).


(2)  es una ER que representa al LR que solo contiene la palabra vacía: {}.
(3) Todo símbolo x de un alfabeto corresponde a una ER x que representa a un LR que solo tiene una palabra con
ese símbolo x. Ejemplo: Si  = {a, b}, entonces a es una ER que representa al LR {a} y b es una ER que representa
al LR {b}.
(4) Una cadena s es una ER s que representa a un LR que solo contiene la palabra s. Ejemplo: dada la cadena abc,
la ER abc representa al LR {abc}.
(5) Si R1 y R2 son ERs, entonces R1 + R2 es una ER. Ejemplo: si R1 = a y R2 = , entonces a+ es una ER.
(6) Si R1 y R2 son ERs, entonces R1  R2 (o, simplemente, R1R2) es una ER. Ejemplo: si R1 = a y R2 = b, entonces
ab es una ER.
(7) Si R1 es una ER, entonces R1* es una ER. Ejemplo: si R1 = a, entonces a* es una ER.
(8) Si R1 es una ER, entonces (R1) es una ER. Ejemplo: si R1 = a, entonces (a) es una ER.

A los tres operadores básicos descriptos para construir ERs, agregamos, como ya hemos visto, dos operadores que
simplifican sensiblemente la escritura de algunas ERs. Ellos son: el operador clausura positiva y el operador
potencia, los cuales ya hemos definido oportunamente. En consecuencia:

(9) Si R1 es una ER, entonces R1+ es una ER. Ejemplo: si R1 = a, entonces a+ es una ER.
(10) Si R1 es una ER, entonces R1n (con n  0 y entero) es una ER. Ejemplo: si R1 = a, entonces a216 es una ER.

20090411
11 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

Con respecto a la precedencia de los operadores, ya se ha informado que:


(1) Los operadores “clausura de Kleene”, “clausura positiva” y “potencia” tienen prioridad máxima;
(2) El operador “concatenación” tiene prioridad media; y
(3) El operador “unión” tiene prioridad mínima.

4.7 EQUIVALENCIAS ÚTILES ENTRE EXPRESIONES REGULARES


En esta sección se conocerán algunas equivalencias que existen entre diferentes ERs y que pueden ser empleadas
para simplificar la escritura de ciertas expresiones complejas. Esta es una sección ardua de leer, pero puede resultar
de mucha utilidad en más de una ocasión.
Sugerencia: recorra las equivalencias presentadas, siguiendo su lectura con algunos ejemplos propios y sencillos, y
luego utilice esta sección como “material de referencia”.

Sean R1, R2 y R3 Expresiones Regulares; entonces:

R1 + R2 = R2 + R1, porque el operador “unión” es conmutativo


(R1 + R2) + R3 = R1 + (R2 + R3) = R1 + R2 + R3
(R1 R2) R3 = R1 (R2 R3) = R1 R2 R3
R1 R2 + R1 R3 = R1 (R2 + R3) (simplificación por ”concatenación” a izquierda)
R1 R3 + R2 R3 = (R1 + R2) R3 (simplificación por ”concatenación” a derecha)
(R1*)* = R1*
( + R1)* = R1*
(R1* R2*)* = (R1 + R2)* [por ejemplo: (a*b*)* = (a + b)* ]
R1 R1* = R1* R1 = R1+
 + R1+ = R1*
R1+ + R1* = R1*
(R1+)* = R1*
(R1*)+ = R1*
R1* R1* = R1*

A continuación se agregan algunas equivalencias que corresponden a las ERUs, las que serán ejemplificadas sobre
un alfabeto particular. Sea el alfabeto  = {a, b}; entonces, el LU sobre este alfabeto está representado por la ER
(a+b)*, y se verifican las siguientes equivalencias:

(a + b)* + (a + b)* = (a + b)*


(a + b)* (a + b)* = (a + b)*
(a + b*)* = (a + b)*
(a*b*)* = (a + b)*

4.8 EXPRESIONES REGULARES EXTENDIDAS


Las Expresiones Regulares también se emplean para representar datos que serán procesados por herramientas de
software como Lex y Awk.

Lex es una herramienta diseñada para ayudar a la escritura de compiladores e intérpretes, si bien también resulta útil
para otras aplicaciones no tan complejas como, por ejemplo, aquellas que requieren algún tipo de búsqueda de
patrones en su texto de entrada. En todos los casos, Lex utiliza las ERs para describir los patrones que debe encontrar
y procesar.

Awk es un lenguaje de programación que posibilita resolver tareas en las que existe la manipulación habitual de
datos, mayormente en forma de texto, como, por ejemplo: modificar el formato de los datos, controlar su validez,
buscar patrones con cierta propiedad, etc.

20090411
12 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

4.8.1 UN METALENGUAJE PARA EXPRESIONES REGULARES

Lex, Awk y cualquier otra herramienta que necesite representar ERs para su posterior procesamiento, considera a
estas expresiones como un lenguaje.

Este lenguaje de las ERs está formado por:


(1) operandos, que son los caracteres del alfabeto;
(2) operadores: clausura de Kleene, clausura positiva, concatenación, unión, y otros que serán incorporados a
continuación, todos los cuales deben ser representados en la misma línea (no se permiten supraíndices ni
subíndices); y
(3) ciertos caracteres especiales, llamados metacaracteres, que colaboran en la descripción, sin ambigüedades, de la
Expresión Regular en cuestión.

Un metalenguaje es un lenguaje que se usa para describir otro lenguaje. El que queremos describir es el lenguaje de
las ERs, y el metalenguaje que utilizaremos tiene símbolos –que no son ni operandos ni operadores– que agregamos
para describir, de forma inequívoca, a las ERs; a estos símbolos los llamamos metacaracteres.

Estos metalenguajes no están estandarizados, es decir: existen diferentes metalenguajes para describir el lenguaje de
las ERs. Pero lo fundamental, en este momento, es definir y aprender a trabajar con cierto metalenguaje; esto servirá,
luego, para comprender y trabajar con cualquier metalenguaje.

A continuación se presenta un subconjunto del metalenguaje utilizado por Lex, Awk y otras herramientas, para
describir a las ERs. Observe que los metacaracteres utilizados no solo describen las operaciones conocidas, sino que
también ayudan a representar nuevos operadores:

| operador unión de expresiones (ejemplo: ab | b representa la ER ab+b)


[] clase de caracteres, simplifica la unión de caracteres (ejemplo: [abx] representa la ER a+b+x)
[] clase de caracteres en un intervalo (ejemplo: [ad] representa la ER a+b+c+d)
{} operador potencia, repetición determinada (ejemplo: a{3} representa la ER aaa)
{,} operador potencia extendido a un intervalo (ejemplo: a{1,3} representa la ER a+aa+aaa)
? cero o una ocurrencia de la expresión que lo precede (ejemplo: a? representa la ER a+)
 operador clausura de Kleene, cero o más copias de quien lo precede (ejemplo: a representa la ER a*)
+ operador clausura positiva, una o más copias de quien lo precede (ejemplo: a+ representa la ER a+)
() agrupa una ER (ejemplo: ((ab)? | b)+ representa (ab++b)+)

Nota 8: Observe que no existe un operador explícito para la concatenación. La aparición de un carácter o de una
clase de caracteres inmediatamente a continuación de otro representa la concatenación de estos caracteres o clases de
caracteres.

Ejemplo 51
[ab][cd] equivale a (a+b)(c+d) = ac + ad + bc + bd.

Nota 9: En el metalenguaje, los espacios en blanco son opcionales, aunque no pueden existir en una concatenación.

Nota 10: Los operadores unarios (clausura de Kleene, clausura positiva, potencia y ?) tienen máxima prioridad.

Nota 11: si un símbolo utilizado como metacarácter es un carácter de una ER, se lo debe preceder de una “barra
invertida” (\) para evitar una interpretación errónea (ejemplo: \+).

Ejemplo 52
En este metalenguaje, la expresión a? (a | b) b representa a la ER (a+ε) (a+b) b.

20090411
13 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

Ejemplo 53
La expresión \? [0-9]+ representa el LR de todos los números enteros en base 10, eventualmente precedidos por
el signo negativo.

Ejemplo 54
La expresión (\+|\)? [0-9]+ es muy similar a la del ejemplo anterior, pero, ahora, el número entero en base 10
puede estar precedido por cualquiera de los dos signos. Por caso, los números 204, 204 y +204 pertenecen al
lenguaje representado.

Ejemplo 55
La expresión [0-9]\.[0-9]+ representa el LR de todas las constantes reales en punto fijo, sin signo, y con dígitos
decimales optativos antes del punto decimal. Algunos números que pertenecen a este lenguaje son: 12345.0, 0.18,
.024 y 12.3467.

4.8.2 DEFINICIONES REGULARES

Algunas herramientas que trabajan con ERs como datos, describen a las ERs en la forma vista en los ejemplos
anteriores. Otras herramientas, en cambio, trabajan con lo que se llama DEFINICIONES REGULARES.

Ante una situación en la que se debe manejar una ER compleja o varias ERs, conviene descomponer la expresión
total en expresiones más simples, cada una de las cuales recibe un nombre que la identifica.
Finalmente, la ER general es descripta usando estos nombres como si fueran símbolos del alfabeto. A esta resolución
se la llama Definición Regular.

Formalmente: si  es un alfabeto, una Definición Regular es una secuencia de definiciones de la forma:

<nombre-1> = expresión 1
<nombre-2> = expresión 2
...
<nombre-n> = expresión n

donde cada <nombre-(i)> es un nombre distinto y cada <expresión (i)> es una “Expresión Regular” que se
construye con los símbolos de   {<nombre-1>, <nombre-2>,..., <nombre-(i-1)>}

Ejemplo 56
El número real sin signo y en punto fijo representado por la ER del Ejemplo 55, puede ser descripto mediante la
siguiente definición regular:
<parte decimal> = [0-9]+
<parte entera> = [0-9]
<punto decimal> = [.]
<número real> = <parte entera> <punto decimal> <parte decimal>

Ejemplo 57
Los identificadores del lenguaje de programación ANSI C deben comenzar con una letra o el carácter “guión bajo”
(_) y, en caso de tener más caracteres, estos pueden ser letras, “guiones bajos” y dígitos.
Una definición regular para estos identificadores se puede escribir así:
<letra> = [a-zA-Z] (cualquier letra minúscula o mayúscula del alfabeto reducido)
<dígito> = [0-9]
<guión bajo> = [_]
<primer carácter> = <letra> | <guión bajo>
<otro carácter> = <letra> | <dígito> | <guión bajo>
<identificador> = <primer carácter> <otro carácter>

20090411
14 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

Ejemplo 58
Se presenta otra situación real, más desafiante que la del ejemplo anterior: las constantes enteras (sin signo) en ANSI
C. Estas constantes pueden estar escritas en base 10 (decimales), en base 16 (hexadecimales) o en base 8 (octales).
Las constantes enteras decimales comienzan con un dígito decimal distinto de 0 (es decir: entre 1 y 9), que puede
estar seguido de una secuencia de dígitos decimales (0 a 9); por ejemplo: 12, 4537600, 8.
Las constantes enteras hexadecimales comienzan con un prefijo 0x o 0X, seguido de uno o más dígitos
hexadecimales; estos dígitos pueden ser numéricos (0 a 9), o alfabéticos (desde la letra a hasta la letra f, tanto
minúscula como mayúscula); por ejemplo: 0x249, 0XaA, 0xF2.
Las constantes enteras octales deben comenzar con un 0 (cero), que puede estar seguido por dígitos octales (0 a 7);
por ejemplo: 0, 01276.
Además, cualquiera de estas constantes puede terminar con un sufijo entero, formado por una o dos letras que
modifican la forma de representación interna de la constante. Este sufijo puede estar integrado por la letra U
(mayúscula o minúscula) para indicar unsigned (sin signo), y/o por la letra L (mayúscula o minúscula) para que la
constante sea representada como long; por ejemplo: 12U, 0xA7L, 0123uL.

La definición regular para este lenguaje de “Las constantes enteras en ANSI C”, puede ser escrita de la siguiente
manera:

<sufijo U> = u | U
<sufijo L> = l | L
<sufijo entero> = <sufijo U> | <sufijo L> | <sufijo U> <sufijo L> | <sufijo L> <sufijo U>
<dígito decimal> = [0-9]
<dígito decimal no nulo> = [19]
<dígito hexadecimal> = [09afAF]
<dígito octal> = [07]
<prefijo hexadecimal> = 0x | 0X
<constante decimal> = <dígito decimal no nulo> <dígito decimal>
<constante hexadecimal> = <prefijo hexadecimal> <dígito hexadecimal>+
<constante octal> = 0 <dígito octal>
<constante incompleta> = <constante decimal> | <constante hexadecimal> | <constante octal>
<constante entera sin signo> = <constante incompleta> <sufijo entero>?

4.9 RESUMEN
LA ER COMO REPRESENTACIÓN DE UN LR
OPERADORES “ESTRELLA”, CONCATENACIÓN Y UNIÓN
PROPIEDADES DEL OPERADOR “ESTRELLA”
PRECEDENCIA DE LOS 3 OPERADORES BÁSICOS
CORRESPONDENCIA ENTRE ER Y LR
LA ER 
CASOS EN QUE LA CONCATENACIÓN ES CONMUTATIVA
CONCATENACIÓN A IZQUIERDA Y A DERECHA
FACTORIZACIÓN A IZQUIERDA Y A DERECHA
ERs EQUIVALENTES
OPERADOR POTENCIA
OPERADOR “CLAUSURA POSITIVA”
LA EXPRESIÓN REGULAR UNIVERSAL (ERU)
APLICACIÓN DE LA ERU COMO SUB-EXPRESIÓN
CORRESPONDENCIA ENTRE ERs y LRs
OPERACIONES SOBRE LENGUAJES REGULARES
EXPRESIONES REGULARES Y LENGUAJE DE PROGRAMACIÓN
DEFINICIÓN FORMAL DE LAS ERs
EQUIVALENCIAS ÚTILES ENTRE ERs
EXPRESIONES REGULARES EXTENDIDAS

20090411
15 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

METALENGUAJE
METACARACTERES
DEFINICIÓN REGULAR

4.10 EJERCICIOS
(1) Describa, mediante una frase, al lenguaje representado por la ER ab10(a + b)6.
(2) Explique por qué las ERs a* y a+ no son equivalentes.
(3) Verifique si el lenguaje asociado a la expresión a+ es un subconjunto del lenguaje asociado a la ER a*.
(4) Describa, mediante una frase, al LR representado por la ER a+b+ y escriba sus tres palabras de menor longitud.
(5) Describa, mediante una frase, al LR representado por la ER a+a y escriba sus tres palabras de menor longitud.
(6) Compruebe que la ER a* + b* representa un LR que es un subconjunto del LR representado por la ER a*b*.
(7) Escriba una ER que represente a “Todas las palabras sobre el alfabeto {0,1} que tienen exactamente tres 0s”.
(8) Compruebe que la ER a* + b* no representa al mismo lenguaje que (a + b)*.
(9) Explique la diferencia que existe entre a*b*, (ab*)* y (a*b)*. Escriba las palabras comunes a los tres LRs.
(10) Describa, mediante una frase, al lenguaje representado por la ER ab* + (ba)*.
(11) Escriba una ER que represente al lenguaje “Todas las palabras sobre el alfabeto {0, 1} que comienzan con un 1
y terminan con un 0”.
(12) Escriba una ER que represente al lenguaje “Todos los números binarios que comienzan con una cantidad impar
de 1s o que solo tienen 1s”.
(13) Escriba una ER que represente al lenguaje “Todas las palabras sobre el alfabeto {a, b, c} que comienzan con aa
y terminan con cc, o que comienzan con un número impar de bes, o que solo tienen ces”.
(14) Escriba una ER que represente al lenguaje “Todas las palabras sobre el alfabeto {a, b, c} que terminan con
doble letra, o que comienzan con a y tienen un número impar de aes en total”.
(15) Escriba una ER que denote el lenguaje “Todos los números binarios que terminan con doble 1, o que terminan
con un triple 0, o que comienzan con una cantidad de 1s que es múltiplo de cuatro y terminan con 010.
(16) Escriba una Definición Regular que represente al lenguaje de comentarios en C.
(17) Escriba una Definición Regular que represente al lenguaje de los números reales en C (reales en punto fijo y
reales en punto flotante, sin signo).
(18) Escriba una Definición Regular que represente al lenguaje “Todas las palabras sobre {a, b} que terminan con
abb, o que comienzan con ba y terminan con bba”.

20090411
16 SSL – Capítulo 4 - marzo 2009 Jorge Muchnik

CAPÍTULO 4 – EJERCICIOS – RESOLUCIONES POSIBLES

4.2 EJERCICIOS
(1) ER = a (bb + bbb) = abb + abbb
(2) Sea ∑ = {a, b}. Entonces, ER = a (a+b)3 b
(3) Sea ∑ = {a, b}. Entonces, ER = ε + (aa+bb) (a+b) (aa+bb)
(4) En la 1º ER: 1(0+1)(0+1)1 = (10+11)(01+11) = 10(01+11) + 11(01+11) =
1001+1011+1101+1111, que es igual a la 2º ER. Por lo tanto, son equivalentes.
(5) “Todas las palabras de longitud 4 sobre ∑ = {0, 1}, que comienzan con un 1 y
terminan con otro 1”.
(6) L = {, aaa, aab, abb, aba, bbb, bba, baa, bab}
(7) ER = 10 (11+011+) 01

Ejemplo 27 - Ejercicio relacionado


La ER a*b* representa al LR {anbt / n ≥ 0, t ≥ 0}. Este lenguaje contiene la palabra
vacía (cuando n y t son 0), todas las palabras formadas solo por aes (cuando t es 0),
todas las palabras formadas solo por bes (cuando n es 0) y todas las palabras
formadas por una secuencia de aes concatenada con una secuencia de bes (cuando n y t
son distintos de 0). Como a*+b* representa el LR formado por la palabra vacía,
palabras que solo tienen aes y palabras que solo tienen bes, entonces el LR que
representa esta ER es un subconjunto del anterior.

Ejemplo 37 - Ejercicio relacionado


Sean los LRs representados por las siguientes ERs:
ER1 = (a+b)* a (a+b)* a (a+b)*
ER2 = b*ab*a (a+b)*
ER3 = (a+b)* ab*ab*
ER4 = b*a (a+b)* ab*

En un primer análisis, encontramos que:


1) Los 4 LRs son infinitos;
2) La palabra de menor longitud representada por las 4 ERs es aa;
3) Todas las palabras pueden comenzar con aes o con bes;
4) La subexpresión (a+b)* no es distributiva.
Esto no es suficiente para probar una equivalencia que se ve muy compleja.
Necesitamos un algoritmo más preciso para resolver este problema. Lo encontraremos
cuando veamos, en capítulos posteriores, el AFD mínimo.

4.10 EJERCICIOS (RESOLUCIONES SELECCIONADAS)


(2) Porque una representa la palabra vacía y la otra no.
(5) “Todas las palabras sobre ∑ = {a} formadas por una secuencia de dos o más aes”.
Las tres palabras de menor longitud son: aa, aaa y aaaa.
(7) ER = 1*01*01*01*
(12) ER = 1(11)* + 1(11)*0(0+1)* + 1+
(13) ER = aa (a+b+c)* cc + b(bb)* + b(bb)* (a+c)(a+b+c)* + c+
(15) ER = (11)+ + (0+1)*0(11)+ + (000)+ + (0+1)*1(000)+ + (1111)+(0+1)*010
(16) Un comentario en ANSI C es una secuencia de caracteres que comienza con /* y
termina con */. Supongamos, para simplificar, que:
a) el comentario puede ser vacío, y
b) los caracteres que estén entre los dos delimitadores mencionados solo pueden ser
letras y/o dígitos.
Entonces, una Definición Regular es:

<letra> = [a-zA-Z]
<dígito> = [0-9]
<comentario> = /\* (<letra>+<dígito>)* \*/

20090411

S-ar putea să vă placă și