Este documento describe la traducción dirigida por la sintaxis, en la cual una gramática se amplía con atributos asociados a los símbolos no terminales. Se definen reglas semánticas vinculadas a las reglas de producción para especificar cómo los atributos dependen unos de otros. Se explican conceptos como atributos sintetizados, heredados y diferentes tipos de atributos.
1. Traducción dirigida por la sintaxis
Laboratorio de Compiladores 1,
Universidad de San Carlos de
Guatemala
2. Definición dirigida por la sintaxis
En una definición dirigida por la sintáxis una
gramática se aumenta con nuevas características:
A cada símbolo non terminal de la gramática se le
asocian cero o mas atributos.
Un atributo queda caracterizado por un
identificador o nombre y un tipo o clase.
A este nivel son atributos formales, en el sentido de
que su realización se produce cuando el nodo del
árbol es creado.
3. Definición dirigida por la sintaxis
• A cada regla de producción A -> X1 X2 .. Xn se le
asocian un conjunto de reglas de evaluación de
los atributos o reglas semánticas que indican que
el atributo en la parte izquierda de la regla
semántica depende de los atributos que
aparecen en la parte derecha de la regla.
• El atributo que aparece en la parte izquierda de la
regla semántica puede estar asociado con un
símbolo en la parte derecha de la regla de
producción
4. Principio de Traducción dirigida por la
sintaxis S
Se realizan en paralelo puntocoma
L
• Análisis semántico L.tipo= L.tipo
L.Val =concat(id)
• Traducción coma id
L
L.tipo= L.tipo
L.Val =concat(id) S -> L puntocoma
id L -> L coma id
L coma
| TIPO id
Lo.tipo= tipo.val TIPO -> integer
Lo.Val =id
Tipo id
| string
| char
Cadena: | float
Integer id1, id2, id3, id4; | double
5. Gramáticas con Atributos
• Gramática con atributos
– Cada símbolo de la gramática tiene atributos.
– Cada regla de producción tiene reglas semánticas
S -> L puntocoma{
Write(“Las variables declaradas son”, Lo.val, “del tipo”,Lo.tipo);
}
L -> L coma id{ Lo.tipo= L.tipo; Lo.val=concat(L.val,“,”,val(id));
Write( Lo.tipo,” variable ”, val(id));
}
| TIPO id {Lo.tipo= TIPO.val; Lo.val=Val(id);
Write( Lo.tipo,” variable ”,id);
}
TIPO -> integer { TIPO.val=“Integer”;}
| string {TIPO.val=“String”; }
| char {TIPO.val=“char”; }
| float {TIPO.val=“float”; }
| double {TIPO.val=“double”; }
6. Atributos
• Propiedades de los símbolos del lenguaje que
almacenan contenidos relacionados con el
significado de los símbolos a los que
pertenecen.
• Se utiliza la notación símbolo.atributo
• id.lexema
– Var.valor
– Var.direccion
– Exp.codigo
7. Tipos de Atributos
Atributos sintetizados
Se calculan a partir de atributos de nodos
hijos.
– Se refieren a atributos del antecedente de la regla.
– La información asciende por el árbol.
Los atributos sintetizados lo son durante toda la
gramática.
Los atributos de terminales son sintetizados
S -> L { write(“Cadena encontrada”, L.val);}
L -> L , id {: Lo=concat(L.val,”,”, val(id); :}
| id {: Lo.val=val(id); :}
8. Tipos Atributos
Atributos Heredados:
Calculados con atributos en nodos padre y
hermanos.
Información descendente o de tránsito horizontal
Se utilizan para transferir información entre reglas
9. Hoja trabajo (Parejas)
1) Que es ambigüedad, recursividad y
Que se debe hacer para quitar la ambigüedad y
recursividad?
2) Utilizando atributos como cambiar el primero por el
ultimo?
Entrada:
Uno, dos, tres, cuatro, cinco
Salida:
Cinco, dos , tres, cuatro, uno
10. S -> L{ Entrada:
Write(Lo.ultimo,Lo.cadena,L.primero); Uno, dos, tres, cuatro, cinco
}
Salida:
Cinco, dos , tres, cuatro, uno
L -> L coma id {
Lo.primero=L.primero;
Lo.cadena=concat(L.cadena,L.ultimo, “,”);
Lo.ultimo= val(id);
}
| id {
Lo.primero=val(id);
Lo.ultimo=””;
Lo.cadena=””;
};