TEMA 5. GRAMÁTICAS REGULARES. 5.1. Gramáticas Regulares. 5.2. Autómatas finitos y gramáticas regulares. 5.2.1. Gramática regular asociada a un AFD 5.2.2. AFD asociado a una Gramática regular 5.3. Expresiones regulares. 5.3.1. Lenguaje de las expresiones regulares. 5.3.2. Álgebra de las expresiones regulares. 5.3.3. Teorema fundamental. 5.4. Autómatas finitos y expresiones regulares. 5.4.1. AFN asociado a una expresión regular 5.4.2. expresión regular asociada a un AF TALF. Tema5 nº 1 5.1. gramáticas regulares. Gramáticas Lenguajes Máquinas Sin restricciones o de Tipo 0 Sin restricciones o de Tipo 0 Máquina de Turing Sensible al contexto o de Tipo 1 Sensible al contexto o de Tipo 1 Autómata linealmente acotado Libre de contexto o de Tipo 2 Libre de contexto o de Tipo 2 Autómata a pila Regular o de Tipo 3 Regular o de Tipo 3 Autómata Finito TALF. Tema5 nº 2 5.1. gramáticas regulares. Gramáticas Tipo 3 (Gramáticas regulares o de estado finito) Sus producciones son de la forma: Lineal por la derecha: AaB o Aa, donde A,B N , a T Lineal por la izquierda: ABa o Aa, donde A,B N , a T Se permiten producciones de la forma S Los lenguajes representados por este tipo de gramáticas se denominan lenguajes regulares. Ejemplos: G1 = ({ 0, 1}, {A, B}, A, { A ::= B1 | 1, B ::= A0}) Gramática lineal por la izquierda que describe el lenguaje L1 = { 1, 101, 10101, ... } = {1(01)n | n = 0, 1, 2, ...} G2 = ({ 0, 1}, {A, B}, A, { A ::= 1B | 1, B ::= 0A}) Gramática lineal derecha que genera el mismo lenguaje que la gramática anterior. TALF. Tema5 nº 3 5.1. gramáticas regulares. 1. Para cada Gramática lineal por la derecha existe una Gramática lineal izquierda que genera el mismo lenguaje y viceversa. Algoritmo: Se transforma la gramática de forma que no haya ninguna regla en cuya parte derecha esté el axioma. Para lo cual: 1. 2. 3. 2. Se crea un grafo G dirigido: 1. 2. 3. 4. 3. Se intercambian las etiquetas del axioma y . Se invierte la dirección de todos los arcos. Se transforma en un conjunto de reglas: 1. 2. 3. A N {} se crea un nodo. producción (A::=aB) P se crea un arco etiquetado con a que va del nodo A al B. producción (A::=a) P se crea un arco etiquetado con a que va del nodo A al (F). Si S::= se crea un arco sin etiqueta que va del nodo del axioma al nodo . Se crea otro grafo G´a partir de G: 1. 2. 4. Se crea un nuevo S´ N regla S::=x (con S axioma y x *) se crea una nueva regla S´::=x. Cada regla A::=xSy, se transforma en A::=xS´y. nodo, se crea un símbolo no terminal excepto para el nodo . arco etiquetado con a que va del nodo A al nodo B N {}, se crea una producción A::=Ba. Si un arco del nodo del axioma al nodo se crea una regla S::=. El algoritmo para el paso inverso es similar al descrito. TALF. Tema5 nº 4 5.1. gramáticas regulares. Ejemplo: Gramática lineal derecha: G1 = ({ 0, 1}, {A, B}, A, { A::=1B | , B::=0A, B::=0}) 1. Se transforma la gramática para que no haya regla como: B::=0A 1. 2. 3. 4. Se Se Se Se crea un nuevo A´ crean las reglas A´::=1B | . crea la regla B::=0A´. borra la regla B::=0A. La Gramática resultante es: G11 = ({ 0, 1}, {A, B, A´}, A, { A::=1B | , A´::=1B | , B::=0A´, B::=0}) Se elimina A´::= quedando: G12 = ({ 0, 1}, {A, B, A´}, A, { A::=1B | , A´::=1B, B::=0A´, B::=0}) TALF. Tema5 nº 5 5.1. gramáticas regulares. G12 = ({ 0, 1}, {A, B, A´}, A, { A::=1B | , A´::=1B, B::=0A´, B::=0}) 1. Se crea un grafo G que representa las transiciones de esta gramática. 1 2. Se crea el grafo G´invirtiendo G: A 1 B 0 B 0 0 1 A´ 1 A´ 0 A 3. Se transforma en un conjunto de reglas, en la Gramática lineal por la izquierda equivalente: G2 = ({ 0, 1}, {A, B, A´}, A, { A ::= B0 | , A´::= B0, B ::= A´1, B::=1}) TALF. Tema5 nº 6 5.1. gramáticas regulares. 1. 2. 3. 4. Para cada Gramática lineal por la izquierda existe una Gramática lineal derecha que genera el mismo lenguaje y viceversa. Algoritmo: Se transforma la gramática de forma que no haya ninguna regla en cuya parte derecha esté el axioma. Para lo cual: 1. Se crea un nuevo S´ N 2. regla S::=x (con S axioma y x *) se crea una nueva regla S´::=x. 3. Cada regla A::=xSy, se transforma en A::=xS´y. Se crea un grafo G dirigido: 1. A N {F} se crea un nodo. 2. producción (A::=Ba) P se crea un arco etiquetado con a que va del nodo A al B. 3. producción (A::=a) P se crea un arco etiquetado con a que va del nodo A al F. 4. Si S::= se crea un arco con etiqueta que va del nodo del axioma al nodo F. Se crea otro grafo G´a partir de G: 1. Se intercambian las etiquetas del axioma y F. 2. Se invierte la dirección de todos los arcos. Se transforma en un conjunto de reglas: 1. nodo, se crea un símbolo no terminal excepto para el nodo F. 2. arco etiquetado con a que va del nodo A al nodo B N {F}, se crea una producción A::=aB. 3. Si un arco etiquetado con del nodo del axioma al nodo F se crea una regla S::=. TALF. Tema5 nº 7 5.1. gramáticas regulares. Ejemplo: Gramática lineal izquierda: G1 = ({ 0, 1}, {A, B}, A, { A::=B1 | 1 , B::=A0}) 1. Se transforma la gramática para que no haya regla como: B::=A0 1. Se crea un nuevo A´ 2. Se crean las reglas A´::=B1 | 1 3. Se crea la regla B::=0A´0 4. Se borra la regla B::=A0 La Gramática resultante es: G11 = ({ 0, 1}, {A, B, A´}, A, { A::=B1 | 1, A´::=B1 | 1 , B::=A´0}) 2. Grafo G para las transiciones de la gramática. B 1 A 1 F 1 1 3. Se crea el grafo G´invirtiendo G: F 0 A´ 1 A B 1 1 1 0 A´ 4. Se transforma en las reglas, de la Gramática lineal por la derecha equivalente: G2 = ({ 0, 1}, {A, B, A´}, A, { A ::= 1A´ | 1 , A´::= 0B, B ::= 1A´ | 1}) TALF. Tema5 nº 8 5.2. Autómatas finitos y gramáticas regulares. 5.2.1. Gramática regular asociada a un AFD Si L es aceptado por un AFD entonces L puede generarse mediante una gramática regular. Sea M=(Q, ,f,q0,F), la gramática regular equivalente es aquella definida como G=(Q, , P, q0), donde P viene dado por: Si f(q,a)=p entonces añadir a P la producción qap. Si f(q,a)=p y pF entonces añadir a P la producción qa. Si q0F entonces añadir a P la producción q0 TALF. Tema5 nº 9 5.2. Autómatas finitos y gramáticas regulares. Ejemplo: De AFD a Gramática regular: Dado un lenguaje regular L reconocido por un AFD M=(Q, ,f,q0,F), se puede obtener una gramática regular G=(N , T, S, P), que genere el mismo lenguaje de la siguiente forma: N =Q T = S=q0 P={(q,ap)|f(q,a)=p}{(q0,)|p,q0F} Ej.- Considera el siguiente DFA que acepta el lenguaje a*b: a q0 b q1 a,b a,b q2 La gramática será: q0 aq0|bq1|b q1 aq2|bq2 q2 aq2|bq2 TALF. Tema5 nº 10 5.2. Autómatas finitos y gramáticas regulares. 5.2.2. AFD asociado a una Gramática regular Si L es un lenguaje generado por una gramática regular, entonces existe un AFD que lo reconoce: Sea la gramática regular G=(N , T ,P , S), se construye el AFND- equivalente como M=(N {F}, T ,f,S,{F}), donde f viene dado por: Si AaB entonces f(A,a)=B Si Aa entonces f(A,a)=F Si S entonces f(S, )=F F es un “nuevo” símbolo no terminal. Convertir el AFND- obtenido a un AFD. TALF. Tema5 nº 11 5.2. Autómatas finitos y gramáticas regulares. Ejemplo: De Gramática regular a AFN: Dado un lenguaje regular L generado por una gramática regular G=(N , T, S, P) , se puede obtener un AFD M=(Q, ,f,q0,F) que reconozca el mismo lenguaje de la siguiente forma: Q= N {F}, =T q0 =S Ej.- Considera la siguiente gramática: S aS|b que acepta el lenguaje a*b: El AFD equivalente: a S TALF. Tema5 b F nº 12 5.3. Expresiones regulares. Las expresiones regulares son una notación especial que se utiliza habitualmente para describir los lenguajes de tipo regular. La notación más utilizada para especificar patrones son las expresiones regulares, sirven como nombres para conjuntos de cadenas. Los usos más habituales de las expresiones regulares son en la creación de analizadores léxicos para compiladores, en la búsqueda de patrones dentro de los editores de texto, en la descripción de redes neuronales y circuitos electrónicos, etcétera. En las expresiones regulares pueden aparecer símbolos de dos tipos: Símbolos base: son los del alfabeto del lenguaje que queremos describir, λ para describir la palabra vacía y ∅ para describir un lenguaje vacío. Símbolos de operadores: „+‟ o unión, „.‟ o concatenación y „*‟ para la clausura. En ocasiones se utiliza para la unión el símbolo „|‟ y el punto se omite en la concatenación de expresiones regulares. TALF. Tema5 nº 13 5.3.1. Lenguaje de las expresiones regulares. El lenguaje de las expresiones regulares se construye de forma inductiva a partir de símbolos para expresiones regulares elementales y operadores. Expresiones regulares Dado un alfabeto y los símbolos: (lenguaje vacío), (palabra vacía), ·(concatenación), + (unión), *(clausura), se cumple: Los símbolos y son expresiones regulares. Cualquier símbolo a es una expresión regular. Si u y v son expresiones regulares, entonces, u+v, uv, u* y v* son expresiones regulares. Sólo son expresiones regulares las que se pueden obtener aplicando un número finito de veces las reglas anteriores. Se establece la siguiente prioridad en las operaciones: 1. Paréntesis ( ) 2. Clausura * 3. Concatenación · 4. Unión + A cada expresión regular le corresponde un lenguaje regular: Si α= , L(α) = Si α= , L(α) = { }. Si α=a, a , L(α) = {a} Si α y β son dos expresiones regulares entonces: L(α+β) = L(α) L(β) L(αβ) = L(α)L(β) L(α*) = L(α)* TALF. Tema5 nº 14 5.3.1. Lenguaje de las expresiones regulares. Definiciones regulares Son nombres dados a las expresiones regulares. Una definición regular es una secuencia de definiciones de la forma: d1 r1 d2 r2 ….. dn rn Donde cada di es un nombre distinto y cada ri una expresión regular sobre los símbolos del alfabeto {d1, d2,..,dn} Ejemplo:definición regular para identificadores en Pascal: letra A|B|…|Z|a|b|…|z digito 0|1|…|9 id letra(letra|digito)* Abreviaturas en la notación Uno o más casos: operador unitario posfijo + Cero o un caso: operador unitario posfijo ? Clases de caracteres: [abc] Ejemplos: digitos digito+ Exponente_opcional (E(+|-)?digitos)? TALF. Tema5 nº 15 5.3.1. Lenguaje de las expresiones regulares. Ejemplo, sobre el alfabeto Σ= {a,b } , podemos definir las siguientes expresiones regulares: TALF. Tema5 Expresión Regular Lenguaje ab {ab} a +∅ {a} (a+b)*a Σ*{a} a+ λ {λ,a} b*ab* {bnabm/n,mN} a* {λ,a,aa,aaa…} nº 16 5.3.2. Álgebra de las expresiones regulares. Propiedades de la Unión: asociativo: α+ (β+γ ) = (α+β ) +γ conmutativo: α+β=β+α elemento neutro la expresión vacía: + α = α + =α idempotente: α+α =α Propiedades de la concatenación: asociativo: α (βγ ) = (αβ )γ no es conmutativo: αβ≠ βα elemento neutro la expresión lambda: λα=αλ=α Tiene como elemento anulador la expresión vacía: α =α = distributivo respecto al operador de unión: α (β+γ ) =αβ+αγ Propiedades de la clausura: λ*=λ *=λ α *=λ+ αα* αα*=α*α (α*+β*)* = (α+β )* (α+β)* = (α*β*)* TALF. Tema5 nº 17 5.3.3. Teorema fundamental. El Teorema servirá para describir mediante una expresión regular el lenguaje reconocido por un autómata. El objetivo del teorema fundamental es resolver sistemas de ecuaciones en el dominio de las expresiones regulares que tienen la forma siguiente: X=αX+β El teorema se divide en dos partes que nos permiten obtener la solución a esta ecuación en los casos en que λL(α) y aquellos en los que λ∉L(α) , respectivamente. Regla General: Teorema. Sean α y β dos expresiones regulares de forma que λL(α). En estas condiciones, la solución a la ecuación X=αX+β es de la forma X=α*(β+γ ) en donde γ representa cualquier expresión regular. Regla de Inferencia: Teorema. Sean α y β dos expresiones regulares de forma que λ∉ L(α). En estas condiciones, X=αX+β X=α*β TALF. Tema5 nº 18 5.4. Autómatas finitos y expresiones regulares. Todo lenguaje definido por un autómata finito (AFD, AFND) es también definido por una expresión regular. Todo lenguaje definido por una expresión regular es definido por un autómata finito. TALF. Tema5 AFND- AFND ER AFD nº 19 5.4.1. AFN asociado a una expresión regular Cada lenguaje definido por una expresión regular es también definido por un autómata finito. La demostración es inductiva sobre el número de operadores de α (+, . *). Base.- (cero operadores) Α puede ser , , a, donde a T Expresión regular α a TALF. Tema5 Autómata a nº 20 5.4.1. AFN asociado a una expresión regular Inducción.- (uno o más operadores en α) Suponemos que se cumple la hipótesis para expresiones regulares de menos de n operadores. Por hipótesis existen dos AF M1 y M2 tal que que acepta el mismo lenguaje L(M1)=L(α1 ) y L(M2)=L(α2 ) donde: M1 q1 TALF. Tema5 M2 f1 q2 f2 nº 21 5.4.1. AFN asociado a una expresión regular Suponemos que tenemos una expresión regular α con n operadores. Vamos a construir el autómata M tal que L(M)=L(α). Distinguimos tres casos correspondientes a las tres formas posibles de expresar α en función de otras expresiones regulares con menos de n operadores : 1. α = α1 + α2 tal que op(α1), op(α2) < n 2. α = α1 . α2 tal que op(α1), op(α2) < n 3. α = (α1)* tal que op(α1) = n-1 TALF. Tema5 nº 22 5.4.1. AFN asociado a una expresión regular 1. α = α1 + α2 tal que op(α1), op(α2) < n A partir de M1 y M2 construimos otro autómata M (la unión), el autómata que acepta el mismo lenguaje es: q1 M1 f1 q0 f0 q2 TALF. Tema5 M2 f2 nº 23 5.4.1. AFN asociado a una expresión regular 2. α = α1 . α2 tal que op(α1), op(α2) < n A partir de M1 y M2 construimos otro autómata M (la concatenación), el autómata que acepta el mismo lenguaje es: q1 TALF. Tema5 M1 f1 q2 M2 f2 nº 24 5.4.1. AFN asociado a una expresión regular 3. α = (α1)* tal que op(α1) = n-1 A partir de M1 construimos otro autómata M (la clausura), el autómata que acepta el mismo lenguaje es: q0 q1 M1 f1 f0 TALF. Tema5 nº 25 5.4.1. AFN asociado a una expresión regular Ejemplo: AF construído para la expresión regular 01* + 1: M1 representa el autómata para la expresión regular 0 M2 representa el autómata para la expresión regular 1* M3 representa el autómata para la expresión regular 1 En el Autómata final se integran simultáneamente los autómatas para la concatenación (0 con 1*) y la suma de expresiones regulares 01* + 1 0 q1 q2 M1 q5 1 q7 q3 q0 TALF. Tema5 q1 0 q q 1 2 5 q3 q6 q8 M3 1 q4 q7 1 q8 q4 M2 q6 f0 nº 26 5.4.2. expresión regular asociada a un AFD Si L es un lenguaje aceptado por un autómata finito M entonces existe una expresión regular tal que L = L(M) = L(). Podemos suponer que el autómata finito M no tiene -transiciones. Si las tuviera, podemos encontrar autómata equivalente sin -transiciones Sea M = (Q, , f, q0, F). A partir de su diagrama de transición podemos obtener un sistema de ecuaciones de expresiones regulares (ecuaciones características del autómata): A cada nodo qi le corresponde una ecuación y cada estado se puede considerar como una incógnita xj de la ecuación. La ecuación para el estado qi tiene en el primer miembro el estado qi, xi, y en el segundo miembro una suma de términos, de forma que por cada arco del diagrama de la forma qi →qj tenemos un a término axj . Si el estado qi es final, añadimos el termino a al segundo miembro. Si el estado q0 es final, añadimos el termino al segundo miembro para x0. Cada incógnita para qi, xi,representa el conjunto de palabras que llevan de qi a un estado final. Resolviendo el sistema de las ecuaciones tendremos soluciones de la forma xi = i, donde i es una expresión regular sobre el alfabeto El lenguaje descrito por esta expresión regular es: L(i) = {w ∗ | (qi,w) ⊢∗ (qF , ) , qF F} (1) TALF. Tema5 nº 27 5.4.2. expresión regular asociada a un AFD El método para obtener una expresión regular a partir de un AF es el siguiente: 1. Obtener las ecuaciones características del autómata. 2. Resolver el sistema de ecuaciones 3. ← solución para el estado inicial. Para comprobar que es válido hay que probar que se cumple (1) para toda solución xi = i del sistema de ecuaciones, y en particular la solución para el estado inicial es la expresión regular correspondiente al autómata No es necesario resolver todas las incógnitas, sólo necesitamos despejar la incógnita correspondiente al estado inicial x0. TALF. Tema5 nº 28 5.4.2. expresión regular asociada a un AFD 0 Ejemplo. Sea el AF: q0 Ecuaciones características: 1. x0= 0x0+ 1x1+1 2. x1= 0x0+ 1x2 3. x2= 0x2+ 1x1+1 1 0 0 1 q1 1 q2 Resolvemos aplicando la regla de inferencia X=αX+β X=α*β x2= 0*(1x1+1)=0*1x1+0*1 Sustituyendo en (2): x1= 0x0+ 10*1x1+10*1=(10*1)*(0x0+ 10*1)= =(10*1)*0x0+ (10*1)*10*1 Sustituyendo en (1): comenzando por la ecuación (3) : x0= 0x0+ 1[(10*1)*0x0+ (10*1)*10*1]+1= 0x0+ 1(10*1)*0x0+ 1(10*1)*10*1+1= (0+ 1(10*1)*0)x0+ 1(10*1)*10*1+1= (0+1(10*1)*0)*(1(10*1)*10*1+1)= = (0+1(10*1)*0)*1[(10*1)*(10*1)+ ]= =(0+1(10*1)*0)*1(10*1)* expresión regular que describe el lenguaje L(M). (aplicando las propiedades:(ab*b+a )=a(b*b+)=ab*) TALF. Tema5 nº 29