Traducción dirigida por la sintaxis
description
Transcript of Traducción dirigida por la sintaxis
![Page 1: Traducción dirigida por la sintaxis](https://reader036.fdocuments.net/reader036/viewer/2022081813/5571f84249795991698d02bc/html5/thumbnails/1.jpg)
Traducción dirigida por la sintaxis
Laboratorio de Compiladores 1, Universidad de San Carlos de
Guatemala
![Page 2: Traducción dirigida por la sintaxis](https://reader036.fdocuments.net/reader036/viewer/2022081813/5571f84249795991698d02bc/html5/thumbnails/2.jpg)
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.
![Page 3: Traducción dirigida por la sintaxis](https://reader036.fdocuments.net/reader036/viewer/2022081813/5571f84249795991698d02bc/html5/thumbnails/3.jpg)
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
![Page 4: Traducción dirigida por la sintaxis](https://reader036.fdocuments.net/reader036/viewer/2022081813/5571f84249795991698d02bc/html5/thumbnails/4.jpg)
Principio de Traducción dirigida por la sintaxis
Se realizan en paralelo• Análisis semántico• Traducción
S -> L puntocomaL -> L coma id| TIPO id TIPO -> integer| string| char| float | double
L
Tipo id
L
idcoma
L
idcoma
S
puntocoma
Lo.tipo= tipo.valLo.Val =id
L.tipo= L.tipoL.Val =concat(id)
L.tipo= L.tipoL.Val =concat(id)
Cadena:Integer id1, id2, id3, id4;
![Page 5: Traducción dirigida por la sintaxis](https://reader036.fdocuments.net/reader036/viewer/2022081813/5571f84249795991698d02bc/html5/thumbnails/5.jpg)
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”; }
![Page 6: Traducción dirigida por la sintaxis](https://reader036.fdocuments.net/reader036/viewer/2022081813/5571f84249795991698d02bc/html5/thumbnails/6.jpg)
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
![Page 7: Traducción dirigida por la sintaxis](https://reader036.fdocuments.net/reader036/viewer/2022081813/5571f84249795991698d02bc/html5/thumbnails/7.jpg)
Tipos de AtributosAtributos 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); :}
![Page 8: Traducción dirigida por la sintaxis](https://reader036.fdocuments.net/reader036/viewer/2022081813/5571f84249795991698d02bc/html5/thumbnails/8.jpg)
Tipos AtributosAtributos Heredados:Calculados con atributos en nodos padre y hermanos.Información descendente o de tránsito horizontalSe utilizan para transferir información entre reglas
![Page 9: Traducción dirigida por la sintaxis](https://reader036.fdocuments.net/reader036/viewer/2022081813/5571f84249795991698d02bc/html5/thumbnails/9.jpg)
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
![Page 10: Traducción dirigida por la sintaxis](https://reader036.fdocuments.net/reader036/viewer/2022081813/5571f84249795991698d02bc/html5/thumbnails/10.jpg)
S -> L{Write(Lo.ultimo,Lo.cadena,L.primero);} 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=””; };
Entrada:Uno, dos, tres, cuatro, cinco Salida:Cinco, dos , tres, cuatro, uno