Capítulo 7: Expresiones Regulares 7.1. Concepto de expresión regular 7.1.1. Definición 7.1.2. Lenguaje descrito 7.1.3. Propiedades 7.2. Teoremas de equivalencia 7.2.1. Obtener un AFND a partir de una expresión regular 7.2.2. Obtener una expresión equivalente a partir de un autómata finito 1 7.1. Concepto de Expresión Regular El objetivo de las expresiones regulares es representar todos los posibles lenguajes definidos sobre un alfabeto Σ, en base a una serie de lenguajes primitivos, y unos operadores de composición. Lenguajes primitivos: el lenguaje vacío, el lenguaje formado por la palabra vacía, y los lenguajes correspondientes a los distintos símbolos del alfabeto. Operadores de composición: la unión, la concatenación y el cierre. Ejemplo: 1. Lenguaje formado por las cadenas que terminan en 01: {0,1}*.{01}= ({0}∪{1})*.{01} ⇒ Expresión regular: (0+1)*01 2. Lenguaje formado por palabras de longitud par sobre a’s y b’s: {aa,ab,ba,bb}*= ({aa}∪{ab}∪{ba}∪{bb})* ⇒Expresión: (aa+ab+ba+bb)* 2 7.1.1 Definición Dado un alfabeto Σ, las expresiones regulares sobre Σ se definen de forma recursiva por las siguientes reglas: 1. Las siguientes expresiones son expresiones regulares primitivas: • ∅ • λ • a, siendo a∈Σ. 2. Sean α y β expresiones regulares, entonces son expresiones regulares derivadas: • α+β (unión) • α.β (o simplemente αβ) (concatenación) • α* (cierre) • (α) 3. No hay más expresiones regulares sobre Σ que las construidas mediante estas reglas. Precedencia de los operadores: 1. () 2. * cierre 3. . concatenación 4. + unión Ejemplo: Algunos ejemplos de expresión regular son: (0 + 1)*01 (aa + ab + ba + bb)* a*(a + b) (aa)*(bb)*b 3 7.1.2 Lenguaje descrito por una ER Definición (Lenguaje descrito por una ER): Sea r una expresión regular sobre Σ. El lenguaje descrito por r, L(r), se define recursivamente de la siguiente forma: 1. Si r=∅ ⇒ L(∅)= ∅ 2. Si r=λ ⇒ L(λ)= {λ} 3. Si R=a, a∈Σ ⇒ L(a)= {a} 4. Si R=α+β ⇒ L(α+β)= L(α)∪L(β) 5. Si R=α.β ⇒ L(α.β)= L(α)L(β) 6. Si R=α* ⇒ L(α*)= L(α)* 7. Si R=(α) ⇒ L((α))= L(α) donde α y β son expresiones regulares. 4 Ejemplo: Mostrar el lenguaje descrito por una ER mediante notación conjuntista: 1. L(a*(a+b)) = = = = = 2. L((aa)*(bb)*b) L(a*)L((a+b)) = L(a)*(L(a) ∪L(b)) = {λ,a,aa,aaa,...}{a,b} {a,aa,...,b,ab,aab,...} {an|n≥1}∪{anb|n≥0} = L(a)*L(a+b) {a}*({a} ∪{b}) {a2nb2m+1|n,m≥0} 3. Si Σ={a,b,c}, entonces L((a+b+c)*)=Σ*. 4. L(a*.(b+c)) 5. L(0*.1.0*) 6. L((a+b+c+...+z)*.(a+b)*) 7. ¿Que lenguaje describe la expresión a*.(a+b).c*? 8. Dado el lenguaje L={w |w∈{a,b,c}* donde w tiene al menos un par de a’s consecutivos}. Escribe la expresión regular para L. 9. Escribe todas las palabras de longitud <4 de L((a+b)*.b.(a+a.b)*). 5 7.1.3 Propiedades de Expresiones Regulares Definición (equivalencia de ER): Dos expresiones regulares r1 y r2 se dicen equivalentes, r1 = r2, si describen el mismo lenguaje, esto es, si L(r1)=L(r2). En base a esta definición se pueden establecer las siguientes equivalencias y propiedades: Respecto a las operaciones + y . : 1. + y . son asociativas: α+(β+γ)=(α+β)+γ=α+β+γ y α.(β.γ)=(α.β).γ=α.β.γ 2. + es conmutativa e idempotente: α+β=β+α y α+α=α 3. Distributividad: α.(β+γ)=α.β+α.γ y (α+β).γ=α.γ+β.γ 4. Elemento neutro: α.λ=λ.α=α y α+∅=∅+α=α 5. ∅.α=α.∅=∅ 6. Si λ∈L(α), entonces α+λ=α Respecto a la operación *: 7. α*=λ+α.α* 8. λ*=λ 9. ∅*=λ 10. α*.α*=α* 11. α.α*=α*.α 12. (α*)*=α* 13. (α*+β*)*=(α*.β*)*=(α+β)*=(α*.β)*.α* 14. (α.β)*.α=α.(β.α)* Para comprobar si dos expresiones son equivalentes se puede intentar transformarlos mediante estas reglas en una misma expresión. 6 Ejemplos: Σ={a,b,c} 1. c*.c+c*=c*¿? c*.c+c* = = = = = c*.c+c*+λ c.c*+c*+λ λ+c.c*+c* c*+c* c* (por 6) (por 11) (por 2) (por 7) (por 2) 2. c+c*=c*¿? c+c* = = = = = = c+λ+c.c* λ+c+c.c* λ+c.λ+c.c* λ+c.(λ+c*) λ+c.c* c* (por 7) (por 2) (por 4) (por 3) (por 6) (por 7) 3. ((c+b.a)*.a*)*=((c+b.a)+a)* ¿? 4. Dado dos expresiones regulares R= b.c+a.c*.a.c+a.c*.c+a y S=(b+a.c*a).c+a.c*. ¿Representan S y R el mismo lenguaje? 5. Demuestre que las expresiones R=(a*.(b+c)*+b*)* y S=(a+b+c)* son iguales. Observación: De este modo sólo se puede demostrar que dos expresiones regulares son equivalentes. Sin embargo, mediante este método, no es posible demostrar que dos expresiones regulares describen lenguajes distintos. 7 7.2 Teoremas de equivalencia ⋅ Tal y como indica su nombre, mediante expresiones regulares se puede representar lenguajes regulares. De hecho, la clase de lenguajes que se puede representar mediante una ER, es equivalente a la clase de lenguajes regulares. ⋅ Hasta ahora hemos visto que los lenguajes regulares pueden describirse mediante: • Gramáticas lineales por la izquierda • Gramáticas lineales por la derecha • Autómatas finitos deterministas • Autómatas finitos no deterministas ⋅ Por tanto, deben existir algoritmos que permiten obtener un autómata o una gramática regular a partir de una expresión regular y viceversa. 8 7.2.1 ER equivalente a un autómata finito Tres métodos principales para convertir expresiones regulares en autómatas: ⋅ Método de las rnij (Hopcroft). ⋅ Eliminación de estados (Hopcroft,Linz) ⋅ Ecuaciones características (Alfonseca, Isasi) (equivalente al método de la eliminación de estados) Definición (ecuación característica): Sea un autómata finito A=({q0,q1,…,qn},Σ,f,q0,F). Cada estado del autómata tiene asignado una ecuación característica correspondiente, que describe las distintas formas de llegar desde este estado a un estado final. La ecuación característica para el estado qi es la siguiente: Xi =bjXj+ bkXk +…+ bwXw+ai donde: • • La expresión bkXk forma parte de la ecuación si y sólo si existe una transición del estado qi al estado qk para el símbolo de entrada bk ai es una expresión tal que ai=λ si qi∈F; ai=∅ en otro caso. 9 Ejemplo: q1 a q0 d c q2 b q 4* b,d c q 3* a,b,c c a,b,d a,b,c,d q5 a,d a,b,c,d x0=b.x1+c.x3+a.x5+d.x5+∅=b.x1+c.x3+(a+d).x5+∅ x1=c.x2+a.x0+(b+d).x5+∅ x2=d.x4+(a+b+c).x5+∅ x3=c.x3+(a+b+d).x5+λ x4=(a+b+c+d).x5+λ x5=(a+b+c+d).x5+∅ Observación: 1. Se puede definir las ecuaciones características para autómatas finitos deterministas y no deterministas. 2. Xi es una expresión regular (con variables) que describe las cadenas que llevan del estado qi a un estado final. Evidentemente L(X0)=L(A). Teniendo todas las ecuaciones características, se puede resolver la ecuación para el estado inicial obteniendo la expresión regular del lenguaje. El siguiente lema proporciona una regla para eliminar las variables en las ecuaciones. 10 Lema 1: Sea X una variable y A y B expresiones regulares. Si X=A.X+B y λ∉L(A), enconces X=A*.B. Demostración: Sea cualquier palabra x∈L(X) con |x|=n y X=A.X+B. Se demuestra que se cumple x∈L(A*B).Consideramos la definición de X: X=A.X+B X=A.(A.X+B)+B=A2.X+A.B+B X=A2.(A.X+B)+A.B+B=A3.X+A2.B+A.B+B … X=An+1.X+An.B+…+A.B+B= An+1.X+(An+…+A+λ).B • • • • Por tanto, L(X)=L(An+1.X)∪ L((An+…+A+λ).B) y dado que x∈L(X) se sigue x∈L(An+1.X) o x∈ L((An+…+A+λ).B). Dado que λ∉L(A), para cualquier w∈L(An+1.X) se cumple |w|≥n+1. x tiene longitud n por lo que x∉L(An+1.X). Por tanto, x ∈ L((An+…+A+λ).B) y, entonces también se verifica x∈L(A*B). Razonando de forma similar se puede demostrar que para cualquier palabra x∈L(A*B) también se cumple x∈L(X). 11 Ejemplos: Resolución de ecuaciones 1. X=abX X=abX+∅=(ab)*∅= ∅ 2. X=abX+λ X=(ab)*λ= (ab)* 3. X=abX+cX X=(ab+c)X+∅= (ab+c)*∅= ∅ Teorema 1: Dado un autómata finito A=(Q,Σ,f,q0,F), existe una expresión regular R tal que L(R)=L(A). Demostración: La expresión regular equivalente se obtiene resolviendo de forma sucesiva las ecuaciones características del autómata. La expresión regular R será la que se obtiene a partir de la ecuación característica correspondiente al estado inicial del autómata: R=X0. Ejemplo: (para el autómata anterior) Ecuaciones características: x0=b.x1+c.x3+(a+d).x5+∅ x1=c.x2+a.x0+(b+d).x5+∅ x2=d.x4+(a+b+c).x5+∅ x3=c.x3+(a+b+d).x5+λ x4=(a+b+c+d).x5+λ x5=(a+b+c+d).x5+∅ Resolviendo x5: x5=(a+b+c+d)*.∅=∅ Resolviendo x4: x4=(a+b+c+d).∅ +λ=λ Resolviendo x2: x2=d.λ+(a+b+c).∅ +∅=d Resolviendo x3: x3=c.x3+(a+b+d).∅ +λ=c.x3+λ=c*.λ=c* Resolviendo x1: x1=c.d+a.x0+(b+d).∅+∅=cd+a.x0 Resolviendo x0: x0 =b.(cd+a.x0)+c.c*+(a+d).∅+∅ = bax0+bcd+c.c*= (ba)*(bcd+cc*) 12 Observaciones: ⋅ La aplicación de la regla “Si X=A.X+B, enconces X=A*.B” sólo es posible si λ∉L(A). ⋅ Si el autómata tiene transiciones λ, entonces es posible que no se pude aplicar esta regla. ⋅ En consecuencia, será necesario eliminar transiciones λ antes (convertir el autómata en uno sin transiciones λ). Ejemplo: q2 a q0 a,λ λ q 1* c x2=∅ x1=cx1+(a+λ)x0+λ =c*.((a+λ)x0+λ) =(c*.a+c*)x0+c* x0=λx1+ax2+∅ =λ((c*.a+c*)x0+c*)+a∅ =(c*.a+c*)x0+c* ¡¡¡≠ ≠(c*.a+c*)*.c* !!!! Transformación del autómata (eliminación de transiciones λ): ⋅ similar a la conversión a un autómata determinista ⋅ los estados nuevos son las clausuras de los estados originales respecto a λ: q2 q2 a q0 a,λ λ q 1* c a c,a {q0,q1}* x2=∅ x01=(c+a)x01+λ+ax2 =(c+a)x01+λ+a∅=(c+a)x01+λ=(c+a)*.λ=(c+a)* 13 Ejemplos: Obtener las expresiones regulares para los siguientes autómatas: 1. A a b xp=axq+bxp+∅ → p q p xq=axp+bxq+λ * q p q Solución: xp=(ab*a+b)*(ab*) 2. A 0 *→ A B * B C C C 1 A A C xA=0xB+1xA+λ xB=0xC+1xA+λ xC=0xC+1xC+∅ Solución: xA=(01+1)*(0+λ) 3. q1 a,b,c * a b q0 q 3* a,b,c c q2 c a Solución: x0=b+c.c*.a q4 a,b,c b 4. Autómata no determinista q 1* a Solución: x0=(b+a.c*a)*.a.c* a q0 b c,λ c q2 14 7.2.2 AFND equivalente a una Expresión Regular Dos métodos principales para convertir expresiones regulares en autómatas: ⋅ Método de las derivadas (Alfonseca) ⇒ se obtiene una gramática regular que se puede convertir en AFND ⋅ Método de composición de autómatas (Alfonseca, Linz, Hopcroft) Teorema 2: Dada una expresión regular R sobre el alfabeto ∑, existe un autómata finito no determinista A tal que L(R)=L(A). Demostración: Basándose en la estructura de la expresión regular R, la demostración procede por inducción estructural. Sea ∑={a1,…,an}. Si R es una expresión regular primitiva: • • • R=∅ R={λ} R={a1} A a1 … an λ → q0 * qf q0 A a1 … an λ {qf} → q0 * qf q0 λ qf * A a1 … an λ → q0 {qf} * qf q0 a1 qf * qf * 15 Si R es una expresión regular derivada: • Si R=R1+R2 : A a1 … an λ {q0_R1,q0_R2} → q0 q0_R1 … … … … qf_R1 {qf} q0_R2 … … … … qf_R2 {qf} * qf • q0_R1 R1 qf_R1 λ q f* q0 λ q0_R2 R2 qf_R2 λ Si R=R1.R2 : A a1 … an λ {q0_R1} → q0 q0_R1 …… …… qf_R1 {q0_R2} q0_R2 …… …… qf_R2 {qf} * qf • λ q0 λ q0_R1 qf_R1 R1 λ q0_R2 R2 qf_R2 Si R=R1*: a1 … an λ {q0_R1, qf} q0_R1 …… … … qf_R1 {qf} * qf {q0} λ q f* λ A → q0 q0 λ q0_R1 R1 qf_R1 λ q f* λ Se construye el autómata de forma recursiva: • q0_R1 y q0_R2: estados iniciales de los subautómatas para R1 y R2 (¡no se marcan como estados iniciales!) • qf_R1 y qf_R2: estados finales de los subautómatas para R1 y R2 (¡no se marcarán como estados finales!) 16 Ejemplos: Obtener los AFND correspondientes a las siguientes expresiones regulares: 1. R=(1+01)*(0+λ): q0 λ λ λ 0 λ λ λ λ λ 1 λ λ λ 1 λ λ 0 λ λ λ λ λ q f* λ 17 Como se puede observar, los autómatas así construidas tienen muchas transiciones que se pueden unir: λ q1 0 q0 1 q2 1,λ 0,λ q f* El AFD mínimo correspondiente es el siguiente: 1 0 q 0* q 1* 0 q2 1 1,0 2. R=(1+01*)* 3. R=a.a*.b.b* 4. R= (b+a).a* 18 Corolario: Sean LREG, LAF y LER las clases de los lenguajes aceptados por autómatas finitos, generados por gramáticas regulares y descritos por expresiones regulares, respectivamente. LREG=LAF=LER Gramáticas regulares Gramática Lineal por la izquierda Gramática Lineal por la Derecha Autómatas Finitos Autómatas Finitos Deterministas Autómatas Finitos NO Deterministas Expresiones Regulares 19