Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Automatas A Pilas Ejemplo PDF
Automatas A Pilas Ejemplo PDF
7.1. Introducción
7.2. Definición de Autómatas con pila.
7.3. Lenguaje aceptado por un autómata con pila.
7.4. Autómatas con pila y lenguajes libres del contexto.
7.4.1. Reconocimiento descendente. Gramáticas LL(k).
7.4.1.1. Proceso de Análisis Sintáctico Descendente.
7.4.1.2. Analizadores LL y autómatas de pila no deterministas
7.4.1.3. Implementación de Analizadores LL
Transformación de una gramática para su análisis descendente.
Construcción de los conjuntos PRIMERO Y SIGUIENTE.
Condiciones LL(1).
7.4.1.4. Algoritmo de análisis sintáctico LL
Construcción de Tablas LL.
7.4.2. Reconocimiento ascendente. Gramáticas LR(k).
7.4.2.1. Introducción
7.4.2.2. Proceso de Análisis Sintáctico Ascendente.
7.4.2.3. Analizadores LR y autómatas de pila no deterministas
7.4.2.4. Implementación de Analizadores LR
7.4.2.5. Algoritmo de análisis sintáctico LR
7.4.2.6. Construcción de Tablas LR.
TALF. Tema 7 nº 2
7.1. Introducción
Los Autómatas con Pila son una extensión de los AFD a los que se les añade
una memoria (pila).
En la pila se almacenan símbolos de la cadena de entrada y de la gramática, así
como caracteres especiales (#) para indicar el estado de pila vacía.
Las transiciones son de la forma: (p,x,s;q,t)
p=estado inicial
q=estado al que llega p x, s; t q
x= símbolo de la cadena de entrada
s=símbolo que se desapila
t=símbolo que se apila
Gráficamente:
x x
Cabeza de lectura Cabeza de lectura
CIMA CIMA
s t
r s´ r s´
p p
PILA PILA
q q
Mecanismo de control Mecanismo de control
TALF. Tema 7 nº 3
7.2. Definición de Autómatas con pila.
TALF. Tema 7 nº 4
7.2. Definición de Autómatas con pila.
Descripciones instantáneas
Dado un AP, podemos describir el proceso de aceptación o rechazo de una palabra
de ∑* mediante una serie de descripciones instantáneas de la forma (q, x, Z) que
definen respectivamente el estado del AP, la entrada que queda por leer, y el
contenido de la pila en un momento dado.
Decimos que una descripción instantánea (q, az, AZ) precede a otra (p, z, YZ) en
un paso y se expresa como:(q, az, AZ)(p, z, YZ), si (p, Y)f(q, a, A).
Decimos que una descripción instantánea (q, az, AZ)precede a otra (p, z, YZ) en n
pasos y se expresa como:(q, az, AZ) * (p, z, YZ), si existen una serie de
descripciones que cumplen la relación de precedencia anterior de una en una.
TALF. Tema 7 nº 5
7.3. Lenguaje aceptado por un autómata con pila.
LPVLEF λ,λ; #
i q0
1. Igual que el anterior.
qi λ, #; λ
2. Nuevo estado f tal que qQ: f
qj λ, #; λ
TALF. Tema 7 nº 6
7.3. Lenguaje aceptado por un autómata con pila. Ejemplo.
x, ;x y,x;
y,x;
1 2
, ; # y,x; , ; , #;
i 1 2 p f
TALF. Tema 7 nº 7
7.3. Lenguaje aceptado por un autómata con pila.
TALF. Tema 7 nº 8
7.4.1.1. Proceso de Análisis Sintáctico Descendente.
TALF. Tema 7 nº 9
7.4.1.1. Proceso de Análisis Sintáctico.
aa$ Apilar S
S aa$ S::=aS
S a$ S::=a
a a$ Desapilar a; Leer()
$ aceptar
TALF. Tema 7 nº 10
7.4.1.2. Analizadores LL y autómatas de pila no deterministas
, A; A P
, ; # , S; , #;
i p q f
a, a; a T
TALF. Tema 7 nº 11
7.4.1.2. Analizadores LL y autómatas de pila no deterministas
Ejemplo:
G = ({a, b, z}, {S, M, N}, S, {S ::= zMNz, M ::= aMa | z, N ::= bNb | z})
a,a;
b,b;
z,z;
, ;S , #;
, ; # p
i q f
, S; zMNz
,N; bNb
, M; aMa
, N; z
, M; z
TALF. Tema 7 nº 12
7.4.1.2. Analizadores LL y autómatas de pila no deterministas
estado Pila Entrada Acción indeterminación
i λ zazabzbz$ (i, λ, λ ; p, #)
p # zazabzbz$ (p, λ, λ ; q, S)
q S# zazabzbz$
(q, λ, S ; q, zMNz)
q zMNz# zazabzbz$ (q, z,z;q,λ)
(q,λ,M;q, aMa)
q MNz# azabzbz$ (q,λ,M;q, aMa) | (q, λ, M ; q, z)
q aMaNz# azabzbz$ (q, a,a;q,λ)
(q, λ,M; q, z)
q MaNz# zabzbz$ (q, λ, M ; q, z)| (q,λ,M;q, aMa)
q zaNz# zabzbz$
(q, z,z;q,λ)
q aNz# abzbz$
(q, a,a;q,λ)
q Nz# bzbz$ (q,λ,N;q, bNb) | (q, λ, N ; q, z)
q Nbz# zbz$
(q, λ, N ; q, z)
q zbz# zbz$ (q, z,z;q,λ)
q z# z$
(q, z,z;q,λ)
q # $ (q, λ, #; f, λ)
f λ λ Aceptar
TALF. Tema 7 nº 13
7.4.1.2. Analizadores LL y autómatas de pila no deterministas
Acción
Si aceptamos una cadena usando este
(i, λ, λ ; p, #)
autómata podremos reconstruir la
(p, λ, λ ; q, S) secuencia de derivaciones que nos conduce
(q, λ, S ; q, zMNz) a ella a partir de S.
(q, z,z;q,λ)
(q, z,z;q,λ)
(q, a,a;q,λ)
(q,λ,N;q, bNb) | (q, λ, N ; q, z)
(q, b,b;q,λ)
(q, λ, N ; q, z)
(q, z,z;q,λ)
(q, b,b;q,λ)
(q, z,z;q,λ)
(q, λ, #; f, λ)
Aceptar
S zMNz zaMaNz zazaNz zazabNbzzazabzbz
TALF. Tema 7 nº 14
7.4.1.3. Implementación de Analizadores LL
Los analizadores sintácticos descendentes son lo que construyen el árbol
sintáctico de la sentencia a reconocer de una forma descendente,
comenzando por el símbolo inicial o raíz, hasta llegar a los símbolos
terminales que forman la sentencia.
Se desea un análisis sintáctico descendente sin retroceso, por medio del uso
de gramáticas LL(k=1):
pueden analizar sintácticamente sin retroceso, en forma descendente, examinando
en cada paso todos los símbolos procesados anteriormente y los k=1 símbolos más
a la derecha
Para eliminar el retroceso en el análisis descendente, se ha de elegir
correctamente la producción correspondiente a cada no terminal que se
expande. Es decir que el análisis descendente ha de ser determinista, y
sólo se debe de dejar tomar una opción en la expansión de cada no terminal.
Gramáticas LL(k)
Son un subconjunto de las gramáticas libres de contexto. Permiten un análisis
descendente determinista (o sin retroceso), por medio del reconocimiento de la
cadena de entrada de izquierda a derecha ("Left to right") y que va tomando las
derivaciones más hacia la izquierda ("Leftmost") con sólo mirar los k tokens
situados a continuación de donde se halla.
Por definición de gramática LL(k):
Toda gramática LL(k) es no ambigua.
no es recursiva a izquierdas.
TALF. Tema 7 nº 15
7.4.1.3. Implementación de Analizadores LL
TALF. Tema 7 nº 16
7.4.1.3. Implementación de Analizadores LL
TALF. Tema 7 nº 17
7.4.1.3. Implementación de Analizadores LL
TALF. Tema 7 nº 18
7.4.1.3. Implementación de Analizadores LL
TALF. Tema 7 nº 19
7.4.1.3. Implementación de Analizadores LL
TALF. Tema 7 nº 20
7.4.1.3. Implementación de Analizadores LL
TALF. Tema 7 nº 21
7.4.1.3. Implementación de Analizadores LL
Ejemplo:
Primero Siguiente
B bCDE | B b cdaf$g
D dD | D d bgca$f
E gAf | c E gc cdaf$g
TALF. Tema 7 nº 22
7.4.1.3. Implementación de Analizadores LL
Condiciones LL(1)
Símbolos directores
Ayudan a decidir qué regla utilizar en cada paso
Construcción
Conjunto Primero PRIM ()
Conjunto Siguiente SIG (A)
Regla
DIR ( A := ) =
SI λ PRIM() ENTONCES = PRIM ()– {λ}SIG(A)
SINO = PRIM ()
TALF. Tema 7 nº 23
7.4.1.3. Implementación de Analizadores LL
TALF. Tema 7 nº 24
7.4.1.3. Implementación de Analizadores LL
i + i * i $ Entrada
Salida
Analizador sintáctico
$
Tabla LL(1)
(gramática LL(1))
Pila
TALF. Tema 7 nº 25
7.4.1.4. Algoritmo de análisis sintáctico LL
TALF. Tema 7 nº 26
7.4.1.4. Algoritmo de análisis sintáctico LL
Algoritmo:
Procedimiento Análisis_LL();
Inserta (S); // S= axioma
Leer(símbolo); // Preanálisis=símbolo
Mientras pila_no_vacía hacer
Caso cima_pila sea
´terminal´: Si cima_pila==símbolo entonces
Desapilar(símbolo);
Leer(símbolo);
sino
Error()
fsi
´No_terminal´: Si TABLA[cima_pila,símbolo] != ´error´ entonces
Desapilar(cima_pila);
Apila(TABLA[cima_pila,símbolo]);
sino
Error()
fsi
fcaso
fmientras
fprocedimiento
TALF. Tema 7 nº 27
7.4.1.4. Algoritmo de análisis sintáctico LL. Ejemplo.
T n( +-)$ E 1 1
E´ 2 3 4 4
T´ */ +-)$
T 5 5
F n( +-*/)$
T´ 8 8 6 7 8 8
F 10 9
TALF. Tema 7 nº 28
7.4.1.4. Algoritmo de análisis sintáctico LL. Ejemplo.
TALF. Tema 7 nº 29
7.4.2. Reconocimiento ascendente. Gramáticas LR(k).
TALF. Tema 7 nº 30
7.4.2.1. Introducción
TALF. Tema 7 nº 31
7.4.2.2. Proceso de Análisis Sintáctico
aa$ Desplazar a
a a$ Reduce S::=a
S a$ Desplazar a
Sa $ reduce S::=Sa
S $ aceptar
TALF. Tema 7 nº 33
7.4.2.3. Analizadores LR y autómatas de pila no deterministas
, ; A A P
, ; # , S; , #;
i p q f
a, ; a a T
TALF. Tema 7 nº 34
7.4.2.3. Analizadores LR y autómatas de pila no deterministas
Ejemplo:
G = ({a, b, z}, {S, M, N}, S, {S ::= zMNz, M ::= aMa | z, N ::= bNb | z})
a, ; a
b, ; b
z, ; z
, S; , #;
, ; #
i p q f
, zMNz; S , bNb; M
, aMa;M , z;N
, z; M
TALF. Tema 7 nº 35
7.4.2.3. Analizadores LR y autómatas de pila no deterministas
estado Pila Entrada Acción indeterminación
I - zazabzbz$ Push #
P #zMN z$ Shift z
P #S $ Pop S
Q # $ Pop #
F - $ Accept
TALF. Tema 7 nº 36
7.4.2.3. Analizadores LR y autómatas de pila no deterministas
shift z
z a z a b z b z
1 M
2 M
3 N
4
N
5 S
S zMNz zMbNbz zMbzbz zaMabzbz azabzbz
TALF. Tema 7 nº 38
7.4.2.4. Implementación de Analizadores LR
SOLUCIONES
1. AUTÓMATA NO DETERMINISTA
Explosión Combinatoria
Preanálisis(K)
2. MANEJO DE LA PILA
TALF. Tema 7 nº 39
7.4.2.4. Implementación de Analizadores LR
x, ; x
y, ; y
, ; # , S; , #;
i p q f
, xSy; S
, xy;S
TALF. Tema 7 nº 40
7.4.2.4. Implementación de Analizadores LR.
i - 0 xxxyyy$ Push #
p # 1 xxxyyy$ shift x
0=
p #x 2 xxyyy$ shift x
p #S 4 $ Pop S
5 = #xx*S
q # 1 $ Pop #
f - 0 $ Accept
TALF. Tema 7 nº 41
7.4.2.4. Implementación de Analizadores LR.
Estado_Pila = Marca
TABLA
TALF. Tema 7 nº 42
7.4.2.5. Algoritmo de análisis sintáctico LR
ENTRADA
a1 ....... ai ...... an $
Sm-1
SALIDA
Xm-1
Programa para
.... análisis sintáctico LR
Sm
S1
X0
S0 acción ir_a
TABLA LR
PILA
TALF. Tema 7 nº 43
7.4.2.5. Algoritmo de análisis sintáctico LR
TALF. Tema 7 nº 44
7.4.2.5. Algoritmo de análisis sintáctico LR
TABLA LR
..
a1 a2 an $ A1 A2 ... An
.
.
.
Acción Ir_a
TALF. Tema 7 nº 45
7.4.2.5. Algoritmo de análisis sintáctico LR
TALF. Tema 7 nº 46
7.4.2.5. Algoritmo de análisis sintáctico LR
Si Acción(m,c) es:
TALF. Tema 7 nº 47
7.4.2.5. Algoritmo de análisis sintáctico LR
Analizador sintáctico
TALF. Tema 7 nº 48
7.4.2.5. Algoritmo de análisis sintáctico LR
TALF. Tema 7 nº 49
7.4.2.5. Algoritmo de análisis sintáctico LR
1 S’::=S
Ejemplo:
G = ({x, y}, {S’, S}, S, {S’ ::= S , S ::= x S y | x y}) 2 S::=xSy
Entrada xxyy
3 S::=xy
Algoritmo de análisis
Pila Entrada Acción
x y $ S’ S push (0)
a := token();
0 xxyy$ Shift 2
0 Shift 2 1 REPEAT
Sea s el estado en el tope de la pila
0x2 xyy$ Shift 2 IF Acción [s, a] = dj
1 aceptar push (j)
0x2x2 yy$ Shift 3 a := token ();
2 Shift 2 Shift 3 4 ELSEIF Acción [s,a] = rk
TALF. Tema 7 nº 50
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR.
0 = y
1 4 5
i = S S
S
2 = xx*
x y
3 = xx*y 0 2 3
4 = xx*S
5 = xx*Sy
TALF. Tema 7 nº 51
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
„ gramática aumentada
• Elementos LR(0) Construcción canónica de conjuntos de elementos
• Cerradura(I)
• función ir_a
TALF. Tema 7 nº 52
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
Definiciones previas:
Si G es una gramática con símbolo inicial S, entonces G’, la gramática
aumentada para G, es G con un nuevo símbolo inicial S’ y la producción
S’ S. El propósito de esta nueva producción inicial es indicar al
analizador cuándo debe detener el análisis sintáctico y anunciar la
aceptación de la cadena.
Un elemento del análisis sintáctico LR(0) de una gramática G es una
regla gramatical de G a la que se añade como información adicional un
punto que puede aparecer en cualquier lugar de la parte derecha.
Ejemplo, para la regla S ::= xSy, los elementos LR(0) son:
S ::= xSy, S::=xSy, S::=xSy y S::=xSy.
Las reglas de la forma A ::= tan sólo tienen un elemento LR(0) que
se puede escribir de tres formas distintas:
A:: =
A:: =
A ::=
TALF. Tema 7 nº 53
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
Se define ir_a(I,X) como la cerradura del conjunto de todos los elementos [A::= X]
tales que [A::= X ] esté en I
Ejemplo
Si I es el conjunto de elementos {[ S’::= S; S::= xSy; S::= xy]}
entonces ir_a(I,x) = {S::=x Sy ; S::= xSy ; S::= xy ; S::=x y}
TALF. Tema 7 nº 54
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
TALF. Tema 7 nº 55
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR.
Pseudocódigo del algoritmo para construir C, colección canónica de conjuntos de elementos LR(0) para una gramática
aumentada G’
A partir de la Colección canónica de elementos con transiciones dadas por ir_a se construye el AF.
TALF. Tema 7 nº 56
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
TALF. Tema 7 nº 57
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR. Ejemplo.
„ Ejemplo: Aplicar el algoritmo a G = ({x, y}, {S’, S}, S, {S’ ::= S , S ::= x S y | x y})
1. Estado inicial del autómata Cierre({S’::=„S) (Añadiendo al estado todos los elementos LR(0) iniciales de todas las S_producciones de la gramática.)
2. Dado que en este estado el punto de los elementos LR(0) está a la izquierda del símbolo S y del símbolo x, son posibles dos
0 transiciones etiquetadas con estos caracteres. La primera nos conduce hacia un estado etiquetado con S’::= S . La segunda
inicialmente nos conduciría hacia un estado etiquetado con los elementos {S::=xSy, S::=x . En esta situación, el punto ha
S' ::= „S quedado a la izquierda del símbolo no terminal S por lo que siguiendo los pasos del algoritmo deberíamos añadir a este estado los
S ::= xSy elementos LR(0) iniciales de todas las S-producciones .
S ::= xy
0
1
S' ::= S S
S’ ::= S
S ::=
xSy
S ::= xy
x
2
S ::=x Sy
S ::=x y
S ::= xSy
S ::= xy
TALF. Tema 7 nº 58
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
0 1
S' ::= S S
S’ ::= S
S::= xSy
S ::= xy
4 5
x y
S ::=xSy S::=xSy
2 S
S ::=x Sy 3
S ::=x y y S ::= xy
S ::= xSy
S ::= xy
TALF. Tema 7 nº 59
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
a
Por cada transición de la forma i j a T añadir a acción (i,,j )= shift j
3.2. Si [A::= ] está en en i ,distinto de S’::=S , entonces acción[i,a]=“reducir k” a SIG(A) siendo k el número de la regla A::= en el conjunto de
reglas de producción.
3.3. Si [S’::=S ] está en i , entonces acción[i,$]= “aceptar”.
4. Las transiciones ir_a para el estado i se construyen A∑N utilizando la regla:
Si f(i ,A)= j , entonces ir_a[ i , A ]= j.
A
Por cada ransición de la forma i j A N asignamos a la entrada ir_a(i,A) el valor j
5. Todas las entradas no definidas por las reglas 2 y 3 son consideradas “error”.
6. El estado inicial del analizador es el estado inicial del AFD, que contiene [S’::= S ].
TALF. Tema 7 nº 60
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
CONFLICTOS
LA GRAMÁTICA NO ES LR
„ Si acción[i,a] = desplazar i / reducir j se consulta la entrada, y si el „ Si acción[i,a] = reducir i / reducir j, se reduce la regla a la que se haya
carácter que aparece es a entonces se lleva a cabo la acción desplazar i. En asignado un número más bajo. Esto es, si i < j se reduce la regla número i, en
TALF. Tema 7 nº 61
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
Analizadores LR(0)
método LR(0)
solución
problema reducción de una regla como A::= tan sólo cuando el carácter
que se encuentra en la cinta de entrada pertenezca al conjunto
conflictos d/r siguiente (A).
TALF. Tema 7 nº 62
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
0 1
S' ::= S
S S’ ::= S x y $ S’ S
S::=xS
y
0 Shift2 1
S ::=
xy 4 5
1 S’::=S 1 aceptar
x y
S S::=xSy
2 :=xSy 2 S::=xSy 2 Shift2 Shift3 4
S
5 Reduce2 Reduce2
TALF. Tema 7 nº 63
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
Ejemplo: i e a $ S’ S
Construir el autómata para reconocer la sentencia if-then-else
sent :: = if exp then sent else sent 0 Shiift 2 Shiift 3 1
| if exp then sent
| otra_sent
1 aceptar
De forma reducida G = ({i, e, a}, {S’,S}, {S’::=S,S::= iSeS | iS | a})
2 Shiift 2 Shiift 3 4
1 S’::=S
0
1 2 S::=iSeS 3 Reduce 4 Reduce 4
S 3 S::=iS
S' ::= S S’ ::= S 4 Shiift 5 Reduce 3
S ::= iSeS 4 S::= a
Reduce 3
S ::= iS
S ::= a 5 Shiift 2 Shiift 3 6
i 2 6 Reduce 2 Reduce 2
4
a
S ::= iSeS S
S ::= iS S ::=iS eS S ::=iS
3 a S ::= iSeS i
S ::= iS
S ::= a
S ::= a
e
CONFLICTO S/R
i
a S ::= iSeS S ::=
iSeS 5
S ::= iS
6 S ::= a
S ::=iSeS S
TALF. Tema 7 nº 64
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
Ejemplo: analizar la traza del autómata guiado por la tabla de la gramática de if-then-else para la cadena de entrada iiaeaea$. Esta cadena se corresponde con la sentencia:
if exp then
if exp then
sent
else • La identación recoge el anidamiento deseado para esta sentencia pero no
sent siempre corresponde con el que realiza el analizador.
else
sent
TALF. Tema 7 nº 65
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
Ejemplo: obtener un analizador para listas de elementos que pueden estar vacías.
La estructura sintáctica es: Lista::= lista elemento |
G = ({i}, {S’, S }, S’, {S’ ::= S, S::=Si | })
0 1 2
S i
S' ::= S S' ::= S’ ::= S S' ::= S’ ::= Si
Si S' ::= Si
0S1 i$ Shift 2
3 S::= 2 Reduce 2 Reduce 2
0S1i2 $ Reduce S::=Si
0S1 $ aceptar
TALF. Tema 7 nº 66
7.4.2.6. CONSTRUCCIÓN DE TABLAS LR
TALF. Tema 7 nº 67