Traducción Dirigida por la Sintáxis

Slides:



Advertisements
Presentaciones similares
ANALIZADOR SEMANTICO DIANA CAROLINA CASTAÑO YANCI VIVIANA CASTRO PEDRO LUIS FLÓREZ SANTIAGO GUTIÉRREZ A.
Advertisements

Ejemplo Práctico de un Compilador Pequeño
Compiladores e intérpretes Análisis Sintáctico II
Compiladores e intérpretes Generación de código intermedio II
Compiladores e intérpretes
Compiladores e intérpretes Análisis Sintáctico III
Cb00843 Traductores Rogelio Dávila Pérez Profesor Planta
Gramáticas Libres de Contexto
Procesadores de Lenguaje
Arquitectura CLARO-TECNOTREE
Analizadores Sintácticos Descendentes Predictivos
Procesadores de Lenguajes I
Informática II Prof. Dr. Gustavo Patiño MJ
Aplicación del paradigma orientado a objetos
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Traducción dirigida por la Sintaxis
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno.
DIAGRAMAS DE CLASES Completando los diagramas de interacción, es posible identificar la especificación de las clases que participarán en la solución indicando.
ANALISIS SINTACTICO DESCENDENTE
Teoría de lenguajes y compiladores
DIAGRAMA DE COMPONENTES INTEGRANTES Córdova Vásquez Giovanny Escobar Alvares Calixto Gomez Quinteros Adelaida Pinto Flores Yarmila.
CAPITULO 2 La Representación del Conocimiento
Tema 3. Optimización de Código
Funciones en lenguaje C
ANALISIS SINTACTICO El análisis gramatical es la tarea de determinar la sintaxis, o estructura, de un programa. Por esta razón también se le conoce como.
Teoría de lenguajes y compiladores
Tema 6: Clases Antonio J. Sierra.
ALGORITMOS es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos.
TRADUCTOR DE UN PROGRAMA
Semana 5 Subprogramas..
M.C. Meliza Contreras González
Análisis sintáctico LR: SLR (LR simple)
Procesadores del Lenguaje
M.C. Juan Carlos Olivares Rojas
* FRAUSTO JIMENEZ GABRIELA * * HERNANDEZ TORRES ANA LAURA * * MANDUJANO JUAN CARLOS * * NOVA MARIN YARELI PAULINA * * ZAVALA CORTE JOCELYN ARELI *
ANALISIS SINTACTICO Parte I
Estructura de Datos y Algoritmos
TIPOS DE DATOS ABSTRACTOS
Resumen de Compilación Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Traducido por Christian Torres Universidad Ricardo.
Clasificación de Gramáticas y Manejo de Errores
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
Asignación de Espacio No Contiguo
Teoría de lenguajes y compiladores
PROGRAMACION DE SISTEMAS
Todo traductor esta basado en una gramática para el lenguaje fuente. Todo traductor esta basado en una gramática para el lenguaje fuente. Una gramática.
Introducción al Análisis Sintáctico
Compiladores e intérpretes Análisis Sintáctico III
LENGUAJES DE PROGRAMACIÓN
Programación de Sistemas
Compiladores e intérpretes
Análisis Léxico Área Software de Base.
INFORMATICA VII (Programación e implementación de sistemas)
Representación de Algoritmos
UNIVERSIDAD LATINA (UNILA)
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) TRADUCTORES Y ANALIZADOR LEXICOGRÁFICO.
1 Sebastián Argüello A60490 semana 3 Autómatas y compiladores CI-1322.
Teoría de lenguajes y compiladores
Ingeniería de Requisitos
Teoría de lenguajes y compiladores
PRINCIPIOS DE PROGRAMACIÓN
Elaboración de algoritmos usando lógica de programación
Introducción a los TADs
Colegio de Bachilleres Plantel 13 Xochimilco - Tepepan
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
Programación de Sistemas
Marco de Trabajo para Indexación, Clasificación y Recopilación Automática de Documentos Digitales Javier Caicedo Espinoza Gonzalo Parra Chico.
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Presentación De UML Lenguaje estándar para escribir planos de software Se usa para visualizar, especificar, construir y documentar los artefactos de un.
La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 3 – Diseño de Programas.
Transcripción de la presentación:

Traducción Dirigida por la Sintáxis Área de Autómatas y Lenguajes Traducción Dirigida por la Sintáxis Diseño y Construcción de Compiladores 2008

Traducció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. Traducción Dirigida por la Sintáxis Compiladores 2008 - Traducción Dirigida por la Sintáxis

Traducció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. Traducción Dirigida por la Sintáxis Compiladores 2008 - Traducción Dirigida por la Sintáxis

Traducció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. Traducción Dirigida por la Sintáxis Compiladores 2008 - Traducción Dirigida por la Sintáxis

Í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 Esquemas de Traduccion Índice Compiladores 2008 - Traducción Dirigida por la Sintáxis

Gramáticas de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis

Gramá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. Gramáticas de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis

Gramáticas de Atributos Sea G=<N,T,P,S> 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.aj=f(b1j1,…..,bkjk), 0  jl  m, 0  i  m, donde cada bljl  Atr(Xjl). Gramáticas de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis

Atributos 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.a=f(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. X0 X1 Xi Xn Atributos Sintetizados Compiladores 2008 - Traducción Dirigida por la Sintáxis

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 Atributos Heredados Compiladores 2008 - Traducción Dirigida por la Sintáxis

Ejemplos de Gramáticas de Atributos Dada la siguiente gramática G1: NRO DIG | NRO DIG DIG 0|1|2|3|4|5|6|7|8|9 Calcular el valor de los números generados por G usando un atributo sintetizado val. Ejemplos de Gramáticas de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis

Ejemplos 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 Ejemplos de Gramáticas de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis

Ejemplos de Gramáticas de Atributos Ejercicio: La siguiente gramática permite expresar números en decimal y octal: G3: BNRONRO B B O|D NRO NRO DIG | DIG DIG  0|1|2|3|4|5|6|7|8|9 Defina los atributos y reglas semánticas necesarias para calcular el valor del número. Ejemplos de Gramáticas de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis

Definiciones Dirigidas por la Sintáxis Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. DDS Compiladores 2008 - Traducción Dirigida por la Sintáxis

Cada producción A está asociada con un conjunto de reglas semánticas de la foma: b=f(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. DDS-Formato Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. DDS Compiladores 2008 - Traducción Dirigida por la Sintáxis

DDS-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. DDS-Evaluación de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis

DDS-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. DDS-Evaluación de Atributos Compiladores 2008 - Traducción Dirigida por la Sintáxis

DDS-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. DDS-Grafo de Dependencias Compiladores 2008 - Traducción Dirigida por la Sintáxis

DDS-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 Para cada regla semántica b=f(c1,…,ck) asociada con la producción usada en el nodo n Hacer Para i=1 hasta k Hacer Construir un arco desde ci hacia el nodo b DDS-Grafo de Dependencias Compiladores 2008 - Traducción Dirigida por la Sintáxis

Grafo de Dependendia - Ejemplo Gramática G3 N Prod. R. Sem. 1 NRO1 NRO2 DIG {NRO1.val=NRO2.val+DIG.val} 2 NRO DIG {NRO.val=DIG.val} 3 DIG 0 {DIG.val=0} 4 ……. …… Grafo de Dependencias para la Producción 1 NRO1.val DIG.val NRO2.val Grafo de Dependendia - Ejemplo Compiladores 2008 - Traducción Dirigida por la Sintáxis

Grafo 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 Grafo de Dependendia - Ejemplo Árbol de Parse Compiladores 2008 - Traducción Dirigida por la Sintáxis

DDS: 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. DDS: Grafo de Dependencias-Orden de Evaluación Compiladores 2008 - Traducción Dirigida por la Sintáxis

Grafo de Dependendia - Ejemplo Ejercicio: Construir Grafos de Dependencias para las Gramáticas G1 y G2 para diferentes cadenas aceptadas por las mismas. Grafo de Dependendia - Ejemplo Compiladores 2008 - Traducción Dirigida por la Sintáxis

Grafo 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 Grafo de Dependendia – Orden de Evaluación Compiladores 2008 - Traducción Dirigida por la Sintáxis

Grafo de Dependendia – Orden de Evaluación b c g d e f b c g d e f c g d e f c g e f a a b a a d Completar el ejemplo! Grafo de Dependendia – Orden de Evaluación Compiladores 2008 - Traducción Dirigida por la Sintáxis

Grafo 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 Grafo de Dependendia – Orden de Evaluación Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. Ejercicios Compiladores 2008 - Traducción Dirigida por la Sintáxis

Grafo 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). Grafo de Dependencias-Orden de Evaluación Compiladores 2008 - Traducción Dirigida por la Sintáxis

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 DDS Compiladores 2008 - Traducción Dirigida por la Sintáxis

DDS S-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. DDS S-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis

Ejercicio: Determine Cuáles de las GA presentadas previamente son DDS S-Atribuidas? Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. DDS S-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis

DDS 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 Estado Valor Z Z.x Y Y.x X X.x …… 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.a=f(val[top],val[top-1],val[top-2]) DDS S-Atribuida Evaluación Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. DDS S-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis

DDS L-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. DDS L-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis

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X1…Xj- 1Xj….Xn depende solo de: Los atributos sintetizados de X1…Xj-1, a la izquierda de Xj. Los atributos heredados de X0. DDS L-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis

DDS 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. DDS L-Atribuida Compiladores 2008 - Traducción Dirigida por la Sintáxis

Evaluació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). Evaluación de DDS L-Atribuidas Compiladores 2008 - Traducción Dirigida por la Sintáxis

Evaluació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 Evaluación de DDS L-Atribuidas Compiladores 2008 - Traducción Dirigida por la Sintáxis

Esquemas de Traducción Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. Esquemas de Traducción Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. Esquemas de Traducción Compiladores 2008 - Traducción Dirigida por la Sintáxis

Esquemas de Traducción G. L-Attr 1 DT L 2 Tint 3 Treal 4 L1L2,id 5 Lid N. ET para G 1 DT{L.in=T.type} L 2 Tint {T.tipo=integer} 3 Treal {T.tipo=real} 4 L1 {L1.in=L.in} L2,id{addtype(id.entry,L.in} 5 L id{addtype(id.entry, L.in} Esquemas de Traducción Compiladores 2008 - Traducción Dirigida por la Sintáxis

Esquemas de Traducción Ejercicio: Construir el Árbol de Parse para la siguiente declaración: Real id1, id2, id3. Ejercicio: Evaluar el ET. Esquemas de Traducción Compiladores 2008 - Traducción Dirigida por la Sintáxis

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 ET Diseño Compiladores 2008 - Traducción Dirigida por la Sintáxis

Producción con Acciones 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{Xj.h}…..Xn  DT LID D T{LID.t=T.tipo} LID ET Diseño Compiladores 2008 - Traducción Dirigida por la Sintáxis

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 ET Diseño Compiladores 2008 - Traducción Dirigida por la Sintáxis

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=NRO2.val * 10 + DIG.val 3) DIG0 DIG.val=0 ET Diseño Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. ET Técnica de Construcción Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. ET Técnica de Construcción Compiladores 2008 - Traducción Dirigida por la Sintáxis

Aplicaciones Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. Análisis Estático Compiladores 2008 - Traducción Dirigida por la Sintáxis

Un visualizador de los elementos estáticos de un sistema. Análisis Estático Compiladores 2008 - Traducción Dirigida por la Sintáxis

La información estática es importante 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”. Análisis Dinámico Compiladores 2008 - Traducción Dirigida por la Sintáxis

Análisis Dinámico int f(int x, int y) int f(int x, int y) { { { { int r; int r; r=2*x + 3*y printf(“Entra: f”); return r; r=2*r+3*y; } printf(“Sale:f”); } 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? Análisis Dinámico Compiladores 2008 - Traducción Dirigida por la Sintáxis

Vista de componentes recuperadas con Análisis Dinámico. Compiladores 2008 - Traducción Dirigida por la Sintáxis

Visualizació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=(P;E) P{x/ x es una función del sistema} E={(x,y) / xP  y P  x llama a y} Visualización de Software Compiladores 2008 - Traducción Dirigida por la Sintáxis

Visualizació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 Visualización de Software Compiladores 2008 - Traducción Dirigida por la Sintáxis

Otra forma de presentar la relación llamador-llamado entre las funciones del sistema. Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. Sistemas Compiladores 2008 - Traducción Dirigida por la Sintáxis

Software Industrial A X2 3 B 1 X1 2 1 E C Y 4 4 Software Industrial Compiladores 2008 - Traducción Dirigida por la Sintáxis

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. Bibliografía Compiladores 2008 - Traducción Dirigida por la Sintáxis

Muchas Gracias por su atención! Diseño y Construcción de Compiladores 2008 Compiladores 2008 - Traducción Dirigida por la Sintáxis