Tema 5 – Lenguajes independientes del contexto. Sintaxis 1 Gramáticas independientes del contexto Transformación de gramáticas independientes del contexto Autómatas de pila Obtención de un autómata de pila a partir de la gramática Teoría de los lenguajes de programación Tema 5 - Gramáticas independientes del contexto - Conceptos 2 Gramáticas independientes del contexto Las gramáticas independientes del contexto (de tipo 2 o de contexto libre) son aquellas cuyas producciones se ajustan a la siguiente forma: A→α en donde A ∈ N ; α ∈ (Σ | N)* El término independiente del contexto viene de que se puede cambiar A por α en cualquier contexto donde aparezca A. La siguiente gramática es independiente del contexto: G=(Σ={a, b}, N={S, A, B}, S, P} P: S→aABAa, A→ε |aA, B→ε |bB Es una gramática que genera las palabras del lenguaje L={ an bm al | n, l ≥ 1 y m≥0} Teoría de los lenguajes de programación Tema 5 - Gramáticas independientes del contexto – Árbol de derivación 3 Derivación por la izquierda Consiste en aplicar un proceso de derivación al no terminal más a la izquierda S→aABAa →aBAa →aAa →aa Derivación por la derecha Consiste en aplicar un proceso de derivación al no terminal más a la derecha S→aABAa →aABa →aAa→aa Árbol de derivación Es una representación gráfica (en forma de árbol invertido) de un proceso de derivación en una gramática Se define el árbol de derivación como sigue: - la raiz del árbol será el símbolo inicial de la gramática - los nodo interiores del árbol están etiquetados por los símbolos no terminales - las hojas están etiquetadas por símbolos terminales - si un nodo interior etiquetado por A, posee como hijos los nodos etiquetados por X1, X2, …Xn , entonces A→ X1, X2, …Xn es una producción de la gramática, en donde Xi , representa símbolo terminal o no terminal Teoría de los lenguajes de programación Tema 5 Gramáticas independientes del contexto - Ambiguedad 4 Sea la siguiente gramática: G=(Σ={a, b},N={S, A, B}, S, P} P: S→aABAa ; A→ε|aA ; B→ε|bB árbol de derivación en el proceso de la generación de la palabra x=aaaa es el siguiente: S a A B A a Gramáticas ambiguas a ε a Son aquellas en las que se generan palabras por más de un árbol de derivación La siguiente gramática es una gramática ambigua: G=(Σ= {a, b}, N={S, A, B}, S, P} P: S→aABAa ; A→ε| aA ; B→ε|bB La generación de la palabra x=aaa se puede hacer por más de un árbol de derivación S a A a S B ε A ε a a A B ε ε A a a Teoría de los lenguajes de programación Tema 5 - Gramática independiente del contexto- Ambiguedad 5 Lenguaje inherentemente ambiguo Es aquel en que todas las gramáticas que lo generan son ambiguas El siguiente lenguaje es inherentemente ambiguo: L={an bm cl | n=m o m=l; n, m, l ≥ 0} Una de las posibles gramáticas que lo genera es la que sigue: G =(Σ={a, b, c}, N={S, A, B, C, D}, S, P} P: S→AB|CD, A→aAb |ε, B→cB |ε, C→aC |ε , D→bDc |ε Grado de ambigüedad – número de árboles que genera una misma palabra Teoría de los lenguajes de programación Tema 5 – Transformación de una gramática- limpiar o simplificar una gramática 6 Limpiar una gramática Limpiar una gramática consiste en quitar los símbolos inútiles e inaccesibles , Símbolos inútiles Símbolos no terminales a través de los cuales no se genera ninguna palabra perteneciente al lenguaje. Son símbolos útiles los siguientes: A→* w ; w∈Σ* ; A es útil Símbolos inútiles=N - Símbolos útiles Símbolos inaccesibles Símbolos a los que no se llega a través del símbolo inicial en un proceso de derivación Son símbolos accesibles: S→* α a A β; α, β∈ (Σ|N)*; a, A y S son accesibles Símbolos inaccesibles = (Σ|N) - Símbolos accesibles Teoría de los lenguajes de programación Tema 5 – Transformación de una gramática- limpiar o simplificar una gramática 7 Proceso para el cálculo símbolos útiles: a) El símbolo de la parte izquierda de una derivación directa A→w ; w∈Σ* ; A es util b) Sí todos los símbolos de la parte derecha de una producción son útiles , el símbolo no terminal de la parte izquierda también lo es B →CcA; si A y C son útiles, B también lo es c) Repetir proceso anterior hasta que se estén añadiendo símbolos útiles Quitar producciones con símbolos inútiles Ejemplo: quitar los símbolos inútiles en la siguiente gramática: G=(Σ={a, b, e}, N={S, A, B, C, D}, S,P} P: S→ABaC| SB |ε, A→aAB |bB, B→Ea |bB |ε, E→Ee Aplicando el algoritmo, son símbolos útiles={S, B, A}, quitando las producciones con los símbolos inútiles queda la siguiente gramática: S→SB|ε A→aAB|bB B→ bB|ε Teoría de los lenguajes de programación Tema 5 – Transformación de una gramática- limpiar o simplificar una gramática 8 Proceso para el cálculo de símbolos accesibles: a) El símbolo inicial es accesible S→w ; S es accesible b) Los símbolos que tengan como parte izquierda de la producción el símbolo inicial son accesibles S→AcB ; A,c y B son accesibles c) Para los símbolos no terminales que son accesibles y son parte izquierda de una producción, los símbolos de su parte derecha son accesibles A→DeF; si A es accesible D, e y F son accesibles d) Repetir proceso anterior hasta que se estén añadiendo símbolos accesibles Quitar producciones con símbolos inaccesibles Quitar los símbolos inaccesibles en la siguiente gramática: G=(Σ={a, b},N={S, A, B},S,P} P: S→S B|ε, A→aAB|bB, B→bB |ε Aplicando el algoritmo, son símbolos accesibles {S, B, b}, quitando los símbolos inaccesibles queda la siguiente gramática: G=(Σ={b},N={S, B},S , P} P: S→SB|ε, B→bB|ε se trata de una gramática limpia (blanca) Teoría de los lenguajes de programación Tema 5 – Transformación de una gramática- quitar prefijos comunes 9 Transformación de gramáticas de tipo 2 Quitar los prefijos comunes y la recursión inmediata por la izquierda Prefijos comunes Dos o más producciones tienen prefijos comunes cuando teniendo igual parte izquierda su parte derecha comienza por la misma subpalabra A→δα1 |δα2 |…|δαn | β1| β2|…| βm; n≥2, m≥0, δ∈(N|Σ)+ αi, βj∈(N|Σ)* Eliminación de prefijos comunes A→δA´| β1| β2|…βm , A´→α1|α2|……|αn Ejemplo de gramáticas que generan el lenguaje L={ ban, n≥0} Con prefijos comunes: G1=(Σ={a,b}, N={A, A´},A, P} P: A→bA´ |b, A´→aA´|ε Sin “ “ G2=(Σ={a, b}, N={A, R}, A, P} P: A→bR , R→A’|ε A´→aA´|ε A b A A A´ b fig1 b fig2 Teoría de los lenguajes de programación R fig3 Tema 5 – Transformación de una gramática-quitar recursión izquierda 10 Recursión por la izquierda Una o más producciones de una gramática tienen recursión por la izquierda, cuando existen uno o más símbolos de la parte derecha de la producción que coinciden con el símbolo no terminal de la parte izquierda A→α1 A α2|……|β1|β2|…βm n>0, m>0 αi∈(N|Σ)+ , βj∈(N|Σ)* Recursión inmediata por la izquierda Una o más producciones de una gramática tienen recursión inmediata por la izquierda, cuando el primer símbolo de la parte derecha de la producción coincide con el símbolo no terminal de la parte izquierda A→Aα1|Aα2|……Aαn|β1|β2|…βm n>0, m>0 αi∈(N|Σ)+ , βj∈(N|Σ)* Eliminación de la recursión inmediata por la izquierda A →β1 A´´ |β2 A´ |…βm A´ , A →α1A |α2A ……αnA |ε Ejemplo de gramáticas que generan el lenguaje L={ ban, n≥0} Con recursión inmediata por la izquierda G1=(Σ={a, b}, N={A}, A, P} P: A → Aa|b Sin “ “ A A “ “ “ G2=(Σ={a,b},N={A,A },A,P} P: A→bA´,A´→aA´|ε A fig1 de los lenguajes fig2 de programación a Teoría b A´ Tema 5 – Transformación de una gramática- quitar producciones vacias 11 Eliminación de producciones vacías Los siguientes pasos eliminan las producciones vacías de gramáticas cuya parte izquierda es un símbolo no terminal. - Determinar los símbolos anulables – un símbolo A es anulable A→α si α→*ε - Incluir en P´ todas las producciones de P menos las producciones vacías - Si A→αBβ está en P´ y B es anulable, entonces añadir a P´ la producción A→αβ ( excepto si una producción vacía) - Repetir el apartado anterior, hasta que no se pueden añadir más producciones. - Si el símbolo inicial tiene es anulable le añade una nueva producción de la forma S´→ε|S Sean las producciones correspondiente a una gramática P: S→aSAb|ε A→aAB|ε B→bB|ε - Símbolos anulables = {S, A, B} - P´: { S→aSAb, A→aAB, B→bB } - por ser S, A, B anulables, a P´ se la añaden S→aSb,S→aAb, A→aA, A→aB, B→b S→ab, A→a - S´→ε|S Teoría de los lenguajes de programación Tema 5 – Transformación de una gramática-quitar producciones unidad 12 Eliminación de producciones simples – producciones de unicidad Son producciones de la siguiente forma A→B Para su eliminación, habrá que realizar los siguientes pasos: - Eliminar producciones vacías - Para toda producción de unicidad A→B, con B B→α1|α2|…|αn; n>0, αi∈(N|Σ)+ - Sustituir A→B por A→α1|α2|…|αn ; n>0, αi∈(N|Σ)+ - Repetir el paso anterior, mientras queden producciones de unicidad Sea la siguiente gramática: G = (Σ={a, b, c}, N={S,A,B} S, P) ⇔ G = (Σ={a, b, c}, N={S,A,B} S, P’’) P:S → SaA| A P’:S →SaA| AbB| B P’’: S → SaA| AbB| cB |c A → AbB| B A → AbB| B A →AbB| cB | c B → cB|c B → cB| c B → cB|c Teoría de los lenguajes de programación Tema 5- Autómatas de pila - conceptos 13 Esquema conceptual <---------- entrada ------------- > |<-----x --->| -------- - a a b - ---Control de estados Estado δ Estado(s) Función de transición A B # pila Teoría de los lenguajes de programación Tema 5 - Autómata de pila – definición formal 14 Definición formal AP Un AP se define mediante una septupla AP=(Σ, Q, Г, δ, q0, #, F), donde: - Σ : alfabeto de las palabras a reconocer por el autómata - Q : conjunto de estados, es un conjunto finito no vacío - Г : alfabeto de los símbolos de la pila - δ : Q x Σ U {ε ,$} x Г → P x Г*, en donde P ⊆ Q función de transición, que transforma la terna ordenada (qi, a, A) → (qj, α ) - q0 ∈ Q, estado inicial (estado de partida) - # : símbolo de la base de la pila - F ⊆ Q: conjunto de estados finales o de aceptación Significación de una función de transición (qi, a, A) → (qj, BB) qi - estado actual del autómata a - símbolo leído de la entrada, puede que no se lea de la entrada ε A - elemento que se quita de la pila, puede que no se quite nada de la pila ε qj - estado destino del autómata BB - elementos a poner en la pila. Puede que no se ponga nada en la pila ε Teoría de los lenguajes de programación Tema 5 - Autómata de pila – Ejemplo 15 Ejemplo Dado el lenguaje L = {an bn | n >0}, especificar un AP que lo reconozca: - Hay que buscar una lógica que simule la entrada a través de la pila: Apilar las aes mientras que vengan, desapilar las aes cuando llegan las bes, cuando llegue el final de palabra no habrá elementos en la pila AP= ( Σ={a, b}, Q={ q0, q1, q2}, Г={A, #}, δ, q0, #, F={ q2}) δ (q0, a, #) → (q0, A#) - lee a , desapila # y apila A#, no se cambia de estado δ (q0, a, A) → (q0, AA) - lee a, desapila A y apila AA, no se cambia de estado δ (q0, b, A) → (q1, ε) - lee b, desapila A y no apila nada, se cambia de estado δ (q1, b, A) → (q1, ε) - lee b, desapila A y no apila nada, no se cambia de estado δ (q1, $, #) → (q2, ε) - lee $, desapila # y no apila nada, se cambia de estado La palabra ha finalizado - la pila está vacía y estamos en un estado final Representación gráfica de los AP Para mejorar la legibilidad y visibilidad de los autómatas se pueden utilizar dos tipos de representaciones gráficas: diagramas o las tablas de transición: Teoría de los lenguajes de programación Tema 5 - Autómata de pila – representación 16 Diagramas de transición La representación de diagrama de transiciones, es un grafo dirigido, en el que: - Los nodos se representa por un círculo, que se etiquetan con los estados q ∈ Q Los arcos son etiquetados con el símbolo de lectura, una coma que lo separa del símbolo que se desapila, un punto y coma que lo separa de los símbolos que se quieren apilar - así desde el nodo qi al qj, si existe la función δ(qi, a, A)→(qj, BB). El arco será a, A; BB - - El estado inicial tiene un arco entrante no etiquetado → - Los estados finales qf ∈ F se señalan por doble círculo, en los AP puede que no existan estados finales Ejemplo de AP representado por un diagrama de transición, que reconoce el lenguaje : L = {an bn | n>0} a,A;AA a,#;A# q0 b,A ;ε b,A;ε q1 q2 $,#;ε Teoría de los lenguajes de programación Tema 5 - Autómata de pila – definición formal - representación Tablas de transición Representación tabular que relaciona los componentes: entradas, estados y pila - Cada fila corresponde a un estado q ∈ Q - Cada columna corresponde al símbolo de entrada a ∈Σ y al símbolo de la cima de pila A∈Г - La fila asociada al estado inicial tiene una → - Las filas asociadas a los estados finales de existir tienen el símbolo * En la posición (q, (a, A)), q ∈ Q, a∈ Σ y A∈Г está el estado y los elementos a apilar que determine la función δ(q, a, A) en este caso (p, α) q ∈ Q y α∈Г* AFD representado por una tabla de transición que reconoce el lenguaje L = {anbm | n,m>0} estados a, A a,# b,A →q0 q0, AA q0, A# q1, ε q1 *q2 b,# $,# ε,B A, ε B, ε q1 , ε q2, ε Teoría de los lenguajes de programación Tema 5 - Autómata de pila – lenguaje reconocido 18 Lenguaje reconocido por un autómata de pila El lenguaje que reconoce un AP será: el conjunto de palabras que partiendo del una situación inicial, se llega a una situación final en cero o más movimientos. En los AP existen dos formas de reconocimiento de los lenguajes: - Reconocimiento por llegada a estado final Lenguaje={ x |x ∈Σ*, (qi , x, #)→*(qf, ε, α), qf ∈F, α ∈ Г*} AP Ejemplo: L = {an bm | n>=m; n, m>0} AF= (Σ={a, b}, Q={ q0, q1, q2} Г={A, #}, δ, q0, #, F= { q2}), δ(q0, a, #) → (q0, A#) , δ(q0, a, A) → (q0, AA), δ(q0, b, A) → (q1, ε) δ(q1, b, A) → (q1, ε), δ(q1, $, a) → (q2, ε) b,A;ε a,A;AA a,#;A# q0 b,A ;ε q1 $,A;ε q2 $,# ;ε Teoría de los lenguajes de programación Tema 5 - Autómata de pila – lenguaje reconocido 19 Reconocimiento por llegada vaciado de pila Lenguaje={ x | x ∈Σ*, (qi , x, #)→*(qj, ε, ε) } AP L = {anbm | n>=m; n, m>0} AF= (Σ={a, b}, Q={ q0, q1} Г={A, #}, δ, q0, #, F={q1}), δ (q0, a, #) → (q0, A#) , δ (q0, a, A) → (q0, AA), δ(q0, b, A) → (q1, ε) δ (q1, b, A) → (q1, ε), δ (q1, $, #) → (q1, ε) (q0, x=aab$, # ) → (q0, ab$, A#) → (q0, b$, AA#)→(q1,$, A#) →(q1, ε, #)→(q1, ε, ε) a,A;AA a,#;A# q0 b,A ;ε q1 b,A;ε $,#;ε ε,A;ε Teoría de los lenguajes de programación Tema 5 - Autómata de pila – lenguaje reconocido 20 Autómatas de pila deterministas APD Un autómata de pila es determinista APD cuando para cualquier situación sólo puede darse como mucho un movimiento, para ello debe cumplir las siguientes condiciones: ∀q∈Q , ∀A∈Г y a∈Σ |(qi, a, A )| <2 ∀ q ∈ Q y ∀ A ∈ Г |(qi, ε, A )| <0 ∀q∈Q y ∀a∈Σ |(qi, a, ε )| <0 Ejemplo: L= {a2nbn | n >0}, APD por vaciado de pila que reconozca el anterior a,A;AA b,A;ε a,#;A# q0 b,A ;ε b,A;ε $,#;ε q2 q1 $,A;ε Teoría de los lenguajes de programación Tema 5 - Autómata de pila no determinsitas 21 Autómatas de pila no deterministas APND Un autómata de pila es no determinista APD cuando existe alguna situación que puede darse mas de un movimiento. Se pueden dar tres situaciones de no determinismo que veremos a continuación: 1) (qi , a, a)→{(qj , α1) (qk , α2 ),…..} Ejemplo: L= {anbm | n<>m; n,m>0} a,# ;a# a,a;aa b,a;ε b,a;ε $,a;ε q2 q1 1 q3 q0 $,# ;ε a,# ;a# q4 a,a;aa b,a;ε b,a;ε q6 q5 b,# ;# 2 b,# ;# Teoría de los lenguajes de programación Tema 5 - Autómata de pila no determinsitas APND 22 APND 2) (qi, a, a)→(….) (qi , ε, a)→(….) Ejemplo: L= {anbm | n>= m ; n,m>=1} a) reconocimiento por vaciado de pila a,A;AA a,#;A# q0 q1 b,A;ε $,#;ε ε,A;ε b,A ;ε (q0, aab$, # ) → (q0, ab$, a#) → (q0, b$, aa#)→(q1,$, a#)→(q1, ε, #)→(q1, ε, ε) (q0, aaabb$, # ) → (q0, aabb$, a#) → (q0, bb$, aaa#)→(q1,b$, aa#)→(q1, b$, #) b) reconocimiento por llegada a estado final a,A;AA a,#;A# q0 b,A ;ε q2 q1 b,A ;ε $,A;ε $,#;ε Teoría de los lenguajes de programación Tema 5 - Autómata de pila no determinsitas APND 23 3) (qi, a, a)→(….) (qi , ε, a)→(….) Ejemplo: L= {an bm | n<=m , n, m>=1} a) reconocimiento por vaciado de pila b,A;ε $,#;ε B,ε;ε a,A;AA a,#;A# q0 q1 b,A ;ε b) reconocimiento por llegada a estado final b,A;ε B,ε;ε a,A;AA a,#;A# q0 q2 q1 b,A ;ε $,#;ε Teoría de los lenguajes de programación Tema 5 - Transformación de GIC a AP 24 Transformación de gramática independiente del contexto a AP Dada la gramática G =(Σ={a,b},N={S,A},S,P) P: S → aA A→Sb|b construir un AP que reconozca el lenguaje que genera la gramática G. Proceso de transformación: 1) Poner el símbolo inicial en la pila (ε,#;S#) 2) Para cada producción A→α sustituir parte izquierda por parte derecha (ε,A; α) 3) Para cada símbolo del alfabeto de la gramática ∀aєΣ poner (a,a;ε) 4) Poner la transición para que el reconocimiento sea por vaciado de pila ($,#;ε ) ε,S;aA a,a;ε ε,#;S# q0 q1 ε, A; Sb b,b; ε ε,A; b $,#;ε q0,aabb$,#)→ (q1,aabb$,S#)→(q1,aabb$,aA#)→(q1,abb$,A#)→(q1,abb$,Sb#) (q1,abb$,aAb#)→(q1,bb$,Ab#)→(q1,bb$,bb#)→(q1,b$,b#)→(q1,$,#)→(q1,ε,ε) Teoría de los lenguajes de programación Ejercicios de gramáticas de tipo 2 y autómatas de pila 25 Obtener una gramática para cada uno de los siguientes lenguajes: 1. ∑= {a, b, c}, L = {an bm cn | n, m >= 1} 2. ∑= {a, b, c}, L = {an bm cn+2m | n >=0, m >= 1} 3. ∑= {a, b, c}, L = {an bn+m cm | n >= 1, m >= 0} 4. ∑= {a, b}, L = {an bm | n >= m >= 1} 5. ∑= {a, b}, L = {an bm | n > m >= 0} 6. ∑ = {a, b, c}, L = {am bn ck | m > n + k ; n, k >=0} 7. ∑ = {a, b}, L = { anbm | m <= n <= 2m ; n, m >=0} 8. ∑ = {a, b}, L = { anbm | n <>m ; n, m >0} 9. 10. L = { v·w | v ∈ (ab)+ , con w ∈ (a | b)+ y con |v| ≤ |w| } ∑ = {a, b, c}, L = {anbmck | n es un número par, posiblemente el 0, k es un número impar y m > k+n } 11. ∑={a,b}, L={a2nbn|n>0} U {anb2n|n>0}. 12. ∑= {a,b,c} , L = { xcy | x,y ∈{a,b}* en donde |x| =2 |y| Teoría de los lenguajes de programación Ejercicios de gramáticas de tipo 2 y autómatas de pila 26 1. Sea el alfabeto Σ = {a, b} se considera el lenguaje de las palabras que tienen al menos dos símbolos “b” y que cumplen la propiedad de que el número de símbolos “a” que hay antes de la primera “b” es estrictamente mayor que el número de símbolos “a” que hay después de la última “b”. Por ejemplo, pertenecen a este lenguaje: aaabbaa, aabb, abbb, aabababaaba. 1. No pertenecen: abaabaa, baaba, bab. Dado el alfabeto Σ= {a, b} sea el lenguaje: L = { vbbw | v, w ∈ {a,b}* y |v| >= |w| (la longitud de v es mayor o igual que la de w) } 2. Dado el alfabeto Σ= {a, b} y, sea el lenguaje L = { vw | en donde v, w ∈{a,b}* y |v| = |w| }. 3. Con el alfabeto ∑={a,b,c} se define el lenguaje L = {w·cn | w pertenece a {a,b}+, n>0} en el que además se cumple que: a. b. si w termina en a, entonces la longitud de w es mayor o igual que n si w termina en b, entonces la longitud de w es menor o igual que n Ejemplos de palabras del lenguaje: abbacc, aaaccc, abccc, bbbabccccc Ejemplos de palabras que no son del lenguaje: abbaccccc, aaacccccccc, abc, bbbabccc Teoría de los lenguajes de programación Ejercicios de gramáticas de tipo 2 y autómatas de pila 27 1. Dado el alfabeto Σ={a,b,0,1}, sea el lenguaje L={w·(0|1)·v | v,w pertenecen a {a,b}+ y |w|=|v|}, en el que además se cumplen las siguientes restricciones: a. b. Si el dígito central es 0, w deberá empezar por a Pero si el dígito central es 1, entonces es v quien empezará por a. Ejemplos de palabras válidas: aba0bba, a0a, a0b, a1a, b1a, abb1abb Ejemplos de algunas palabras no válidas: b0a, ba0aa, a1b, ba1ba Dado el alfabeto ∑ = {a, b, c}, sea el lenguaje L = {wcn | w ∈ {a, b}* ; n = número de subcadenas ab de w ; n>= 0} Es decir, el número de símbolos c del final coincide con el número de subcadenas ab que tiene la palabra al principio, es decir, en w (teniendo en cuenta que en w puede haber cualquier combinación de símbolos a y b) 1. Teoría de los lenguajes de programación Ejercicios de gramáticas de tipo 2 y autómatas de pila 28 Justificar si las siguientes dos transiciones de un autómata a pila suponen no determinismo: ( q0, a, b ) = ( q2, ab), ( q0, a, ε ) = ( q1, a) 2. Sea el siguiente autómata a pila con reconocimiento por vaciado de pila: δ(q0, a, #) = (q0, a#) , δ(q0, a, a) = (q0, aa), δ(q0, b, a) = { (q1, ε), (q2, ε) } δ(q1, b, a) = (q1, ε), δ(q1, $, #) = (q1, ε) δ(q2, ε, a) = (q3, ε) δ(q3, b, a) = (q2, ε), δ(q3, $, #) = (q3, ε) Determinar el lenguaje reconocido por el mismo. Dado el siguiente autómata de pila AP1 que realiza el reconocimiento por vaciado de pila: AP1 a,ε;a $,#;ε b,a;ε b,a;ε q0 q2 q1 b,a; ε q3 q2 ε,a; q1 $,#;ε b,a;ε Teoría de los lenguajes de programación Ejercicios de gramáticas de tipo 2 y autómatas de pila 29 Dado el alfabeto ∑ = {a, b}, sea el lenguaje L = {an bn | n >= 0}. Encontrar un autómata de pila que reconozca el lenguaje complementario de L. Considerar que todas las palabras vienen finalizadas por el símbolo $. Dado el alfabeto Σ= {a, b}, sea el lenguaje L = { anbm | n > m; n, m > 0 }.Encontrar un autómata a pila (AP) que reconozca L* (L estrella). Se pide: Sin aplicar ningún algoritmo, es decir, partiendo de la definición del lenguaje, obtener el diagrama de transiciones de un autómata a pila (AP) que lo reconozca. Teoría de los lenguajes de programación Ejercicios de gramáticas de tipo 2 y autómatas de pila 30 Sea la siguiente gramática de contexto libre sobre el alfabeto Σ = { ‘(‘ , ‘)’ } S ---> ( ) | ( S ) | ( ) S | ( S ) S que genera todas las expresiones posibles de paréntesis equilibrados, es decir, que cumplen las siguientes condiciones: Tienen igual número de símbolos ‘(‘ que de símbolos ’)’. Cualquier prefijo de la expresión tiene un número de símbolos ‘(‘ mayor o igual que de símbolos ‘)’. Es decir, en un punto de la expresión puede haber un número indeterminado de paréntesis de cerrar pendientes, pero no de paréntesis de abrir. Por ejemplo, son válidas las expresiones : ( ), ( ) ( ), ( ( ) ( ) ), ( ( ) ( ) (( ) ) ). Se pide: Sin aplicar ningún algoritmo, es decir, partiendo de la definición del lenguaje, obtener el diagrama de transiciones de un autómata a pila (AP) que lo reconozca. Explicar si el AP es determinista o no. Teoría de los lenguajes de programación