4. Antes de empezar a desarrollar el ejercicio debemos tener bien claro lo siguiente Debido a que nuestro ejercicio es de tipo heredado debemos saber que: Los atributos heredados tienen dependencias que fluyen ya sea de padre a hijos en el árbol de análisis gramatical (a lo que deben su nombre) o de hermano a hermano. La razón para que él atributo seaheredadoes su algoritmo, la herencia entre hermanos a menudo se implementa de tal manera que los valores de atributo se pasen de hermano a hermano u a través del padre.
5. EXPLICACIÓN Determinar para que vamos a utilizar la gramática. Declaración de variables de tipo C Identificar el tipo de dato del atributo o el valor de la expresión. Determinar las ecuaciones con respecto a los atributos. Analizar bien el enunciado que nos presenta este ejercicio
6. TABLA CON LAS REGLAS A continuación presentamos el formato que debe tener la tabla para resolver el ejercicio:
7. Ejercicio : Considere la siguiente gramática simple para declaraciones de variable en una sintaxis tipo C: Gramática Gramáticas con atributos
8. Enunciado del Ejercicio Queremos definir un atributo de tipo de datos para las variables dadas por los identificadores en una declaración y escribir ecuaciones que expresen cómo está relacionado el atributo de tipo de datos con el tipo de la declaración. Hacemos esto construyendo una gramática con atributos para un atributo dtype (utilizamos el nombre dtype para distinguir el atributo del no terminal type).
9. En primer lugar, los valores de dtype son del conjunto (integer, real) que corresponde a los tokens int y float. El no terminal type tiene un dtype dado por el token que representa. Este dtype corresponde al dtype de la var-list entera, por la ecuación asociada con la regla gramatical para decl. Cada id en la lista tiene este mismo dtype, por las ecuaciones asociadas con var-list. Advierta que no hay ecuación que involucre el dtype del no terminal decl. En realidad, una decl no necesita tener un dtype: no es necesario especificar el valor de un atributo para todos los símbolos gramaticales.
10. Desarrollo del Ejercicio Para una mejor comprensión y elaboración de las reglas semánticas comenzaremos construyendo un árbol a partir de una cadena valida. Cadena Float x , y Para irnos ayudando podemos ir realizando las derivaciones como se muestra a continuación
12. 1. Partimos de la gramática 2. Construimos el árbol a partir de la cadena: Float x , y decl var-list type Decla Var-List Type Dtype =real
13. var-list id, var-list type decl type , float id var-list type = int Integer type = float Real dtype Decla Type Var-List Dtype =real Float
14. var-list id, var-list type decl type , float id var-list Decla Necesita encontrar este valor Type Var-List Dtype =real Dtype =real Tomamos el valor del hermano Type Float
15. var-list id, var-list type decl type , float id var-list float id id , Decla Necesita encontrar este valor Type Var-List Dtype =real Dtype =real Tomamos el valor del hermano Type Float
16. var-list id, var-list type decl type , float id var-list Decla float id id , Type Var-List Dtype =real Dtype =real Float
17. Decla Type Var-List1 Dtype =real Dtype =real Float Var-list2 id , Necesita encontrar estos valores Heredamos del atributo padre Var-list
18. Decla Type Var-List1 Dtype =real Dtype =real Dtype =real Dtype =real Float Var-list2 id ,
19. var-list id, var-list type decl type , float id var-list Decla float id id , X Y float , Type Var-List1 Dtype =real Dtype =real Float Var-list2 id ,
20. Decla Var-List1 Type Dtype =real Dtype =real Var-list2 Float id , Dtype =real Dtype =real id Dtype =real
21. Decla Var-List1 Type Dtype =real Dtype =real Var-list2 Float id , Dtype =real Dtype =real Float x , y id Dtype =real