Clase 3 Expresiones Regulares

Transcripción

Clase 3 Expresiones Regulares
1
Clase 3 SSL
EXPRESIONES REGULARES
Para REPRESENTAR a los Lenguajes Regulares.
Se construyen utilizando los caracteres del alfabeto sobre el cual se define el lenguaje, el símbolo  y
operadores especiales. Concatenación (), que ordena la ubicación de ciertos caracteres, unión (+),
que representa una elección entre caracteres o grupos de caracteres y Clausura *
La Expresión Regular a representa al Lenguaje Regular que contiene solamente la palabra a, es decir:
L = {a}.
La Expresión Regular  representa al Lenguaje Regular que solo contiene la palabra vacía: L = {}.
La Expresión Regular ab representa el LR de una sola palabra, L = {ab}.
La ER a+ba, describe la posibilidad de elegir entre dos palabras: la palabra a o la palabra ba. L= {a,
ba}.
La operación de “unión” es conmutativa. Por consiguiente, las ERs a+ba y ba+a representan el
mismo LR.
La ER ab + , representa L = {, ab}.
La factorización
La ER abb+aab tiene el prefijo a y el sufijo b se puede “factorizar a izquierda y a derecha”,
obteniendo, así, la ER a(b+a)b.
La ER abbaac+abac+abacccac. se puede factorizar y reescribir ab(ba++accc)ac.
Dos Expresiones Regulares son EQUIVALENTES si representan el mismo Lenguaje Regular.
Las ERs a+b y b+a son equivalentes porque ambas representan al LR {a, b}.
Las ERs a(a+b) y (a+b)a no son equivalentes.
EL OPERADOR POTENCIA
La ER +(a+b)3 representa al LR: “La palabra vacía y todas las palabras de tres caracteres sobre el
alfabeto {a, b}”.
El lenguaje “Todas las palabras de longitud 27 sobre el alfabeto {a, b} y que comienzan con 25 aes” se
puede representar fácilmente mediante la siguiente ER: a25(a+b)2.
No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo:
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
EXPRESIONES REGULARES PARA LENGUAJES REGULARES INFINITOS
El operador estrella de Kleene o clausura de Kleene genera la palabra vacía y todas las palabras que
se forman con la repetición, de su operando, un número de veces a elección.
La ER a*, que corresponde a la expresión infinita  + a + aa + aaa + aaaa + ... L = {an / n  0},
La ER aa* corresponde a la expresión infinita a + aa + aaa + aaaa + ..., L = {an / n  1},
que podemos describir mediante la frase: “Todas las palabras formadas solo por aes”.
2
Clase 3 SSL
Los operadores “estrella de Kleene”, concatenación y unión son los tres operadores ORIGINALES e
indispensables para construir cualquier ER.
Un nuevo operador “no básico”, es clausura positiva, se representa mediante un símbolo + así: a+.
Se utiliza para simplificar la escritura de ERs como la del Ejemplo aa* o a*a.
Las siguientes ERs son equivalentes:
 = * = +.
a*a* = a*;
a+ = aa* = a*a = aa*a* = a+a* = a*a+ = a*a*aa*, entre otras.
(+a)* = (+a)+ = a*
LA EXPRESIÓN REGULAR UNIVERSAL Y SU APLICACIÓN
Representa al Lenguaje Universal sobre un alfabeto dado.
Ejemplo 25
Si el alfabeto es {a,b}, la ERU es (a+b)*.
Si el alfabeto es {0,1}, la ERU es (0+1)*.
Si el alfabeto es {a,b,c}, la ERU es (a+b+c)*.
Ejemplo
Todas las palabras sobre el alfabeto {a,b} que comienzan con a”, ER: a(a+b)*.
Todas las palabras que comienzan con a, sobre el alfabeto {a,b,c}”, a(a+b+c)*.
Sea  = {a,b} y sea el LR: “Todas las palabras que comienzan con una a y terminan con otra a”. ER
a(a+b)*a.
“Todas las palabras que terminan con aa o con bb” se representa mediante la ER (a+b)*(aa+bb).
 = {a, b}, el LR “Todas las palabras que contienen como mínimo dos aes” la ER
(a+b)*a(a+b)*a(a+b)*.
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.
Afirmamos entonces: dos ERs son equivalentes si representan el mismo LR.
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)*.
O bien por esta otra ER: (a+b)*(a(a+b)*b+b(a+b)*a)(a+b)*.
OPERACIONES SOBRE LENGUAJES REGULARES
LA UNIÓN DE LENGUAJES REGULARES
Sean L1 y L2 dos LRs. Entonces L1  L2, es un LR 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.
Si L1 es representado por a*b y L2 es representado por la a+b*, L1  L2 es representado por a*b +
a+b*.
LA CONCATENACIÓN DE LENGUAJES REGULARES
La concatenación de dos LRs, L1L2 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.
3
Clase 3 SSL
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.
Si L1 es representado por a*b y L2 por a+b*, L1L2 es representada por la ER a*b(a+b*).
LA CLAUSURA DE KLEENE DE UN LENGUAJE REGULAR
Si L es un LR, su clausura de Kleene, L*, es un LR infinito, en general formado por: la palabra vacía,
las palabras de L y todas aquellas palabras que se obtienen concatenando palabras de L, un número
arbitrario de veces. Ssalvo una excepción, esta se produce si el LR está formado solo por la palabra
vacía.
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*.
Si L es representado por a*b, L* es representado por (a*b)*.
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+. Si L es representado por a*b, L+ es representado por
(a*b)+. La clausura positiva de un LR contiene a la palabra vacía solo si ésta pertenece al lenguaje
original.
EL COMPLEMENTO DE UN LENGUAJE REGULAR
El complemento de un LR con respecto al Lenguaje Universal, Lc, es un LR que está formado por
todas aquellas palabras que no pertenecen al lenguaje original.
Si L es representado por la ER (a+b)+, Lc solo contiene a la palabra vacía.
Si L es a(a+b)* entonces Lc es b(a+b)* + .
No existen operadores oficiales para describir el complemento de una ER
LA INTERSECCIÓN DE DOS LENGUAJES REGULARES
La intersección de dos LRs es un LR constituido por todas aquellas palabras que pertenecen a los dos
lenguajes dados.
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].
No existen operadores para describir la intersección de dos ERs.
EXPRESIONES REGULARES Y LENGUAJES DE PROGRAMACIÓN
IDENTIFICADOR puede representarse mediante la ER L(L+D)*.
CONSTANTE REAL ER D+.D*.
Sea un LP que solo tiene tres PALABRAS RESERVADAS: if, else y while. ER if+else+while.
DEFINICIÓN FORMAL DE LAS EXPRESIONES REGULARES
operadores básicos unión (+), concatenación () y clausura de Kleene (*), y se definen formalmente
de la siguiente manera recursiva:
ø es una ER que representa al LR vacío (sin palabras).
 es una ER que representa al LR que solo contiene la palabra vacía: {}.
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.
4
Clase 3 SSL
Una cadena s es una ER s que representa a un LR que solo contiene la palabra s. .
Si R1 y R2 son ERs, entonces R1 + R2 es ER
Si R1 y R2 son ERs, entonces R1  R2 es ER
Si R1 es una ER, entonces R1* es una ER.
Si R1 es una ER, entonces (R1) es una ER. .
Si R1 es una ER, entonces R1+ es una ER.
Si R1 es una ER, entonces R1n (con n  0 y entero) es una ER.
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.
5
Clase 3 SSL
EXPRESIONES REGULARES EXTENDIDAS
Metacaracteres
. (punto)
Explicación y Ejemplo
Se corresponde con cualquier carácter, excepto el “fin de línea” (\n). Ejemplo: a.a
es cualquier cadena de tres caracteres en la que el primer y el tercer caracteres
son a
(barra Operador unión de ERs. Ejemplo: ab|b representa la ER ab+b
|
vertical)
[ ] (corchetes)
[]
{ } (llaves)
{,}
Clase de caracteres. Ejemplo: [abx] representa la ER a+b+x
Clase de caracteres en un intervalo. Ejemplo 1: [ad] representa la ER a+b+c+d.
Ejemplo 2:
[0-9 a-z] representa a cualquier dígito decimal o cualquier letra minúscula (del
alfabeto inglés)
Operador potencia, repetición determinada del patrón que lo precede como
operando.
Ejemplo 1: a{3} representa la ER aaa. Ejemplo 2: (ab){4} = abababab
Operador potencia extendido a un intervalo. Ejemplo: a{1,3} representa la ER
a+aa+aaa
?
Cero o una ocurrencia de la ER que lo precede. Ejemplo: a? representa la ER a+

Operador clausura de Kleene, cero o más ocurrencias de la ER que lo precede.
Ejemplo: a representa la ER a*
Operador clausura positiva, una o más ocurrencias de la ER que lo precede.
Ejemplo: a+ representa la ER a+
Agrupa una ER. Ejemplo: ((ab)? | b)+ representa la ER (ab++b)+
+
()
A esta tabla le agregaremos la utilización del carácter \ (barra invertida) para representar caracteres
“no imprimibles”.
[0-9]\.[0-9]+
\+|\)?[0-9]+
Analizando la Tabla de Operadores de arriba, se verifica algo muy importante: algunos los
operadores actúan sobre caracteres, como [ ], mientras que otros operan sobre ERs, como el
operador +.
6
Clase 3 SSL
Ejercicios
Sea la ER abbaacc+abac+abbacccacc. Reescriba esta ER, factorizándola con el prefijo y el sufijo
comunes de mayor longitud.
Escriba la ER de el lenguaje “Todas las palabras con dos caracteres sobre el alfabeto {a, b}”
Determine si las ERs aa+ab+ba+bb = a(a+b)+b(a+b) = (a+b)(a+b). Son equivalentes
Determine si las siguientes ERs son equivalentes: aa+ab+ba, a(a+b)+ba y ab+ba+aa.
Escriba una ER que represente al LR: “Todas las palabras de longitud 27 sobre el alfabeto {a, b}”.
Escriba una ER que represente al LR: “Todas las palabras de longitud 25 que comienzan con una a y
terminan con una b”.
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”.
Compruebe que las ERs 1(0+1)(0+1)1 y 1001+1011+1101+1111 son equivalentes.
Escriba, por extensión, el LR +(a+b)3.
Sea la ER a+ba+. Describa por comprensión el LR representado.
La ER (ab)* parece equivalente a la ER a*b*, pero no lo es, Justifique
Sea el LR representado por la (ab)*. Escriba las cuatro palabras de menor longitud.
Sea el LR representado por la ER a* + b3. Escriba las 5 palabras de menor longitud.
La ER b*ab*ab* representa al lenguaje “Todas las palabras sobre el alfabeto {a, b} con exactamente
dos aes”?. Justifique.
Dada la ER (b*ab*ab*)*, escriba las 5 palabras de menor longitud.
Dada la ER (1+0)1* escriba por comprensión el lenguaje que representa.
Construya la ER que representa al LR: “Todas las palabras que comienzan con una secuencia de dos o
más 1s seguida de un 0 o que comienzan con una secuencia de dos o más 0s seguida de un 1”.
Sea  = {a,b,c}, “Todas las palabras de longitud mayor o igual que 6, que terminan con aa o con bb”.
Escriba una ER que lo represente.
Sea el LR: “Todas las palabras sobre el alfabeto {a,b} que comienzan con a y tienen longitud mayor o
igual que 2”. Escriba una ER que lo represente.
Sean los LRs representados por las ERs a*b y (a+b)*. Escriba la ER que representa a la
concatenación de estos dos LRs y las 5 palabras de menor longitud.
Sea L es representado por la ER ab+. Escriba las 5 palabras de menor longitud de L*.
Sea el LR representado por la ER a(a+b)*. Escriba las 5 palabras de menor longitud de su lenguaje
complemento.
Sea el alfabeto {a,b}. Sea L1 representado por la ER aa(a+b)*b y sea L2 representado por la ER
(a+b)*ab. Escriba la ER que representa la lenguaje L1  L2.
Escriba una ER que represente el LR de los números enteros en base 10, con y sin signo.
Escriba una ER que represente al LR de las constantes reales que pueden ser de dos tipos: a) una
secuencia de dígitos no obligatoria, seguida de un punto, seguido de una secuencia de dígitos
obligatoria; o b) un solo dígito, seguido de un punto, seguido de dos dígitos.
Describa, mediante una frase, el lenguaje representado por la ER ab10(a + b)6.
Explique por qué las ERs (ab)* y (ab)+ no son equivalentes.
Describa, mediante una frase, el LR representado por la ER a+b+ y escriba sus tres palabras de menor
longitud.
Escriba una ER que represente a “Todas las palabras sobre el alfabeto {0,1} que tienen exactamente
tres 0s”.
Escriba un programa Lex que detecte e imprima todas las palabras del LR descripto en el ejercicio
anterior.
Escriba una ER que represente al lenguaje “Todos los números binarios que comienzan con una
cantidad impar de 1s o que solo tienen 0s”.
7
Clase 3 SSL
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”.
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”.

Documentos relacionados

Clase 3 Expresiones Regulares

Clase 3 Expresiones Regulares terminan con una b”. 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”. Compruebe que las ERs ...

Más detalles