La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Lenguajes y Expresiones Regulares

Presentaciones similares


Presentación del tema: "Lenguajes y Expresiones Regulares"— Transcripción de la presentación:

1 Lenguajes y Expresiones Regulares

2 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.

3 ...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 no-vacías que pueden ser formadas con letras de , es decir, + = *  {}. Ejercicio en clase: Sea  = {a, b, c}. Obtener 0, 1, 2 y 3.

4 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.

5 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.

6 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.

7 ... 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.

8 …Ejemplos Sea L el lenguaje sobre el alfabeto  = {0, 1} definido recursivamente por   L Si u  L entonces 0u y 0u1  L. 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

9 …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 .   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.

10 …Ejemplos Defina recursivamente al lenguaje L sobre el alfabeto  = {a, b} que consiste de las palabras que tienen más as que bs. 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.

11 ¿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.

12 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*

13 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}

14 Ejemplos de Cerradura de Kleene
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?

15 Contraejemplo L = {0, 00} L0 = {} L1 = {0, 00} L2 = {00, 000, 0000}
L* es la palabra vacía  y todas las palabras finitas formadas con ceros.

16 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 de 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.

17 Conjuntos regulares Un conjunto es regular si
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.

18 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}

19 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.

20 Ejemplos Lenguaje Expresión regular {}  {0} 0 {001} = {0}{0}{1} 001
{}  {0} {001} = {0}{0}{1} {0, 1} = {0}{1} {0, 10} = {0}{10} {1, }{001} (1 + )001 {110}*{0, 1} (110)*(0 + 1) {1}*{10} *10 {10, 111, 11010}* ( )* {0, 10}*({11}*{001, }) (0 + 10)*((11)* ) ( )* ((0 + 1)(0 + 1))*

21 ...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, ...

22 Ejemplo El conjunto {bawab | w  {a, b}*} es regular sobre {a, b} Demostración: Conjunto Expresión Justificación 1. {a} a Base 2. {b} b Base 3. {a}{b}={ab} ab Concatenación de 1 y 2 4. {a}  {b}={a,b} a+b Unión de 1 y 2 5. {b}{a}={ba} ba Concatenación de 2 y 1 6. {a,b}* (a+b)* Cerradura Kleene de 4 7. {ba}{a,b}* ba(a+b)* Concatenación de 5 y 6 8. {ba}{a,b}*{ab} ba(a+b)*ab Concatenación de 7 y 3

23 Lenguajes regulares Definición: Un lenguaje es regular si se puede representar por una expresión regular o conjunto regular.

24 ...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)*

25 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)

26 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.

27 Identidades u = u =  u = u = u * =  * =  u+v = v+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*

28 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: ( )( )( )( )( )( ) = ( )6

29 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

30 Pregunta ¿Hay lenguajes para los que no existe una expresión regular que los represente? ¡¡ Sí !!

31 Ejemplo de un lenguaje no regular
{anbn | n  0}

32 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.


Descargar ppt "Lenguajes y Expresiones Regulares"

Presentaciones similares


Anuncios Google