[Apuntes] Unidad7

19
Universidad de Santiago de Chile Facultad de Ingeniería Departamento de Ingeniería Informática Ingenierí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 X 1 , X 2 , ... , X n son las etiquetas de los hijos de ese nodo, de izquierda a derecha, entonces A X 1 X 2 ... X n es una producción. Ejemplo: G = ({E}, {+, *, (, ), -, i}, {E E + E | E * E | (E) | -E | i}, E) Profesora: Sra. Consuelo Ramírez. 76

Transcript of [Apuntes] Unidad7

Page 1: [Apuntes] Unidad7

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

Page 2: [Apuntes] Unidad7

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

Page 3: [Apuntes] Unidad7

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

Page 4: [Apuntes] Unidad7

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

Page 5: [Apuntes] Unidad7

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

Page 6: [Apuntes] Unidad7

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

Page 7: [Apuntes] Unidad7

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

Page 8: [Apuntes] Unidad7

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

Page 9: [Apuntes] Unidad7

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

Page 10: [Apuntes] Unidad7

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

Page 11: [Apuntes] Unidad7

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

Page 12: [Apuntes] Unidad7

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

Page 13: [Apuntes] Unidad7

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

Page 14: [Apuntes] Unidad7

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

Page 15: [Apuntes] Unidad7

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

Page 16: [Apuntes] Unidad7

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