Lenguajes
y
Expresiones Regulares
1
Definiciones básicas
• Alfabeto: conjunto no vacío de símbolos. Es usual utilizar  para
denotar un alfabeto.
Ejemplos: {0, 1}, {a, b, c}, {0, 11}, {(0, 0), (0, 1), (1, 0), (1, 1)}.
• Palabra o cadena: es una secuencia de símbolos del alfabeto,es
decir, s = a1a2...an, donde ai  .
Por lo general se utilizan las primeras letras del alfabeto, a, b, c, d, e,
para denotar símbolos del alfabeto y las últimas letras, s, t, u, v, w, x,
y, z, para denotar palabras.
• Longitud de una palabra: es el número de símbolos en s. Se
denota por |s|.
• Palabra nula o vacía : es la palabra de longitud cero. Algunos
autores utilizan  para denotarla.
• Concatenación: si s = a1a2...an y t = b1b2...bn, entonces
st = a1a2...anb1b2...bn; s2 = ss; s3 = sss. La concatenación es asociativa,
es decir, s(tu) = (st)u, pero no es conmutativa.
2
...Definiciones básicas
Dado un alfabeto , definimos:
• k = {x | x es una palabra sobre  y |x| = k}
Ejemplo:  = {0, 1}
– 0 ={}
– 1 ={0, 1}
– 2 ={00, 01, 10, 11}
– 3 ={000, 001, 010, 011, 100, 101, 110, 111}
– ...
• * = 0  1  2  3 ... es el conjunto de todas las palabras
que pueden ser formadas con letras del alfabeto , incluyendo a
. A * se le llama la Cerradura de Kleene de .
• + = 1  2  3 ... es el conjunto de todas las palabras novacías que pueden ser formadas con letras de , es decir,
+ = *  {}.
• Ejercicio en clase: Sea  = {a, b, c}. Obtener 0, 1, 2 y 3.
3
Definición recursiva de *
• Base:   *
• Paso recursivo: si w  * y a  , entonces
wa  *.
• Cerradura: w pertenece a * sólo si puede ser
obtenida a partir de  mediante un número finito
de aplicaciones del paso recursivo.
• Nota: definiciones recursivas son una buena
herramienta para definir las palabras o cadenas
que componen un lenguaje.
4
Lenguajes
• Lenguaje sobre un alfabeto  es un conjunto
finito o infinito de palabras sobre , es decir, es un
subconjunto de *.
• Lenguajes interesantes no consisten de conjuntos
arbitrarios de cadenas sino de cadenas que cumplen
ciertas condiciones las cuales definen la sintaxis del
lenguaje.
• Un lenguaje finito puede ser definido por extensión,
a menos que sea “demasiado extenso”.
• Lenguajes infinitos con requerimientos sintácticos
simples pueden definirse recursivamente.
5
Ejemplos
• Lenguaje L sobre  ={0, 1} que consta de cadenas que
terminan en 1
– Base: 1  L
– Paso recursivo: si u  L y a  , entonces au  L.
– Cerradura: una cadena u pertenece a L sólo si puede ser obtenida a
partir del elemento base mediante un número finito de aplicaciones
del paso recursivo.
• Lenguaje L sobre  ={a, b} que consta de cadenas que
inician con a y tienen longitud par
– Base: aa, ab  L
– Paso recursivo: si u  L, entonces uaa, uab, uba, ubb  L.
– Cerradura: una cadena u pertenece a L sólo si puede ser obtenida a
partir de los elementos base mediante un número finito de
aplicaciones del paso recursivo.
6
... Ejemplos
• Lenguaje L sobre  ={a, b} que consta de
cadenas en las que cada ocurrencia de b es
inmediatamente precedida por una a. Por
ejemplo , a, abaab están en L pero no así bb,
bab, abb.
– Base:   L
– Paso recursivo: si u  L, entonces ua y uab  L.
– Cerradura: una cadena u pertenece a L sólo si puede ser
obtenida a partir de los elementos base mediante un
número finito de aplicaciones del paso recursivo.
7
…Ejemplos
•
Sea L el lenguaje sobre el alfabeto  = {0, 1}
definido recursivamente por
1.   L
2. Si u  L entonces 0u y 0u1  L.
3. Cualquier elemento en L puede ser obtenido a
partir de la regla 1. y utilizando la regla 2. un
número finito de veces.
– Defina L por intención.
L = {0m1n | m  n  0
8
…Ejemplos: Palíndromos
•
Palíndromos: palabra o frase que se lee igual de derecha
a izquierda, que de izquierda a derecha
–
–
–
•
anilina
dábale arroz a la zorra el abad
anita lava la tina
Defina recursivamente al conjunto P que consiste de
todos los palíndromos sobre el alfabeto .
1.
2.
3.
P
Si u  P entonces aua  P para cualquier a  .
Cualquier palíndromo sobre {a, b} puede ser obtenido a partir de
la regla 1. y utilizando la regla 2. un número finito de veces.
9
…Ejemplos
•
Defina recursivamente al lenguaje L sobre el
alfabeto  = {a, b} que consiste de las
palabras que tienen más as que bs.
1.
2.
3.
4.
aL
Si u  L entonces au  P.
Si u y v  L entonces buv, ubv y uvb  P.
Cualquier palabra en L puede ser obtenido a partir
de la regla 1. y utilizando las reglas 2. y 3. un
número finito de veces.
10
¿Es suficiente la recursividad?
• Hay muchos lenguajes que se pueden definir
recursivamente, sin embargo, hay muchos otros,
como lenguajes computacionales o matemáticos,
cuyos requerimientos sintácticos no pueden ser
definidos de manera recursiva.
• Operaciones de conjuntos se pueden aplicar a
lenguajes simples para definir lenguajes más
complejos.
• Otro enfoque para definir lenguajes “interesantes”
es especificando un procedimiento algorítmico
que reconoce si una palabra pertenece o no al
lenguaje.
11
Concatenación de lenguajes
• L1L2 = {w | w = xy, x  L1 y y  L2}
• Para un lenguaje L:
–
–
–
–
–
L0 = {}
L1 = L
L2 = L L
L3 = L L L
...
– L* = L0  L1  L2  L3 ... (Cerradura de Kleene)
– L+ = L1  L2  L3 ... = LL*
12
Ejemplo de concatenación
• X = {a, b, c}; Y = {abb, ba}
–
–
–
–
–
XY ={aabb, aba, babb, bba, cabb, cba}
X0 = {}
X1 = {a, b, c}
X2 = XX = {aa, ab, ac, ba, bb, bc, ca, cb, cc}
X3 = X2X = {aaa, aab, aac, aba, abb, abc, aca,
acb, acc, baa, bab, bac, bba, bbb, bbc, bca,
bcb, bcc, caa, cab, cac, cba, cbb, cbc, cca, ccb,
ccc}
13
Ejemplos de Cerradura de Kleene
• L = {0, 11}
–
–
–
–
–
–
–
–
L0 = {}
L1 = {0, 11}
L2 = {00, 011, 110, 1111}
L3 = {000, 0011, 0110, 01111, 1100, 11011, 11110,
111111}
L4 = {0000, 00011, 00110, 001111, 01100, 011011,
011110, 0111111, 11000, 110011, 110110, 1101111,
111100, 1111011, 1111110, 11111111}
L* son todas las que se pueden formar concatenando
cualquier número de veces (excepto ) palabras de L.
Las palabras pueden ser iguales o distintas.
¿Cuántos elementos tiene Ln}: 2n
Independientemente del lenguaje, ¿Ln tiene siempre 2n
elementos?
14
Contraejemplo
• L = {0, 00}
–
–
–
–
–
–
L0 = {}
L1 = {0, 00}
L2 = {00, 000, 0000}
L3 = {000, 0000, 00000, 000000}
L4 = {0000, 00000, 000000, 0000000, 00000000}
L* es la palabra vacía  y todas las palabras finitas
formadas con ceros.
15
Más ejemplos
• L = {a, b}*{bb} {a, b}*
– Consiste de las cadenas sobre {a, b} que contienen la subcadena bb.
• Lenguaje que consiste de todas las cadenas que empiezan
con aa o terminan con bb.
– L = {aa}{a, b}*  {a, b}*{bb}
• L1 = {bb} y L2 = {, bb, bbbb}. L1* = ¿?, L2* = ¿?
– Tanto L1* como L2* consisten de cadenas que tienen un número par d
b’s.
• {aa, bb, ab, ba}*
– Consiste de todas las cadenas sobre {a, b} de longitud par.
• {a, b}*- {aa, bb, ab, ba}*
– Es el lenguaje que consiste de las cadenas de longitud non.
– ¿Es regular este lenguaje?
– Este lenguaje también está dado por {a, b}{aa, bb, ab, ba}*,por lo
tanto el lenguaje sí es regular.
16
Conjuntos regulares
•
Un conjunto es regular si
1.
2.
•
Es el conjunto vacío, , ó el conjunto cuyo elemento es la palabra vacía,
{}, ó es un subconjunto simple (sólo un elemento) del alfabeto.er
generado a partir
Puede ser generado a partir de  ó de {} ó de un subconjunto simple
utilizando las operaciones de unión, concatenación y cerradura de
Kleene.
Nota: no se puede utilizar la diferencia de conjuntos.
Definición recursiva de conjunto regular.
Sea  un alfabeto. Los conjuntos regulares sobre  se definen
recursivamente de la siguiente manera:
–
–
–
Base: , {} y {a}, para toda a  , son conjuntos regulares sobre .
Paso recursivo: Si X y Y son conjuntos regulares sobre , entonces los
conjuntos X  Y, XY y X* también lo son.
Cerradura: X es un conjunto regular sobre  sólo si puede ser obtenido a
partir de los elementos base mediante un número finito de aplicaciones
del paso recursivo.
17
Ejemplos de conjuntos regulares
• {a, b}*{bb}{a, b}* es regular sobre {a, b}
– Consiste del conjunto de cadenas que contienen
a la subcadena bb.
• El conjunto de cadenas que empiezan y
terminan con una a y contienen al menos
una b es regular sobre {a, b}.
– {a}{a, b}*{b}{a, b}*{a}
18
Expresiones regulares
• Las expresiones regulares se utilizan para abreviar la
descripción de conjuntos regulares.
– El conjunto regular {a} es representado por a.
– Las operaciones de unión, concatenación y cerradura de Kleene
son denotadas por +, yuxtaposición y *, respectivamente.
• Definición recursiva de una expresión regular.
Sea  un alfabeto. Las expresiones regulares sobre  se
definen recursivamente de la siguiente manera:
– Base: ,  y a, para toda a  , son expresiones regulares sobre
.
– Paso recursivo: Si u y v son expresiones regulares sobre ,
entonces las expresiones (u+v), (uv) y (u*) también lo son y
representan a los conjuntos {u}  {v}, {u}{v} y {u}*,
respectivamente.
– Cerradura: u es una expresión regular sobre  sólo si puede ser
obtenido a partir de los elementos base mediante un número finito
de aplicaciones del paso recursivo.
19
Ejemplos
Lenguaje
Expresión regular
{}
{0}
{001} = {0}{0}{1}
{0, 1} = {0}{1}
{0, 10} = {0}{10}
{1, }{001}
{110}*{0, 1}
{1}*{10}
{10, 111, 11010}*
{0, 10}*({11}*{001, })
(00 + 01 + 10 + 11)*

0
001
0+1
0 + 10
(1 + )001
(110)*(0 + 1)
1*10
(10 + 111 + 11010)*
(0 + 10)*((11)* + 001 + )
((0 + 1)(0 + 1))*
20
...Expresiones regulares
• Tomando en cuenta que la unión y la concatenación son
asociativas, además conviniendo en que la precedencia u
orden de ejecución de las operaciones está dada por:
–
–
–
–
Paréntesis
Cerradura de Kleene
Concatenación
Unión
las expresiones se pueden simplificar aún más
reduciendo el número de paréntesis.
– {a, b}*{bb}{a, b}* = (a + b)*bb(a + b)*
– {a}{a, b}*{b}{a, b}*{a} = a(a + b)*b(a + b)*a
• Notación
– u+ = uu*
– u2 = uu, u3 = u2u, ...
21
Ejemplo
• El conjunto {bawab | w  {a, b}*} es regular sobre {a, b}
Demostración:
Conjunto
1. {a}
2. {b}
3. {a}{b}={ab}
4. {a}  {b}={a,b}
5. {b}{a}={ba}
6. {a,b}*
7. {ba}{a,b}*
8. {ba}{a,b}*{ab}
Expresión
a
b
ab
a+b
ba
(a+b)*
ba(a+b)*
ba(a+b)*ab
Justificación
Base
Base
Concatenación de 1 y 2
Unión de 1 y 2
Concatenación de 2 y 1
Cerradura Kleene de 4
Concatenación de 5 y 6
Concatenación de 7 y 3
22
Lenguajes regulares
• Definición: Un lenguaje es regular si se
puede representar por una expresión regular
o conjunto regular.
23
...Más ejemplos
• (a+b)*aa(a+b)*+(a+b)*bb(a+b)*:
– Representa al conjunto de cadenas sobre {a, b} que contienen a la subcadena
aa o a la subcadena bb o a ambas subcadenas.
• Expresión regular que represente al conjunto de cadenas sobre
{a, b} que contienen exactamente dos b’s:
– a*ba*ba*
• a*ba*b(a+b)*, (a+b)*ba*ba*, (a+b)*b(a+b)*b(a+b)*
– representan al conjunto de cadenas sobre {a, b} que contienen dos o más b’s.
• a*(a*ba*ba*)* y a*(ba*ba*)*
– Representan cadenas con un número par de b’s.
• Expresión regular para el lenguaje sobre {a, b} en cuyas
palabras inmediatamente antes de toda b aparece una a:
– (a+ab)*.
• Expresión regular que representa a las palabras que contienen
exactamente una vez dos b’s contiguas:
– (ba+bc+a+c)*bb(a+c+ab+cb)*
24
Ejercicio en clase
• Escriba una expresión regular para el
lenguaje sobre {0 ,1} que consiste de las
palabras en las que no hay dos símbolos
iguales contiguos, es decir, los 0’s y los 1’s
se alternan.
– (01)* + (10)* + 0(10)* + 1(01)*
– ( + 1)(01)*( + 0)
– ( + 0)(10)*( + 1)
25
Equivalencias
• Una expresión regular define un patrón; una
palabra pertenece al lenguaje definido por esa
expresión regular si y sólo si sigue el patrón.
• Una expresión regular que represente un lenguaje
debe cumplir dos condiciones:
– Correcta: todas las palabras representadas por la
expresión regular deben ser parte del lenguaje.
– Completa: toda palabra del lenguaje debe ser
representada por la expresión regular.
• Concatenación indica orden de los símbolos, la
cerradura de Kleene permite repeticiones y +
indica selección.
• Dos expresiones que representan al mismo
conjunto son llamadas equivalentes.
26
Identidades
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
u = u = 
u = u = u
* = 
* = 
u+v = v+u
u+ = u
u+u = u
u* = u* u* = (u*)*
u(v+w) = uv + uw
(u+v)w = uw+vw
(uv)*u = u(vu)*
(u+v)* = (u*+v)* = u*(u+v)* = (u+vu*)* = (u*v*)* = u*(vu*)* =
(u*v)*u*
u*(u + ) = u*
u*u* = u*
u* + v* = v* + u*
(u*v*)* = (u + v)* = (u + v)*uv(u + v)* + v*u*
27
Ejemplos
• Expresión que representa las cadenas sobre {a, b} que no
contienen la subcadena aa:
– b*(ab+)*+b*(ab+)*a =
b*(ab+)*(+a) =
b*(abb*)*(+a) =
(b+ab)*(+a)
• Expresión regular que representa las cadenas sobre {a, b, c}
que contienen la subcadena bc:
– (a+b+c)*bc(a+b+c)*
• c*(b+ac*)*
– Representa las cadenas que no contienen la subcadena bc.
• Cadenas sobre {0, 1} de longitud igual a 6:
– (0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1) = (0 + 1)6
• Cadenas sobre {0, 1} de longitud mayor o igual a 6:
– (0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1)* = (0 + 1)6(0 + 1)*
• Cadenas sobre {0, 1} de longitud menor o igual a 6:
– (0 + 1 + )(0 + 1 + )(0 + 1 + )(0 + 1 + )(0 + 1 + )(0 + 1 + )
= (0 + 1 + )6
28
Ejercicios en clase
• Obtenga una expresión regular para el conjunto de
palabras sobre {a, b, c} que tienen al menos una a y al
menos una b.
– c*a(a + c)*b(a + b + c)* + c*b(b + c)*a(a + b + c)*
• Obtenga una expresión regular para el lenguaje sobre
{0 , 1} que consiste de las palabras cuyo décimo
símbolo contado de la derecha a la izquierda es un 1.
– (0+1)*1(0+1) (0+1) (0+1) (0+1) (0+1) (0+1) (0+1) (0+1) (0+1)
= (0 + 1)*1(0 + 1)9
29
Pregunta
¿Hay lenguajes para los que no
existe una expresión regular
que los represente?
30
Ejemplo de un lenguaje no regular
n
n
{a b
| n  0}
31
Actividades fuera de clase
• Control de lectura 2: Lenguajes regulares
• Tarea 2: Ejercicios 3.1, 3.2, 3.8, 3.9, 3.10
del texto.
32
Descargar

Lenguajes y Expresiones Regulares