Expresiones Regulares y Gramáticas

23
Lenguajes Formales y Teoría de Autómatas Johanna Dotel 12-0617 Paola Novas 12-0534 Rina Familia

description

Lenguajes Formales y Teoría de Automatas

Transcript of Expresiones Regulares y Gramáticas

Lenguajes Formales y Teoría de

Autómatas

Johanna Dotel 12-0617

Paola Novas 12-0534

Rina Familia

Expresiones Regulares y

Gramáticas

Regulares.

Lenguajes Regulares

Los lenguajes regulares se llaman así porque sus palabras

contienen “regularidades” o repeticiones de los mismos

componentes,

Como por ejemplo en el lenguaje siguiente:

L1 = {ab, abab, ababab, abababab, . . .}

son simplemente repeticiones de “ab” cualquier numero de

veces.

Otros ejemplos…

L2 = {abc, cc, abab, abccc, ababc, . . .}

sus palabras comienzan con repeticiones de “ab”,

seguidas de repeticiones de “c”. definir lenguajes

basados en la idea de repetir esquemas simples.

Esta es la idea básica para formar los lenguajes

Regulares.

los lenguajes finitos son también regulares por definición.

L3 = {anita, lava, la, tina} es regular.

al combinar lenguajes regulares uniéndolos o

concatenándolos, también se obtiene un lenguaje regular.

L1 ∪ L3 = {anita, lava, la, tina, ab, abab, ababab,

abababab, . . .} es regular.

También es regular una concatenacion como :

L3L3 = {anitaanita,anitalava, anitala, anitatina, lavaanita,

lavalava, lavala, lavatina, . . .}1

o Podemos identificar que un lenguaje es regular si cumple con las siguientes condiciones

L es finito;

L es la unión o la concatenación de otros lenguajes regulares R1 y R2, L = R1 ∪ R2 o

L = R1R2 respectivamente.

L es la cerradura de Kleene de algún lenguaje regular, L = R∗lenguaje que contiene todas las cadenas que son posibles de formarsobre

Expresiones Regulares

Sea Σ un alfabeto. El conjunto ER de las expresiones regulares sobre Σ contiene las cadenas en el alfabeto Σ∪ {“∧”, “+”, “•”, “∗”, “(”, “)”, “Φ”} que cumplen con lo siguiente:

“∧” y “Φ” ∈ ER

Si σ ∈ Σ, entonces σ ∈ ER.

Si E1, E2 ∈ ER, entonces “(”E1“+”E2“)” ∈ ER, “(”E1“•”E2“)” ∈ ER, “(”E1“)∗” ∈ ER.

Las comillas “ ” enfatizan el hecho de que estamos definiendo cadenas de texto, no expresiones matemáticas.

ER

Las ER son simplemente formulas cuyo propósito es representar cada

una de ellas un lenguaje. Así, el significado de una ER es

simplemente el lenguaje que ella representa.

Por ejemplo, la ER “Φ” representa el conjunto vacío {}.

Ejemplos.-

Son ER en {a, b, c} las siguientes:

“a”, “((a+b))∗”, “((a•b)•c)”.

No son ER:

“ab”, “((a • b(c)∗)”.

Una palabra “empata” con una expresión regular si es

parte del lenguaje que esta representa.

La palabra vacía ε “empata” con la ER ∧

Una palabra de una letra como “a” empata con una ER

consistente en la misma letra “a”, “b” empata “b”, etc.

Metodología de diseño de las

ER

Al tratar de encontrar una ER para un

lenguaje dado, mientras mas complejo sea

el lenguaje es obvio que resulta mas difícil

encontrar por pura intuición dicha ER. En

estos casos puede ser conveniente trabajar

en forma metódica.

Ejemplo.- Obtener una ER para el lenguaje en el alfabeto {a, b, c} en que las palabras contienen exactamente una vez dos b contiguas. Por ejemplo, las palabras aabb, babba, pertenecen al lenguaje, pero no aaba, abbba ni bbabb.

Para resolver este problema, expresamos primero la estructura de la ER de la manera siguiente:

< contexto1 > bb < contexto2 >

Podemos ver que en esta expresión aparecen directamente las bb que deben estar en la ER, rodeadas por otras dos ER, que son < contexto1 > y < contexto2 >.

El lenguaje de < contexto1 > comprende a las palabras que no tienen bb y además no terminan en b. Esto es equivalente a decir que toda b esta seguida de una a o una c. Esto

quiere decir que la ER de este contexto va ser de la forma:

(. . . b(a + c). . .)∗

donde los detalles que faltan están representados por las “. . .”. Lo que falta por considerar es que puede haber cualquier cantidad de a’s o c’s en el < contexto1 >, por lo que dicho contexto queda como:

(b(a + c) + a + c)∗

Similarmente se puede obtener la expresión para <

contexto2 >, que es (a + c + (a + c)b)∗, por lo que

finalmente la ER del problema es:

(b(a + c) + a + c)∗bb(a + c + (a + c)b)∗

Un importante elemento de metodología -que se aplico en

este ejemplo- consiste en transformar los enunciados de

lenguajes de manera que sean más fácilmente

representables por

ER.

También puede ser ´útil modificar la forma lógica en

que se enuncian los lenguajes. Por ejemplo, el

enunciado “palabras que si empiezan en 00, terminan

en 11”, puede modificarse de la manera siguiente:

“palabras que ya sea no empiezan en 00 o bien

terminan en 11”, utilizando la conocida equivalencia

de lógica P ⇒ Q ≡ ¬P ∨ Q.

Ejemplo.- Obtener una ER que represente el lenguaje

en {a, b} tal que si una palabra contiene la subcadena

aa, entonces no debe contener bb.

Solución: Transformando lógicamente el enunciado, representamos la

condición “contiene la subcadena aa” por el símbolo Caa, y la

condición “no contiene bb” por ¬Cbb. Entonces la condición del

problema es: Caa ⇒ ¬Cbb

Equivalencias de Expresiones

Regulares

Las expresiones regulares no representan en forma

única a un lenguaje -esto es, la función L : ER →2 Σ∗descrita arriba no es inyectiva. Esto quiere decir

que puede haber varias ER para un mismo lenguaje,

lo cual desde luego no es conveniente, pues al ver

dos ER distintas no podemos aun estar seguros de

que representan dos lenguajes distintos.

Por ejemplo, las ER (a + b)∗ y (a∗b∗)∗ representan el

mismo lenguaje.

Sin embargo, en algunos casos resulta util aplicar

ecuaciones de equivalencia entre las ER, que son

expresiones de la forma ER1 = ER2, cuyo

significado es que el lenguaje de ER1 es el mismo

que el de ER2 (contienen las mismas palabras).

Por ejemplo, la equivalencia R + S = S

+ R quiere decir que la suma de

expresiones regulares es conmutativa,

por lo que si tenemos dos ER

especificas, como a ∗ y b ∗ab,

entonces la ER a ∗+b∗ab será

equivalente a la ER b∗ab+a∗, y ambas

representaran las mismas palabras.

A continuación damos una lista de las principales equivalencias de ER, clasificadas en 9 grupos:

1. R + S = S + R, (R + S) + T = R + (S + T), R + Φ = Φ + R = R, R + R = R

2. R • ∧ = ∧ • R = R, R • Φ = Φ • R = Φ, (R • S) • T = R • (S • T)

3. R • (S + T) = R • S + R • T, (S + T) • R = S • R + T • R

4. R∗ = R∗ • R∗ = (R∗)∗ = (∧ + R)∗, Φ∗ = ∧∗ = ε

5. R∗ = ∧ + RR∗

6. (R + S)∗ = (R∗ + S∗)∗ = (R∗S∗)∗ = (R∗S)∗R∗ = R∗(SR∗)∗ 6= R∗ + S∗

7. R∗R = RR∗, R(SR)∗ = (RS)∗R

8. (R∗S)∗ = ∧ + (R + S)∗S, (RS∗)∗ = ∧ + R(R + S)∗

9. R = SR + T ssi R = S∗T, R = RS + T ssi R = T S∗

Las equivalencias de estos 9 grupos pueden usarse

para verificar que dos ER denotan el mismo

lenguaje. La técnica a usar para verificar que P =

Q, donde P, Q ∈ ER, es formar una serie de

equivalencias P = R1 = R2 = . . . = Rn = Q, usando

las equivalencias dadas arriba para hacer

reemplazamientos.

Ejemplo: Verificar que las ER (ab + a) ∗a y a(ba + a)∗ son

equivalentes, usando las equivalencias presentadas arriba.

Solución:

(ab + a)∗a = (a + ab)∗a -por (1);= (a∗ab)∗a∗a -por (6);=

([a∗a]b)∗[a∗a] -agrupamos terminos;

Gracias.