UNIVERSIDAD NACIONAL DE LOJA
ÁREA DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO
RENOVABLES.
CARRERA DE INGENIERIA EN SISTEMAS
MODULO IX
“PROYECTOS FINAL”
TEMA:
Análisis semántico INTEGRANTES:
Catalina Cobos Carla Espinosa
LOJA 2010
GRAMATICAS CON ATRIBUTOS
Antes de empezar a desarrollar el ejercicio debemos tener bien claro lo siguienteDebido 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 sea heredado es 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.
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
TABLA CON LAS REGLASA continuación presentamos el formato que debe tener la tabla para resolver el ejercicio:
• Ejercicio : Considere la siguiente gramática simple para declaraciones de variable en una sintaxis tipo C:
Gramática
Gramáticas con atributos
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).
• 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.
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
CONSTRUIMOS EL ARBOL ….
Decla Type Var-List
decl var-listtype
2. Construimos el árbol a partir de la cadena: Float x , y
1. Partimos de la gramática
Dtype =real
Decla
Type Var-List
Float
decl id, var-list
float
type
id var-list
var-listtype
, dtype type = int Integer
type = float Real
Dtype =real
Decla
Type Var-List
Float
Necesita encontrar este valor
Tomamos el valor del
hermano Type
Dtype =real
decl id, var-list
float
type
id var-list
var-listtype
,
Dtype =real
Decla
Type Var-List
Float
Necesita encontrar este valor
Tomamos el valor del
hermano Type
decl id, var-list
float
type
id var-list
id id
var-listtype
float
,
,
Dtype =real
Dtype =real
Decla
Type Var-List
Float
Dtype =real
decl id, var-list
float
type
id var-list
id id
var-listtype
float
,
,
Dtype =real
Decla
Type Var-List 1
Float
id , Var-list2
Necesita encontrar estos valores
Heredamos del atributo padre
Var-list
Dtype =real
Dtype =realDtype =real
Decla
Type Var-List 1
Float
id , Var-list2
Dtype =realDtype =real
Dtype =realDtype =real
Decla
Type Var-List 1
Float
id , Var-list2
decl id, var-list
float
type
id var-list
id id
var-listtype
X Y
float
float
,
,
,
Dtype =real
Dtype =realDtype =real
Dtype =realDtype =real
Decla
TypeVar-List 1
Float id ,Var-list2
id
Dtype =real
Dtype =realDtype =real
Dtype =realDtype =real
Decla
Type Var-List 1
Float id , Var-list2
id
Float x , y
Finalmente la tabla nos quedaría así:
Regla Gramatical Reglas Semánticas
decl type var-listtype inttype floatvar-list 1 id, var-list2
var-list id
var-list.dtype = type.dtypetype.dtype = integertype.dtype = realid.dtype = var-list1.dtypevar-list2.dtype = var-list1.dtypeid.dtype = var-list.dtype
Gracias
Recommended