Title: Traduccin Dirigida por la Sintxis
1Traducción Dirigida por la Sintáxis
Área de Autómatas y Lenguajes
- Diseño y Construcción de Compiladores
- 2008
2Traducción Dirigida por la Sintáxis
- 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.
3Traducción Dirigida por la Sintáxis
- La evaluación de las reglas semánticas puede
- Generar Código.
- Insertar información en la Tabla de Símbolos.
- Relizar el Chequeo Semántico.
- Dar mensajes de error
- Etc.
4Traducción Dirigida por la Sintáxis
- Existen dos notaciones para asociar información a
las reglas semánticas - Definiciones Dirigidas por la Sintáxis 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Índice
- Gramáticas de Atributos
- Definiciones Dirigidas por la Sintáxis.
- Definiciones S-Atribuidas
- Definiciones L-Atribuidas
- Implementación de las Definiciones Dirigidas por
la Sintáxis - Grafo de Dependencias
- Definiciones S-Atribuidas
- Definiciones L-Atribuidas
- Esquemas de Traduccion
6Gramáticas de Atributos
7Gramáticas de Atributos
- Una Gramática de Atributos define la sintaxis y
la semántica de un lenguaje. - También define la información que se necesita
almacenar en el Árbol de Sintaxis Abstracta para
llevar a cabo el Análisis Semántico y la
Generación de Código. - Dicha información se almacena como atributos de
los nodos del Árbol de Sintáxis Abstracta.
8Gramáticas de Atributos
- Sea GltN,T,P,Sgt una Gramática Libre de Contexto.
- G es una Gramática de Atributos (GA) si
- Cada X ? N ? T está asociado con dos conjuntos
disjuntos, H(X), el conjunto de los atributos
hereddos y S(X) el conjunto de los atributos
sintetizados. X ? N ? T. - El conjunto de atributos de G es Atr H ? S.
Donde H ?X ? N H(X), S ?X ? N ? T S(X). - X0 ?X1X2.Xm ? P y aj ? Atr(Xi), 0 ? i ? m,
entonces Xi.aj es el atributo aj de Xi y Dxi,aj
es el dominio de valores de Xi.aj. - Una regla semántica asociada con X0 ?X1X2.Xm ? P
es de la forma Xi.ajf(b1j1,..,bkjk), 0 ? jl ?
m, 0 ? i ? m, donde cada bljl ? Atr(Xjl).
9Atributos Sintetizados
Atributo Sintetizado Un atributo a es
sintetizado si, dada una regla de una gramática
A?X1X2.Xn la ecuación asociada con a es de la
forma A.af(X1.a1,.X1.ak,.,Xn.a1,Xn.ak). En
otras palabras a es un atributo sintetizado si su
valor depende de los valores de atributos de sus
hijos.
10Atributos Heredados
- Atributo Heredado Un atributo que no es
sintetizado es un atributo heredado. En otras
palabras un atributo heredado es aquel cuyo valor
de atributo está definido en términos de los
valores de atributos del padre o de sus hermanos.
X0
X1
Xi
Xn
11Ejemplos de Gramáticas de Atributos
- Dada la siguiente gramática G1
- NRO? DIG NRO DIG
- DIG ?0123456789
- Calcular el valor de los números generados por G
usando un atributo sintetizado val.
12Ejemplos de Gramáticas de Atributos
- La siguiente gramática expresa declaraciones en
una sintaxis similar a la usada por el lenguaje
C - G2
- DECL ? TYPE VAR-LIST
- TYPE ? INT FLOAT
- VAR-LIST ? ID, VAR-LIST ID
- Usando un atributo heredado determine el tipo de
los identificadores
13Ejemplos de Gramáticas de Atributos
- Ejercicio La siguiente gramática permite
expresar números en decimal y octal - G3
- BNRO?NRO B
- B ?OD
- NRO ?NRO DIG DIG
- DIG ? 0123456789
- Defina los atributos y reglas semánticas
necesarias para calcular el valor del número.
14Definiciones Dirigidas por la Sintáxis
15DDS
- DDS Son Gramáticas de Atributos en las cuales no
se especifica el orden de evaluación de las
reglas semánticas. - Las gramáticas de atributos G1 y G2 son ejemplos
de definiciones dirigidas por la sintaxis.
16DDS-Formato
- Cada producción A?? está asociada con un conjunto
de reglas semánticas de la foma - bf(c1,c2,...,ck)
- donde f es una función y
- b es un atributo Sintetizado de A y c1,c2,...,ck
son atributos de los símbolos en A??, o - b es un atributo Heredado de un símbolo de la
gramática en ?, y c1,c2,...,ck son atributos de
los símbolos de la gramática en ? o atributos de
A.
17DDS
- Se asume que los símbolos terminales tienen
atributos sintetizados proporcionados por el
Analizador Lexicográfico. - Las llamadas a procedimientos definen valores de
atributos sintetizados ficticios (Dummy) del no
terminal del lado izquierdo de la producción.
18DDS-Evaluación de Atributos
- Si en una DDS el orden de evaluación de los
atributos no esta especificado entonces como se
realiza la evaluación de los atributos? - Respuesta
- Utilizando un grafo de dependencias.
19DDS-Evaluación de Atributos
- La implementación de una DDS consiste en
encontrar un orden de evaluación de los
atributos. - Cada atributo tiene que estar disponible cuando
la computación se realiza.
20DDS-Grafo de Dependencias
- Un Grafo de Dependencia muestra las
interdependencias entre los atributos de varios
nodos en un Árbol de Parse. - Hay un nodo para cada atributo.
- Si un atributo b depende de un atributo c hay un
arco desde el nodo c al nodo b. - Regla de Dependencia Si un atributo b, en el
nodo n, en un árbol de derivación depende del
atributo c luego la regla semántica que define a
b se debe evaluar después de la regla semántica
que define a c. - La interdependencia entre atributos heredados y
sintetizados se puede dibujar como un grafo
dirigido. Este grafo se conoce con el nombre de
Grafo de Dependencias.
21DDS-Grafo de Dependencias
- Para cada nodo n el el árbol Hacer
- Para cada atributo a del simbolo de G hacer
- Construir un nodo en el grafo de dependencia
- Fin Para
- Fin Para
- Para cada nodo n el el árbol Hacer
- Para cada regla semántica bf(c1,,ck) asociada
con la producción usada en el nodo n Hacer - Para i1 hasta k Hacer
- Construir un arco desde ci hacia el nodo b
- Fin Para
- Fin Para
- Fin Para
22Grafo de Dependendia - Ejemplo
Grafo de Dependencias para la Producción 1
NRO1.val
DIG.val
NRO2.val
23Grafo de Dependendia - Ejemplo
Grafo de Dependencias para la Cadena 345
NRO.val
NRO.val
DIG.val
NRO.val
DIG.val
DIG.val
Grafo de Dependencias
Árbol de Parse
24DDS Grafo de Dependencias-Orden de Evaluación
- Construir el árbol de parsing para la entrada x.
- Construir el Grafo de Dependencias.
- Construir el Ordenamiento Topológico.
- Evaluar las reglas semánticas en el orden
indicado por el Ordenamiento Topológico.
25Grafo de Dependendia - Ejemplo
Ejercicio Construir Grafos de Dependencias para
las Gramáticas G1 y G2 para diferentes cadenas
aceptadas por las mismas.
26Grafo de Dependendia Orden de Evaluación
- Se utiliza un Ordenamiento Topológico
- Algoritmo Destructivo (Sólo para propósito
pedagógico). - Algoritmo Ordenamiento Topológico(G,T)
- Entrada G grafo de dependencias.
- Salida T el ordenamiento topológico de G.
- Open el conjunto de nodos a tratar.
- Open?minimales(G)
- Mientras Open?? Hacer
- Sea x ? Open
- Eliminar x de G
- Insertar x en T
- Open ? Open x
- Open ? minimales(G)
- Fin Mientras
- Retornar T
27Grafo de Dependendia Orden de Evaluación
a
a
b
a
a
d
Completar el ejemplo!
28Grafo de Dependendia Orden de Evaluación
De el orden de evaluación del siguiente grafo de
dependencias
NRO.val
NRO.val
DIG.val
NRO.val
DIG.val
DIG.val
29Ejercicios
- Ejercicio Elaborar un algoritmo que permita
extraer un Ordenamiento Topológico sin destruir
el grafo subyacente. - Ejercicio Elaborar un algoritmo no destructivo
que permita extraer un Ordenamiento Topológico
Inverso.
30Grafo de Dependencias-Orden de Evaluación
- Problemas con el método
- Falla si el grafo de dependencias tiene un ciclo.
- Consume tiempo debido a la construcción del grafo
de dependencias. - Solución
- Diseñar la DDS de tal forma que los atributos se
puedan evaluar en un orden fijo evitando la
construcción del grafo de dependencias (este
método es el utilizado por muchos compiladores).
31DDS
- En las DDS no circulares se puede establecer un
orden de evaluación fijo en tiempo de
construcción del compilador. - Hay dos clases importantes de definiciones no
circulares - S-Atribuidas
- L-Atribuidas
32DDS S-Atribuida
33DDS S-Atribuida
- DDS S-Atribuida Es una DDS que sólo utiliza
atributos sintetizados. - Esta clase de DDS es interesante porque los
valores de atributo pueden ser obtenidos a través
de un barrido Post Orden del Árbol de Parse.
34DDS S-Atribuida
Ejercicio Determine Cuáles de las GA presentadas
previamente son DDS S-Atribuidas?
35DDS S-Atribuida
- Los atributos sintetizados se pueden evaluar
usando un parser bottom-up cuando se analiza la
cadena de entrada evitando la construcción del
grafo de dependencias. - El parser mantiene los valores de los atributos
sintetizados en su pila. - Cuando se realiza una reducción A??, el atributo
para A se calcula a partir de los atributos de ?
que se encuentran en la pila. - De esta manera una DDS S-Atribuida se puede
implementar extendiendo la pila de un parser LR.
36DDS S-Atribuida Evaluación
- Se incorporan campos extras a la pila para
mantener los valores de los atributos
sintetizados. - Por ejemplo si se está trabajando con un solo
atributo sintetizado la pila tiene la siguiente
forma
- El tope de la pila se mantiene con un puntero
top. - Antes de que la reducción A?XYZ se realize, se
calcula el atributo sintetizado de A - A.af(valtop,valtop-1,valtop-2)
37DDS S-Atribuida
Ejercicio Utilice la gramática G3 para evaluar
la cadena 345 usando la aproximación propuesta
para las gramáticas S-Atribuidas. Muestre el
contenido de la pila.
38DDS L-Atribuida
39DDS L-Atribuida
- Son útiles para expresar la dependencia de una
construcción en el contexto en el cual aparece. - A diferencia de los atributos sintetizados el
orden en el cual aparecen los atributos heredados
es importante. - Es siempre posible reescribir la DDS con sólo
atributos sintetizados. No obstante es más
natural usar atributos heredados y sintetizados.
40DDS L-Atribuida
- Definición Una DDS es L-Atribuida si cada
atributo heredado de Xj, 1 ? j ? n, en el lado
derecho de una producción del tipo
X0?X1Xj-1Xj.Xn depende solo de - Los atributos sintetizados de X1Xj-1, a la
izquierda de Xj. - Los atributos heredados de X0.
41DDS L-Atribuida
- Importante
- Toda definición S-Atribuida es L-Atribuida.
- Teorema Los atributos heredados en DDS
L-Atribuidas se pueden computar por un recorrido
Pre-Orden del árbol de parse. - Las definiciones L-Atribuidas cubren todas las
traducciones que se pueden realizar sin construir
explicitamente el árbol de parse.
42Evaluación de DDS L-Atribuidas
- Las DDS L-Atribuidas son una clase de DDS cuyos
atributos siempre se pueden evaluar por un
recorrido del árbol de parse. - El procedimiento mezcla los recorridos Post Orden
(sintetizado) y Pre-Orden (heredado).
43Evaluación de DDS L-Atribuidas
- Algoritmo L-Eval (n)
- Entrada N un nodo del árbol de parse anotado.
- Salida La evaluación de atributos
- Comenzar
- Para cada hijo m de n, desde izquierda a
derecha Hacer - Evaluar los atributos heredados de m
- L-Eval(m)
- Fin Para
- Evaluar los atributos sintetizados de n
- Fin
44Esquemas de Traducción
45Esquemas 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.
46Esquemas 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.
47Esquemas de Traducción
48Esquemas de Traducción
Ejercicio Construir el Árbol de Parse para la
siguiente declaración Real id1, id2,
id3. Ejercicio Evaluar el ET.
49ET 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.
50ET 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.
51ET 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.
52ET 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.
53ET 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. -
54ET 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
cB(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.
55Aplicaciones
56Análisis Estático
- Una aplicación científica o industrial se puede
estudiar a partir de las componentes estáticas
que utilizan, por ejemplo Tipos de datos,
Registros, Variables, Constantes, Funciones, etc. - Los temás vistos en esta clase se pueden utilizar
para extraer esta información y dejarla
disponible para que el usuario tenga rápido
acceso a ella en el código fuente del programa. - En otras palabras se pueden usar las DDS o ET
para extraer la información antes mencionada
desde el código fuente.
57Análisis Estático
- Un visualizador de los elementos estáticos de un
sistema.
58Análisis Dinámico
- La información estática es importante. No
obstante conocer el comportamiento del programa
puede ayudar a la tarea de simplificar la
inspección del código. - El Análisis Dinámico se interesa por conocer
cuales son las componentes del sistema bajo
estudio utilizadas para llevar a cabo una
funcionalidad específica. - Una de las formas de llevar a cabo esta tarea
consiste en Instrumentar el Código Fuente. Esto
significa Insertar sentencias dentro del código
fuente del sistema que posibiliten la
identificación de las componentes utilizadas.
59Análisis Dinámico
- int f(int x, int y) int f(int x, int
y) -
- int r int r
- r2x 3y printf(Entra f)
- return r r2r3y
- printf(Salef)
-
- Int main() int main()
-
- f(2,3) printf(ENTRA main)
- f(2,3)
- printf(SALE main)
-
- La ejecución del sistema de la derecha informará
que función ejecutó el sistema. - Luego Ud. Puede almacenar esas trazas de
ejecución para obtener conclusiones acerca del
funcionamiento del sistema. - Se anima Ud. a construir un DDS o un ET que logre
este efecto para la gramática proporcionada por
la materia?
60- Vista de componentes recuperadas con Análisis
Dinámico.
61Visualización de Software
- Una de las formas de estudiar sistemas es
representar gráficamente algunas de sus
características. - Para alcanzar este objetivo se necesita extraer
información del código fuente y luego diseñar una
vista de esa información. - Por ejemplo, una vista clásica es el grafo de
funciones. Dicho grafo se define de la siguiente
manera - G(PE)
- Px/ x es una función del sistema
- E(x,y) / x?P ? y ?P ? x llama a y
62Visualización de Software
- El grafo de funciones se puede extraer usando un
ET. - Un ejemplo de una visualización innovadora de
esta estructura es la siguiente
63- Otra forma de presentar la relación
llamador-llamado entre las funciones del sistema.
64Sistemas
- Las DDS o ET de traducción se pueden utilizar
para desarrollar software de aplicación. - Un ejemplo de esto será propocionado para su
lectura.
65Software Industrial
A
X2
3
B
1
X1
2
1
E
C
Y
0
4
66Bibliografía
- Compilers Principles, Techniques and Tools. Aho,
Setti y Ullman. - Compiler Desing. Reinhard Wilhelm y Dieter
Maurer. - Compiler Construction Principles and Practice.
Kenneth C. Louden. - Compiler Construction. Niklaus Wirth.
- LISS, A linguagem eo ambiente de programação.
Trabajo de fin de carrera en la UM. - Implementação do WebApp Viewer Uma Ferramenta
para compreender aplicações Web. Trabajo de fin
de carrera en la UM.
67Muchas Gracias por su atención! Diseño y
Construcción de Compiladores 2008