Tema 5 - Autómata de pila

Anuncio
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
Descargar