Professional Documents
Culture Documents
Autómatas y Compiladores
Ing. Carlos Gaytán Toledo
20/11/2018 1
Gramática con Atributos (GA)
• Son ampliaciones de las GLC donde:
– Los símbolos gramaticales pueden tener asociados
atributos.
– Las reglas de producción pueden tener asociadas reglas
de evaluación de los atributos (reglas semánticas).
20/11/2018 2
Atributos
• Representan propiedades (información semántica) de las
partes de un Lenguaje de Programación.
• Varían en cuanto a información que contienen y/o en cuanto
al tiempo que tardan en calcularse.
• Cada símbolo gramatical puede tener asociado cero o mas
atributos.
• Se utiliza la notación símbolo.atributo. Por ejemplo:
id.lexema, Exp.valor, LstIds.cantidad
• Cada atributo tiene un conjunto de posibles valores
(dominio).
20/11/2018 3
Reglas Semánticas
• Especifican el cálculo de los atributos mediante relaciones
entre los atributos definidos sobre la GA.
• Dada una producción X0X1X2...Xn, una regla semántica es
una función matemática de la forma:
20/11/2018 4
Reglas Semánticas
• Las reglas semánticas deben calcular todos los valores de los
atributos necesarios en los nodos del árbol.
• Los atributos de los símbolos terminales son calculados y
entregados generalmente por el analizador léxico.
• Se utiliza subíndices para referirnos a los atributos de un
símbolo gramatical que aparece varias veces en una
producción.
• Notación:
– Operador de asignación :=
– Operador de concatenación de cadenas ||
20/11/2018 5
Gramática con Atributos (GA)
• Ejemplo: GA que traduce declaraciones de variables
en C a declaraciones en Pascal
20/11/2018 6
Atributos Sintetizados (AS)
• Se calculan a partir de los atributos de los nodos hijos en el
árbol.
A A.a = f(B.b, C.c, D.d)
B C D
B.b C.c D.d
20/11/2018 7
Atributos Sintetizados (AS)
• Gramática S-atribuida: son gramática atribuidas
donde todos los atributos asociados con los símbolos
gramaticales son sintetizados.
• Las reglas de evaluación de los atributos sintetizados
se realizan durante el análisis sintáctico ascendente.
20/11/2018 8
Atributos Sintetizados (AS)
• Ejemplo: gramática S-Atribuida que evalúa expresiones
aritméticas
Producciones Reglas Semánticas
E1 E2 + T E1.val := E2.val + T.val
E1 E2 – T E1.val := E2.val - T.val
ET E.val := T.val
T1 T2 * F T1.val := T2.val * F.val
TF T.val := F.val
F(E) F.val := E.val
F num F.val := num.val
20/11/2018 9
Atributos Sintetizados (AS)
• Evaluación de (4-3)*2
20/11/2018 10
Atributos Sintetizados (AS)
• Evaluación de 3*5+4
20/11/2018 11
Atributos Heredados (AH)
• Calculados con atributos de nodos padre y hermanos
A A.a
B C D
B.b = f(A.a, C.c, D.d) C.c D.d
20/11/2018 12
Atributos Heredados (AH)
• Ejemplo: GA que evalúa la declaración de variables en C.
20/11/2018 13
Atributos Heredados (AH)
• Evaluar la GA para la entrada: float x,y
20/11/2018 14
Gramáticas L-Atribuidas
• Los AH asociados al consecuente se
calculan en función de:
1. AH asociados al antecedente de la
producción
2. Atributos ubicados a la izquierda
del símbolo dentro del consecuente
• Los AS asociados al antecedente se
calculan en función de:
3. AH asociados al antecedente
4. Atributos asociados a símbolos del
consecuente.
• Los atributos se evalúan durante el
Análisis Sintáctico Descendente.
20/11/2018 15
Especificación de un traductor
• 2 notaciones
• Definiciones dirigidas por la sintaxis (DDS)
– Formalismo de alto nivel para describir traducciones
– Se ocultan los detalles de implementación
– No se impone orden de ejecución de las reglas
– Calcular los atributos en la producción en que aparecen
• Esquemas de traducción (ETDS)
– Notación de bajo nivel para especificar un traductor
– El traductor es de una sola pasada
– Explicita el orden de la ejecución de las acciones
20/11/2018 16
Definición Dirigida por Sintaxis (DDS)
• Son una generalización de las gramáticas con atributos
– Toda gramática con atributos es una DDS
• Todas las reglas semánticas aparecen al final de la producción:
– A X1 X2 X3...Xn {R0,R1,R2,…,Rn}
• Las reglas semánticas manipulan atributos.
• Existen otras acciones semánticas que no manipulan atributos:
– Escritura de valores
– Condicionales
– Inserción de variables en la tabla de símbolos
– Modificación de variables globales
• Son utilizadas preferentemente en el análisis sintáctico ascendente.
20/11/2018 17
Definición Dirigida por Sintaxis (DDS)
• Ejemplo:
Regla de producción Regla semántica
E E1 OP T if (OP.lexema == ‘+’) {
E.valor := E1.valor + T.valor
}
else {
E.valor := E1.valor + T.valor
}
write(E.valor)
20/11/2018 18
Esquema de Traducción Dirigido por
Sintaxis (ETDS)
• Traductores de una sola pasada
• Acciones semánticas entre los símbolos del consecuente
• A {R0} X1 {R1} X2 {R2} X3...Xn {Rn}
• Se encierran entre llaves {acción semántica}
• Son fragmentos de código en un lenguaje de programación
• Se explicita el orden de ejecución de las acciones
• Al diseñar un ETDS, se debe verificar que el valor de un
atributo esté disponible cuando sea referido.
• Son utilizados preferentemente en el análisis sintáctico
descendente.
20/11/2018 19
Esquema de Traducción Dirigido por
Sintaxis (ETDS)
• Ejemplo: evaluar la cadena 9-5+2 con el ETDS:
20/11/2018 20
Restricciones de Diseño
• Para calcular AS, colocar la acción semántica después de
todos los símbolos implicados o al final de la producción.
A B C { A.a = f (B.a, C.a) } D
A B C D { A.a = f (B.a, C.a) }
20/11/2018 21
Restricciones de Diseño
• Un AS debe usarse después de que aparezca el símbolo en el
consecuente.
Error ! A B { A.s = f (B.s, C.s) } C D
Correcto ! A B C { A.s = f (B.s, C.s) } D
20/11/2018 22
Pasos de diseño de un ETDS
1. Decidir qué atributos son necesarios
2. Añadir a la gramática las acciones semánticas necesarias
3. Estudiar de qué tipo es cada atributo:
– Sintetizado
– Heredado
4. Comprobar que se cumplen las restricciones de diseño
– Estudiar grafo de dependencias
– Modificar la gramática
– Reubicar las acciones semánticas
20/11/2018 23
Conversión de ETDS a DDS
• Se transforma la GA para • Ejemplo: Sea el ETDS:
que todas las acciones ETR
intercaladas en un ETDS, R + T {print('+')} R
queden al final de sus | - T {print('-')} R
producciones. |
– Se reemplaza cada T num {print(num.val)}
acción intercalada por • ETDS transformada:
un símbolo no ETR
terminal M (marcador) R+TMR
distinto |-TNR
|
– Se asocia la acción T num {print(num.val)}
reemplazada al final de M {print('+')}
la producción M N {print('-')}
20/11/2018 24