[apuntes] unidad7
Post on 26-Oct-2014
18 Views
Preview:
TRANSCRIPT
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7. RECONOCIMIENTO DETERMINISTA DE LENGUAJES INDEPENDIENTES DEL CONTEXTO. LENGUAJES LL(K) Y LR(K)
7.1. Derivación por la izquierda
Ejemplo:G = ({E}, {+, *, (, ), -, i}, {E E + E | E * E | (E) | -E | i}, E)
E -E -(E) -(E + E) -(i + E) -(i + i)
7.2. Derivación por la derecha
Ejemplo:G = ({E}, {+, *, (, ), -, i}, {E E + E | E * E | (E) | -E | i}, E)
E -E -(E) -(E + E) -(E + i) -(i + i)
7.3. Árbol de análisis sintáctico
Un árbol de análisis sintáctico es un árbol con las siguientes propiedades:
1. La raíz está etiquetada con el símbolo inicial.2. Cada hoja está etiquetada con un terminal o con .3. Cada nodo interior está etiquetado con un no terminal.4. Si A es el no terminal que etiqueta a algún nodo interior y X1, X2, ... , Xn son las etiquetas de
los hijos de ese nodo, de izquierda a derecha, entonces A X1 X2 ... Xn es una producción.
Ejemplo:G = ({E}, {+, *, (, ), -, i}, {E E + E | E * E | (E) | -E | i}, E)
.
E
(
E
)
+E E
E
i i
Profesora: Sra. Consuelo Ramírez. 76
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.4. Gramática ambigua
Se dice que una gramática que produce más de un árbol de análisis sintáctico para alguna palabra es ambigua. O, dicho de otro modo, una gramática ambigua es la que produce más de una derivación por la izquierda o por la derecha para la misma palabra.
Ejemplo:G = ({E}, {+, *, (, ), -, i}, {E E + E | E * E | (E) | -E | i}, E)
Derivaciones por la izquierdaE E + E i + E i + E * E i + i * E i + i * iE E * E E + E * E i + E * E i + i * E i + i * i
Árboles de análisis sintáctico
E
+E E
E
i i
E
i
*+E E
E
i E E*
ii
Profesora: Sra. Consuelo Ramírez. 77
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.5. Recursividad por la izquierda
G = (N, , P, S)
7.5.1. Eliminación de la recursividad por la izquierda
G = (N, , P, S) G’ = (N’, , P’, S)
N’ = N {A’}
Ejemplo:G = ({E, T, F}, {+, *, (, ), i}, P, E)P = {
E E + T | TT T * F | FF ( E ) | i
}
Profesora: Sra. Consuelo Ramírez. 78
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.6. Factorización por la izquierda
G = (N, , P, S) G’ = (N’, , P’, S)
N’ = N {A’}
Ejemplo:G’ = ({P, E}, {i, t, e, a, b}, P’, P)P’ = {
P iEtP | iEtPeP | aE b
}
Profesora: Sra. Consuelo Ramírez. 79
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.7. Primero
G = (N, , P, S)
P() = P() ={} , (N )*
A 1 | 2 | ... | n P P(A) = P(1) P(2) ... P(n) A N = X1 X2 ... Xn
Algoritmo:P() = P(X1)i = 1Mientras Xi N
{P() = P() P(Xi+1)i = i + 1
}
Ejemplo:G = ({E, E’, T, T’, F}, {+, *, (, ), i}, P, E)P = {
E TE’E’ + TE’ | T FT’T’ * FT’ | F ( E ) | i
}
Profesora: Sra. Consuelo Ramírez. 80
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.8. Siguiente
G = (N, , P, S)
Ejemplo:G = ({E, E’, T, T’, F}, {+, *, (, ), i}, P, E)P = {
E TE’E’ + TE’ | T FT’T’ * FT’ | F ( E ) | i
}
Profesora: Sra. Consuelo Ramírez. 81
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.9. Analizador sintáctico LL(1)
La primera L representa el examen de la entrada de izquierda a derecha, la segunda L representa una derivación por la izquierda, y el 1 es por utilizar un símbolo de entrada de examen por anticipado en cada paso para tomar las decisiones de la acción en el análisis sintáctico.
7.9.1. Gramática LL(1)
Ninguna gramática ambigua o recursiva por la izquierda puede ser LL(1) [6].
G = (N, , P, S)
1. A 1 | 2 | ... | n P P(i) P(j) = A N , i j2. P(A) S(A) = A N
Ejemplo:G = ({E, E’, T, T’, F}, {+, *, (, ), i}, P, E)P = {
E TE’E’ + TE’ | T FT’T’ * FT’ | F ( E ) | i
}
Ejercicio:G’’ = ({P, P’, E}, {i, t, e, a, b}, P’’, P)P’’ = {
P iEtPP’ | aP’ | ePE b
}
Profesora: Sra. Consuelo Ramírez. 82
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.9.2. Tabla del analizador sintáctico LL(1)
Algoritmo: A P{
P()M[A, ] = A
Si A N entonces S(A)
M[A, ] = A }
Ejemplo:G = ({E, E’, T, T’, F}, {+, *, (, ), i}, P, E)P = {
E TE’E’ + TE’ | T FT’T’ * FT’ | F ( E ) | i
}
= i + i * i
Ejercicio:G’’ = ({P, P’, E}, {i, t, e, a, b}, P’’, P)P’’ = {
P iEtPP’ | aP’ | ePE b
}
Profesora: Sra. Consuelo Ramírez. 83
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.9.3. Recuperación de errores en el analizador sintáctico LL(1)
G = (N, , P, S)
M[A, ] = sinc A N , S(A)
Ejemplo:G = ({E, E’, T, T’, F}, {+, *, (, ), i}, P, E)P = {
E TE’E’ + TE’ | T FT’T’ * FT’ | F ( E ) | i
}
M[A, ] = “ ” saltar A N , M[A, ] = sinc sacar A A N ,
Ejemplo: = + i * + i
Profesora: Sra. Consuelo Ramírez. 84
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.10. Analizadores sintácticos LR
La L es por el examen de la entrada de izquierda a derecha, la R es por construir una derivación por la derecha en orden inverso, y el 1 es por utilizar un símbolo de entrada de examen por anticipado para tomar las decisiones del análisis sintáctico.
7.10.1. Elemento LR(0)
Un elemento LR(0) de una gramática G es una producción de G con un punto en alguna posición del lado derecho [6].
Ejemplo:G = (N, , P, S)
A XYZ P
Observación:A A
7.10.2. AFN- de elementos LR(0)
G = (N, , P, S) G’ = (N’, , P’, S’)
N’ = N {S’}P’ = P {S’ S}
M = (Q, N , , q0, Q)
Q : Conjunto de elementos LR(0)q0 : S’ S :
(A X, X) = {A X / X (N )}(A B, ) = {B / B P}
Ejemplo:G = ({S, B}, {a, b}, P, S)P = {
S BBB aB | b
}
Profesora: Sra. Consuelo Ramírez. 85
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.10.3. Analizador sintáctico SLR
Clausura
G = (N, , P, S)
I: conjunto de elementos LR(0).
Algoritmo:Clausura(I){
J = IRepetir
A B J B P / B J
J = J {B }Hasta que no se puedan agregar más elementos a J.Retornar(J)
}
Ir_a
I: conjunto de elementos LR(0).
Ir_a(I, X) = Clausura({A X / A X I}) X (N )
Profesora: Sra. Consuelo Ramírez. 86
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.10.3.1. Tabla del analizador sintáctico SLR
a) A Ii Ir_a(Ii, ) = Ij Acción[i, ] = Dj
b) A Ii Acción[i, ] = RA S(A)c) S’ S Ii Acción[i, $] = Ad) Ir_a(Ii, A) = Ij Ir_a[i, A] = j
Ejemplo:G = ({E, T, F}, {+, *, (, ), i}, P, E)P = {
E E + T | TT T * F | FF ( E ) | i
}
= i * i + i
Toda gramática SLR es no ambigua, pero hay muchas gramáticas no ambiguas que no son SLR [6].
Ejemplo:G = ({S, L, R}, {=, *, i}, P, S)P = {
S L = R | RL * R | iR L
}
Profesora: Sra. Consuelo Ramírez. 87
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
Uso de gramáticas ambiguas
Toda gramática ambigua no es SLR [6].
Ejemplo:G = ({E}, {+, *, (, ), i}, {E E + E | E * E | ( E ) | i}, E)
= i * i + i
Ejercicio 1:G = ({S}, {i, e, a}, {S iSeS | iS | a}, S)
= iiaea
Ejercicio 2:G = ({E}, {b, p, {, }, c}, {E E b E p E | E b E | E p E | { E } | c}, E)
Profesora: Sra. Consuelo Ramírez. 88
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.10.4. Analizador sintáctico LR
Toda gramática SLR(1) es una gramática LR(1), pero para una gramática SLR(1) el analizador sintáctico LR canónico puede tener más estados que el analizador SLR para la misma gramática [6].
Clausura
G = (N, , P, S)
I: conjunto de elementos LR(1).
Algoritmo:Clausura(I){
Repetir [A B, a] I
B P b P(a) / [B , b] I
I = I {[B , b]}Hasta que no se puedan agregar más elementos a I.Retornar(I)
}
Ir_a
I: conjunto de elementos LR(1).
Ir_a(I, X) = Clausura({[A X , ] / [A X, ] I}) X (N )
7.10.4.1. Tabla del analizador sintáctico LR
a) [A a, b] Ii Ir_a(Ii, a) = Ij Acción[i, a] = Dj
b) [A , ] Ii Acción[i, ] = RA
c) [S’ S , $] Ii Acción[i, $] = Ad) Ir_a(Ii, A) = Ij Ir_a[i, A] = j
Ejemplo:G = ({S, C}, {c, d}, P, S)P = {
S CCC cC | d
}
Profesora: Sra. Consuelo Ramírez. 89
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.10.5. Analizador sintáctico LALR
Analizador sintáctico LR
7.10.5.1. Tabla del analizador sintáctico LALR
Las tablas SLR y LALR para una gramática siempre tienen el mismo número de estados [6].
a) [A a, b] Ii Ir_a(Ii, a) = Ij Acción[i, a] = Dj
b) [A , ] Ii Acción[i, ] = RA
c) [S’ S , $] Ii Acción[i, $] = Ad) Ir_a(Ii, A) = Ij Ir_a[i, A] = j
Ejemplo:G = ({S, C}, {c, d}, P, S)P = {
S CCC cC | d
}
Ejercicio:G = ({S, A, B}, {a, b, c, d, e}, P, S)P = {
S aAd | bBd | aBe | bAeA cB c
}
Profesora: Sra. Consuelo Ramírez. 90
Universidad de Santiago de ChileFacultad de Ingeniería
Departamento de Ingeniería InformáticaIngeniería Civil en Informática
Autómatas y Lenguajes Formales
7.10.6. Recuperación de errores en los analizadores sintácticos LR
Ejemplo:G = ({E}, {+, *, (, ), i}, {E E + E | E * E | ( E ) | i}, E)
Rutinas de error:E1: introducir i 3 en el stack
“falta operando”E2: eliminar paréntesis derecho de la entrada
“paréntesis derecho no equilibrado”E3: introducir + 4 en el stack
“falta operador”E4: introducir ) 9 en el stack
“falta paréntesis derecho”
= i + )
Profesora: Sra. Consuelo Ramírez. 91
top related