Sei sulla pagina 1di 24

Compiladores

V. TRADUCCIÓN DIRIGIDA POR LA


SINTAXIS.
CONTENIDO

 Definición
 Reglas semánticas

 Atributos y gramáticas de atributos

 Definiciones con atributos por la izquierda

 Esquema de traducción

2
DEFINICIÓN

 El significado de una sentencia de entrada está


relacionado con su estructura sintáctica.

 Encierran aquellos formalismos utilizados para especificar


las traducciones para las construcciones de los lenguajes
de programación guiadas por una GLC.

◦ Se Asocian Atributos a los símbolos de la gramática.

◦ Se computan los valores de atributos por reglas semánticas


asociadas a las producciones de la gramática.

3
REGLAS SEMÁNTICAS

 La evaluación de las reglas semánticas


puede:
 Generar Código.
 Insertar información en la Tabla de Símbolos.

 Realizar el Chequeo Semántico.

 Dar mensajes de error

 Etc.

4
NOTACIONES DE LAS REGLAS SEMANTICAS
 Existen dos notaciones para asociar información
a las reglas semánticas:

 Definiciones Dirigidas por la Sintaxis: es una


especificación de alto nivel que oculta detalles
de implementación.

 Esquemas de traducción: están más


orientados a la implementación porque indican
el orden en el cual se evalúan las reglas
semánticas.

5
ATRIBUTOS Y GRAMÁTICA DE ATRIBUTOS
Informalmente, se llamará atributos de un símbolo de la
gramática a toda información añadida en el árbol de derivación
por el analizador semántico, asociada a los símbolos de los nodos
anotados. Un componente importante de las gramáticas de
atributos es el algoritmo de cálculo de los valores.
 Ejemplos de atributos:

 Tipo de una variable

 Valor de una expresión

 Ubicación en memoria de una variable

 Código objeto de un procedimiento

 Número de dígitos significativos en un número

6
ATRIBUTOS Y GRAMÁTICA DE ATRIBUTOS
 Una gramática de atributos es una gramática independiente
del contexto en la cual a sus símbolos terminales y no
terminales se les dota de unos atributos y a sus producciones
de unas funciones de evaluación que hacen que dichos
atributos se propaguen a través de la gramática. Su fin es
conocer un determinado valor de un atributo en cualquier parte
del árbol de derivación y tomar la decisión oportuna.

 Un atributo es una propiedad asociada a una estructura


sintáctica. Si una estructura sintáctica representada por el
símbolo gramatical X tiene asociado un atributo a lo
representaremos por X.a (Nombre símbolo.Nombre atributo)
7
ATRIBUTOS Y GRAMÁTICA DE ATRIBUTOS
 Ejemplo:
numero -> numero digito | digito
a) numero-> digito
numero.valor = digito.valor

b) numero -> numero digito


numero1.valor = numero2.valor * 10 + digito.valor

Las funciones semánticas relacionan los valores de los atributos


definidos sobre la gramática atribuida y van asociadas a
producciones de la gramática atribuida.
8
ATRIBUTOS Y GRAMÁTICA DE ATRIBUTOS
 Ejemplo: Sea el lenguaje L={an |n>=0} generado por la
siguiente gramática:

G={ ∑={a, $}, N={S, A}, S, P) P: S→A$ A→aA A→a

Se quiere atribuir para que contabilice y escriba el número de aes


que tiene una palabra generada.

S→A$ {writeln (A.num)}


A→aA {A1.num=1+A2.num}
A→a {A.num=1}
9
ATRIBUTOS Y GRAMÁTICA DE ATRIBUTOS
Definición:
 Una gramática de atributos está formada por una tripleta
GA={GIC, A, F}
 GIC – gramática independiente del contexto

 A – atributos asociados a los símbolos terminales y no


terminales
 F – función de evaluación, función asociada a producción que
determina como obtener unos atributos en función de otros
dentro de la misma producción

A→X1 X2 X3 …Xn ; A∈N y Xi∈(Σ|N)

10
ATRIBUTOS Y GRAMÁTICA DE ATRIBUTOS
A.a=f (X1.a,X2.b,…Xm.z)
a es un atributo asociado al símbolo no terminal A y obtiene su valor en función
de los atributos: a asociado a X1, b asociado a X2 ,…y z asociado a Xm ( es un
atributo obtenido en función de la parte derecha de la producción)

X1.a=f (A.a,X2.b)
a es un atributo asociado al símbolo X1 y obtiene su valor en función de los
atributos: a asociado a A, b asociado a X2 ( es un atributo obtenido en función
de elementos de la parte derecha e izquierda de la producción)

A.a=f (y1.b, B.a) , X1.a=f (y1.b, B.a) Atributos incorrectos no se obtienen


dentro de la producción

11
ATRIBUTOS Y GRAMÁTICA DE ATRIBUTOS
Atributos Sintetizados: Son atributos que se propagan desde las
hojas a la raíz

A→X1 X2 X3 …Xn ; A∈N y Xi∈(Σ|N)

A.a=f(X1.a,X2.b,…Xm.z) a es un atributo sintetizado obtienen sus


valores de los atributos de un nivel inferior en la generación del
árbol, es decir de la parte derecha de la producción.

 S→A$ {writeln (A.num)}


 A→aA {A1.num=1+A2.num}
 A→a {A.num=1}
12
ATRIBUTOS Y GRAMÁTICA DE ATRIBUTOS
Atributos Heredados: son atributos que se propagan desde la raíz
a las hojas o dentro de un mismo nivel A→X1 X2 X3 …Xn ; A∈N y
Xi∈(Σ|N)

X1.a=f(A.a,X2.b,…) a es un atributo heredado obtenido en


función de los atributos a y b obtiene sus valores de los atributos
del mismo nivel o superior en la generación del árbol, es decir se
calculan descendentemente.

 S→A$ {A.num=0}
 A→aA {A2.num=1+A1.num}
 A→a {writeln (A.num+1}
13
DEFINICIONES CON ATRIBUTOS POR LA
IZQUIERDA

Cuando la traducción tiene lugar durante el análisis sintáctico, el orden


de evaluación de los atributos va unido al orden en que, por el método
de análisis sintáctico, se crean los nodos del árbol de análisis
sintáctico. Un orden natural que caracteriza es el orden de evaluación
en profundidad. Aunque de hecho no se construye el árbol de análisis
sintáctico, es útil estudiar la traducción durante el análisis sintáctico
considerando la evaluación en profundidad de los atributos en los
nodos de un árbol de análisis sintáctico. Se les llama “por la izquierda”
porque la información de los atributos parece fluir de izquierda a
derecha. Las definiciones con atributos por la izquierda incluyen todas
las definiciones dirigidas por sintaxis basadas en gramáticas LL(1).
Toda definición con atributos sintetizados es una definición con
atributos por la izquierda.

14
ESQUEMAS DE TRADUCCIÓN

Los esquemas de traducción están más orientados a la


implementación que las DDS porque indican el orden
de evaluación de las reglas semánticas.

Definición: Un ET es una gramática libre del contexto


que cumple con las siguientes condiciones:
• Los atributos están asociados con los símbolos de la
gramática.
• Las acciones semánticas están encerradas entre { y } y
están embebidas dentro del lado derecho de las
producciones.

15
ESQUEMAS DE TRADUCCIÓN

 Los ET pueden tener atributos sintetizados y


heredados.

 Las acciones semánticas son tratadas como


símbolos terminales

 Los esquemas de traducción son útiles para


evaluar definiciones L-Atribuidas en tiempo de
parsing.

16
ESQUEMAS DE TRADUCCIÓN
N. G. L-Attr N. ET para G
1 DT L 1 DT{L.in=T.type} L
2 Tint 2 Tint {T.tipo=integer}
3 Treal 3 Treal {T.tipo=real}
4 L1L2,id 4 L1 {L1.in=L.in} L2,id{addtype(id.entry,L.in}
5 Lid 5 L id{addtype(id.entry, L.in}

17
ESQUEMAS DE TRADUCCIÓN

Ejercicio: Construir el Árbol de Parse para la


siguiente declaración:
Real id1, id2, id3.

Ejercicio: Evaluar el ET.

18
ET DISEÑO
 1er Caso: Atributos Sintetizados: se puede construir un
ET creando una acción semántica que es una
asignación y se ubica esta acción al final de la parte
derecha de la producción.

Producción Regla Semántica


1) TE + T1 T.val= E.val + T1.val
2) NRO1 NRO2 DIG NRO1=NRO2.val * 10 + DIG.val
3) DIG0 DIG.val=0

19
ET DISEÑO

 2do Caso: Atributos heredados y sintetizados.


 Un Atributo heredado por un símbolo de la parte derecha de una
producción se debe calcular en una acción que se realice antes de
dicho símbolo.

Producción Producción con Acciones


X0X1…Xj-1Xj…Xn X0X1…Xj-1 {Xj.h}Xj…Xn 
X0X1…Xj-1Xj…Xn X0X1…Xj-1Xj{Xj.h}…..Xn 

DT LID D T{LID.t=T.tipo} LID 

20
ET DISEÑO

 2do Caso: Atributos heredados y sintetizados.


 Una acción no debe referenciar a un atributo sintetizado de un
símbolo de la gramática que esté a la derecha de dicho símbolo.

Producción Producción con Acciones


X0X1…Xj-1{Acción}Xj…Xn

Acción: no hace ref. a un atributo calculado a la derecha de Xj

21
ET DISEÑO

 2do Caso: Atributos heredados y sintetizados.


 Acciones que calculen atributos sintetizados para el símbolo no
terminal de la parte izquierda de una producción deben ser ubicados
al final de la parte derecha de la producción.

Producción Regla Semántica


1) TE + T1 T.val= E.val + T1.val
2) NRO1 NRO2 DIG NRO1.val=NRO2.val * 10 + DIG.val
3) DIG0 DIG.val=0

22
ET TÉCNICA DE CONSTRUCCIÓN

 Entrada: Un esquema de traducción dirigido por la sintaxis con la


gramática subyacente LL(k) fuerte.

 Salida: Código para un traductor dirigido por la sintaxis.

 Método: La técnica propuesta es una modificación al método de


construcción de parsers descentes recursivos vistos anteriormente.

  A  N, construir una función asociada pero teniendo un parámetro


formal para cada atributo heredado por A y que retorne los valores de los
atributos sintetizados de A. El cuerpo de la función deberá contener una
variable local para cada atributo de cada símbolo de la gramática que
aparezca en las producciones de A.

23
ET TÉCNICA DE CONSTRUCCIÓN
 Como sucede con el método clásico el código para el no terminal A decide que
producción usar basado en el lookahead.

 El código asociado con cada producción hace lo siguiente, considerando los


tokens, los no teminales y acciones en la parte derecha de una producción de
izquierda a derecha:

 Para el token x con atributo sintetizado x.val se salva su valor en la variable


local declarada para x.val. Luego, se llama al match del símbolo y se obtiene
el próximo token.

 Para el no terminal B, se genera una asignación c:=B(b1,b2,...,bn) donde


b1,b2,...,bn son las variables para los atributos heredados de B y c es la
variable para el atributo sintetizado de B.

 Para una acción, copiar el código en el parser, reemplazando cada referencia


a un atributo por la variable local para tal atributo.

24

Potrebbero piacerti anche