INFORMATICA VII (Programación e implementación de sistemas)

Slides:



Advertisements
Presentaciones similares
Clasificación de los compiladores
Advertisements

Compiladores e intérpretes Análisis Sintáctico II
Estrella 0 - Fundamentos de la Programación
Prof. Ing.Maria Rosa Damaso Rios
¿Compilador ? Es un traductor que convierte un texto escrito en un lenguaje fuente y lo traduce a un programa objeto en código máquina.
Teoría de Autómatas y Compiladores
Prototipo de compilador didáctico del lenguaje LC99
Facultad de Ciencias de la Computación
Fundamentos de programación
Temas Operaciones básicas Instalando el compilador
Unidad 1. Introducción al proceso de compilación.
Teoría de lenguajes y compiladores
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Concepto de programa. Directorio Concepto de programa. Analisis del problema. Resolucion del problema. Desarroollo de un programa. Partes constitutivas.
UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
Programación 1 Introducción
Traducción dirigida por la Sintaxis
Teoría de lenguajes y compiladores
Programas Son una serie o secuencia de instrucciones entendibles por los ordenadores que permiten la realización de las acciones o tareas para las que.
Lenguajes de programación
Tema 3. Optimización de Código
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.
TRADUCTOR DE UN PROGRAMA
Fundamentos de Programación
M.C. Meliza Contreras González
 LOPEZ MENDOZA CORINA AMALINALLI  GRUPO 304.  Una base de datos o banco de datos (en ocasiones abreviada BB.DD.) es un conjunto de datos pertenecientes.
Teoría de lenguajes y compiladores
FUNDAMENTOS DE PROGRAMACION
INGENIERIA EN SISTEMAS COMPUTACIONALES
Resumen de Compilación Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Traducido por Christian Torres Universidad Ricardo.
SOFTWARE DE PROGRAMACIÓN
Universidad Nacional de Jujuy Facultad de Ingeniería
LENGUAJE DE PROGRAMACIÓN
Fundamentos de programación Organización de una computadora.
Teoría de lenguajes y compiladores
Procesadores de Lenguajes
LENGUAJES DE PROGRAMACIÓN
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.
Programación de Sistemas
Tema 1. Introducción y Conceptos Básicos
Análisis Léxico Área Software de Base.
COMPILADORES DIANA ROCIO OLAYA MESA.
Prof. Gabriel Matonte Programación I Prof. Gabriel Matonte
Programación de Sistemas FEI – 2008
Unidad 1. Introducción a los Compiladores.
Objetivo Mostrar los fundamentos de la programación a través de ejemplos y prácticas utilizadas cotidianamente en el desarrollo de aplicaciones.
UNIVERSIDAD LATINA (UNILA)
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) TRADUCTORES Y ANALIZADOR LEXICOGRÁFICO.
Metodología de la programación
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
Teoría de lenguajes y compiladores
Preposición: suma= var1 + var2 + 10; Análisis Léxico El analizador léxico lee los caracteres del programa fuente, y verifica que correspondan a una secuencia.
PRINCIPIOS DE PROGRAMACIÓN
El proceso de compilación
M.S.C. Ivette Hernández Dávila
Software.
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
Programación de Sistemas
FUNDAMENTOS DE PROGRAMACIÓN
TEMA 4: MÉTODOS Y ELEMENTOS DE PROGRAMACIÓN
Proceso de desarrollo de Software
Conceptos y Lenguaje Imperativo
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
CENTRO UNIVERSITARIO UAEM TEXCOCO INGENIERÍA EN COMPUTACIÓN
 PRESENTADO POR : ANDRES MAYORGA DANIELA PAEZ VEGA.
Fundamentos de Programación Unidad I Conceptos Básicos.
INSTITUTO TECNOLÓGICO SUPERIOR DE LIBRES FUNDAMENTOS DE DESARROLLO DE SISTEMAS INTEGRANTES:  Díaz Rojas Vianey  Ramírez Barojas Nancy Marisol  Olivarez.
Autómatas y Compiladores. Primera Semana. Ricardo Vargas Del Valle A35469.
P ROCESO DE E NSAMBLADO Cámara Vázquez Berenice Rubí.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
Transcripción de la presentación:

INFORMATICA VII (Programación e implementación de sistemas) UNIVERSIDAD LATINA INFORMATICA VII (Programación e implementación de sistemas) COMPILADORES

Fases de Compilación Un compilador opera como una secuencia de fases, cada una de las cuales transforma una representación del programa fuente en otro. En la práctica las fases pueden agruparse en análisis y síntesis. Al análisis se le conoce como el front-end del compilador, a la síntesis, que es la traducción propiamente dicha, se le denomina back-end.

Fases de Compilación En general podemos mencionar seis fases de la compilación. La primera fase, el análisis lexicográfico, identifica tokens (las “palabras”) en un programa. La segunda fase el análisis sintáctico, obtiene la estructura de un programa por medio de su gramática. La tercera fase, análisis semántico, finaliza el análisis del programa y lo traduce a una forma intermedia para las fases de síntesis. La cuarta fase , optimización, encuentra las maneras de reducir el tiempo o el espacio a utilizar cuando el programa traducido es ejecutado. La quinta fase, preparación para la generación del código, asigna memoria y registros para mantener los valores y direcciones de las variables y expresiones en el tiempo de ejecución. La sexta fase, generación de código, produce código en lenguaje ensamblador a partir de la representación intermedia (optimizada).

Fases de Compilación

Análisis lexicográfico (rastreo o tokenizing). Este análisis agrupa secuencias de caracteres desde el programa fuente de entrada en unidades llamadas lexemas, componentes léxicas o tokens. Así el rastreo puede considerarse un mapeo: secuencia de caracteres => secuencia de tokens. En el análisis lexicográfico, la secuencia de caracteres se rastrea hasta que se encuentra una secuencia permitida; luego se filtra para clasificarla por medio de un tipo como entero o palabra clave o identificador, etc. Los analizadores realizan otras tareas como la eliminación de espacios en blanco y comentarios; en ocasiones crean una tabla de símbolos (o tabla de nombres, una tabla de nombres definidos por el usuario que se utilizan en un programa. (esta creacion de la tabla de nombres también es considerada como parte del análisis semántico. En el análisis lexicográfico también se pueden encontrar los errores simples de ortografía.

Análisis lexicográfico (rastreo o tokenizing). Ejemplo de salida del analizador lexicográfico que es conocida como “flujo de tokens”.

Token. Los tokens (componentes léxicas) son las unidades léxicas básicas del mismo modo en que las palabras o los signos de puntuación son las unidades básicas de una oración. Los tokens varían de lenguaje en lenguaje, e incluso de compilador en compilador para el mismo lenguaje. La elección de los tokens es una de las tareas del diseñador de compiladores. Consideraremos las unidades léxicas básicas o tokens como secuencias especiales de caracteres, las cuales comprenden las palabras de nuestro lenguaje. Un token es la unidad más pequeña del lenguaje que tiene significado. Algunos ejemplos de tokens son: a) La palabra clave SI b) La constante 12 c) El identificador X1 d) El operador < o .LT. e) Puntuació ( o ; Estos ejemplos dependen del lenguaje que se utilice. Los tokens se describen por lo general en dos partes, un tipo o clase y un valor, Token = (Tipo, Valor): a) (Palabra Clave, SI) b) (Ident, “Nuevo”) c) (Oper, >) d) (Ident, “MáxNúm”) e) (Palabra clave, ENTONCES).

Análisis sintáctico (fase gramatical). Es más complejo que el analizador lexicográfico. Agrupa los tokens en estructuras sintácticas, muy similar a como teníamos que estructurar las oraciones en la primaria. Para un lenguaje de programación, bb * 12 consiste de tres tokens (bb, * y 12) y deben agruparse en una estructura denominada expresión. Mientras que, X1 := a + bb * 12; debe agruparse en una estructura llamada sentencia de asignación que contiene la subestructura expresión.

Análisis sintáctico (fase gramatical). Categorías son parte de la gramática del lenguaje

Análisis semántico Toma como entrada el árbol de análisis gramatical creado en la fase de análisis sintáctico. Esta fase determina el significado (semántica) del programa mediante la creación de tablas de símbolos, verificando cuales de las variables utilizadas han sido definidas y una infinidad de otras tareas anteriores a la generación de código. Dos de las tareas principales en la fase del análisis semántico son: 1) la verificación estática del programa y 2) la generación de una representación intermedia (RI).

Análisis semántico La representación intermedia también denominada lenguaje intermedio o código intermedio (RI, LI p CI), es una forma alternativa para un árbol de análisis gramatical. A veces el analizador gramatical crea su representación intermedia en forma directa; y en ocasiones el árbol de este se convierte a la representación.

Optimización Cambia la representación intermedia de modo que la fase final de generación de código producirá código que se ejecutará más rápido u ocupara menos espacio o ambas cosas. Se pueden identificar cuatro tipos de optimización: a) Locales.- Se hacen dentro de una sentencia o grupo de sentencias. Hay dos tipos la de propagación constante y la de eliminación de sub-expresiones comunes. b) De ciclos iterativos.- Se hacen dentro de los ciclos. c) Globales.- Se efectúan sobre un programa o procedimiento. d) De mirilla.- Se realizan después de que el código es seleccionado “atisbando” por una pequeña secuencia de código

Optimización

Preparación para la generación de código El compilador decide muchas de las cuestiones acerca de donde residirán los valores dos de las cuestiones en la preparación de la generación de código son: la asignación de memoria y la asignación de registros. Asignación de memoria.- La asignación y el mantenimiento del espacio de memoria para conservar los valores de las variables y expresiones se conoce como asignación de memoria. Asignación de registros.- Los registros se utilizan para conservar los valores de las variables y expresiones, y aunque rara vez hay suficientes para un programa completo, las arquitecturas más recientes basadas en RISC (Conjunto reducido de instrucciones de Cómputo) poseen más.

Preparación para la generación de código

Generación de código Significa la traducción de la representación intermedia a lenguaje ensamblador, después de la optimización, y después que se han asignado los registros y la memoria.

Fases de compilación en un lenguaje de programación. Las fases de compilación en lenguaje C son: a) Pre-procesado.- Identifica bibliotecas de funciones predefinidas. b) Compilación.- Valida que el programa no tenga errores sintácticos, semánticos conforme a la gramática del lenguaje. c) Enlazado.- Valida que las funciones existan en los binarios de las librerías de C (c.lib).

Bibliografía. LEMONE, Karen A. Fundamentos de Compiladores. Como traducir al lenguaje de la computadora. 1ª. Edición. Compañía Editorial Continental, S. A. de C. V. 1996. ISBN 968-26-1297-7 FABREGAT, ERROL, FABREGAT, Rita. Documento electrónico para la asignatura Informática VII. Plan 2005. UNAM. FCA.