M.C. Meliza Contreras González

Slides:



Advertisements
Presentaciones similares
Filminas Segunda semana
Advertisements

Clasificación de los compiladores
Compiladores e intérpretes
Prof. Ing.Maria Rosa Damaso Rios
Cb00843 Traductores Rogelio Dávila Pérez Profesor Planta
¿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
¿Qué son Los Lenguajes de Programación?
Facultad de Ciencias de la Computación
Fundamentos de programación
INSTITUTO TECNOLOGICO DE MINATITLAN
Temas Operaciones básicas Instalando el compilador
Unidad 1. Introducción al proceso de compilación.
Programación de Sistemas
Teoría de lenguajes y compiladores
Traducción dirigida por la Sintaxis
INTRODUCCIÓN A LA PROGRAMACIÓN
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.
ALGORITMOS Y ESTRUCTURAS DE DATOS
Introducción. Agenda Clase 1 ● Preámbulo histórico. ● Razones de la Diversidad de Lenguajes. ● Razones del Éxito de un Lenguaje. ● Clasificación ● Motivación.
Programación de sistemas
TRADUCTOR DE UN PROGRAMA
CONDICIONES DE LA MATERIA
Procesadores del Lenguaje
Estructura de un programa C
Teoría de lenguajes y compiladores
FUNDAMENTOS DE PROGRAMACION
INGENIERIA EN SISTEMAS COMPUTACIONALES
ANALISIS SINTACTICO Parte I
Resumen de Compilación Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Traducido por Christian Torres Universidad Ricardo.
 Fue en el año 1945 cuando el matemático Jhon Von Neumann, fascinado por las posibilidades del ENIAC, demostró que una computadora podía tener una estructura.
Universidad Nacional de Jujuy Facultad de Ingeniería
LENGUAJE DE PROGRAMACIÓN
 Un programa informático es un conjunto de instrucciones que una vez ejecutadas realizarán una o varias tareas en una computadora. Sin programas, estas.
1.4 Traductor y Su estructura
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.
Lenguajes de programación. Lenguaje máquina El ordenador sólo sabe hacer un número limitado de tareas (muy pocas) definidas electrónicamente en su procesador.
COMPILADORES DIANA ROCIO OLAYA MESA.
Introducción a la tecnología Realizado por: Miguel Ángel Arias.
INFORMATICA VII (Programación e implementación de sistemas)
Programación de Sistemas FEI – 2008
Unidad 1. Introducción a los Compiladores.
Teoría de lenguajes y compiladores
UNIVERSIDAD LATINA (UNILA)
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) TRADUCTORES Y ANALIZADOR LEXICOGRÁFICO.
ESCUELA NORMAL “PROF. DARÍO RODRÍGUEZ CRUZ” Licenciatura en educación preescolar Alumnas: *Mayra * Monserrat * Idalia *Cinthia Curso: las TIC en la educación.
Prof. Flor Narciso Departamento de Computación
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.
Lenguaje programación
El proceso de compilación
Tipos de Lenguajes Ensamblador.
Unidad TemáticaI. Conceptos Básicos Horas Prácticas10 Horas Teóricas8 Horas Totales18 Objetivo El alumno determinará las entradas, procesos y salidas.
Traductores Gilberto G. Romero H..
Es un tipo especial de software que nos permite *Crear *Desarrollar *Programar otras aplicaciones. Haciendo uso de sus conocimientos lógicos y lenguajes.
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
Curso: Programación I Grado: 4to. Bachillerato Prof. Gerardo Barrientos.
Programación de Sistemas
 Panorama General Fundamentos de Programación M.I. Jaime Alfonso Reyes Cortés.
CENTRO UNIVERSITARIO UAEM TEXCOCO INGENIERÍA EN COMPUTACIÓN
Autómatas y Compiladores. Primera Semana. Ricardo Vargas Del Valle A35469.
P ROCESO DE E NSAMBLADO Cámara Vázquez Berenice Rubí.
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
Transcripción de la presentación:

M.C. Meliza Contreras González Compiladores M.C. Meliza Contreras González

Historia de los compiladores Arquitectura Von Neumannlenguaje máquina Lenguaje Ensamblador ->arquitectura fija Lenguaje natural independiente de la máquina. Fortran y su compilador por John Backus. Estudio de las gramáticas por Noam Chomsky. Hopper creo el primer compilador de la historia.

Clasificación de los lenguajes Lenguajes máquina – Son los lenguajes de más bajo nivel: secuencias binarias de ceros y unos. – Históricamente, los primeros • Lenguajes ensambladores – Segunda generación de lenguajes – Versión simbólica de los lenguajes máquina (MOV, ADD). • Lenguajes de alto nivel – Lenguajes de tercera generación (3GL) • Estructuras de control, Variables de tipo, Recursividad, etc. • Ej.: C, Pascal, C++, Java, etc • Lenguajes orientados a problemas. – Lenguajes de cuarta generación (4GL) • Ej. SQL

Introducción 4 ¿Qué es un compilador (traductor)? Programa que lee un programa (fuente) en un lenguaje ascii y lo traduce a un programa EQUIVALENTE en otro lenguaje (objeto) Además: da mensajes de error lleva a cabo determinadas “correcciones” (recuperación de errores) puede optimizar el código generado 4

COMPILADOR El compilador es el traductor más extendido Realiza un análisis y genera un programa ejecutable(código objeto) El programa ejecutable, una vez creado, no necesita el compilador para funcionar

INTERPRETE • El intérprete ejecuta el código según lo va interpretando. – Cada vez que se escribe una línea el programa comprueba si es correcta, si lo es, la ejecuta. – La ejecución es interactiva. – Los intérpretes más puros no guardan copia del programa que se está escribiendo. – Ejemplos: Procesos por lotes, CAML, etc. – El intérprete siempre debe estar presente.

COMPILADOR VS INTERPRETE • Compilador – Se compila una vez, se ejecuta n veces – El proceso de compilación tiene una visión global de todo el programa, por lo cual la gestión de errores es más eficiente. – La ejecución es más rápida. • Intérprete – Se traduce cada vez que se ejecuta – Permite interaccionar más con el código en tiempo de ejecución. – Necesita menos memoria

Tipos de Compiladores Compilador cruzado: se genera código en lenguaje objeto para una máquina diferente de la que se está utilizando para compilar. Compilador con montador: compilador que compila distintos módulos de forma independiente y después es capaz de enlazarlos. Autocompilador: compilador que está escrito en el mismo lenguaje que va a compilar. Metacompilador: es sinónimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones del lenguaje para el que se desea obtener un compilador y genera como salida el compilador para ese lenguaje. Descompilador: es un programa que acepta como entrada código máquina y lo traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilación. 8

ESTRUCTURA DE UN COMPILADOR Etapas que constituyen el proceso de compilación Programa Fuente Análisis Léxico Tokens Análisis Sintáctico Árbol sintáctico Manejo de la Tabla de Símbolos y de literales Manejo de Errores Análisis Semántico Generación de Código Intermedio Optimización de Código Generación de Código 9 Programa Objeto

Las FASES de un compilador Tercera fase no siempre presente realiza optimizaciones (algunas) sobre el código (intermedio) generado Cuarta fase: traduce el código intermedio (optimizado) a ensamblador binario Primera fase (precompilador) no siempre se realiza sustituciones de macros eliminación de comentarios inclusión de ficheros extensiones al lenguaje (C+SQL) Segunda fase es la parte fundamental (y siempre presente) consta de: analizador léxico analizador sintáctico generador de código traduce el código fuente a otro objeto puede ser el definitivo puede ser un código intermedio 10

El analizador léxico(Scanner) Recolecta secuencia de caracteres en unidades significativas llamadas tokens . El scanner recorre los caracteres de entrada (el fuente) hasta reconocer un “token” token: unidad léxica indivisible ejemplos: while,if,==,>=,ancho,... La secuencia de caracteres correspondiente se llama “lexema” (componente léxico) 1 token <> 1 lexema(valor del token) Existen Generadores automáticos de analizadores lexicos como LEX 11

El analizador léxico 12 Además, suele realizar otras tareas: procesar directivas al compilador (opciones) introducir información preliminar en la tabla de símbolos eliminar separadores innecesarios sustituir macros listar el fuente Normalmente, los tokens se describen mediante expresiones regulares 12

El analizador léxico 13 Ejemplo: El scanner deberá reconocer sucesivamente, 13

El analizador sintáctico O “parser” Objetivo: agrupar los tokens suministrados por el scanner para reconocer “frases” y su función es comprobar que estan ordenados de forma correcta respecto al lenguaje específico. ¿Cómo lo hace? La sintaxis se suele especificar formalmente mediante una GLC El parser recibe tokens y los agrupa de acuerdo a especificadas por la GLC El parser detecta errores sintácticos Y si es bueno, puede además realizar algunas correcciones Los resultados de este análisis es un árbol sintáctico 14

El analizador sintáctico Ejemplo: supongamos sintaxis asignación como: y debemos analizar 15

El analizador sintáctico El árbol sintáctico correspondiente es 16

El analizador semántico Realiza dos funciones: Análisis de la semántica estática ¿Es cada construcción legal y “con sentido”? variables en una expresión definidas del tipo adecuado alcance de los objetos Generación del código intermedio Generalmente se lleva a cabo mediante gramáticas de atributos la GLC se completa con atributos necesarios tipo valor acciones a ejecutar cuando se detecta una construcción legal 17

Generación de Código Intermedio La generación de código intermedio transforma un árbol de análisis sintáctico (semántico) en una representación en un lenguaje intermedio, que suele ser código suficientemente sencillo para generar código máquina. While (A>B) AND (A<=2*B-5) Do A := A + B L1: IF A>B GOTO L2 GOTO L3 L2: T1:= 2*B T2:= T1-5 IF A<=T2 GOTO L4 L4: A:= A+B GOTO L1 L3: .... 18

OPTIMIZACION DE CODIGO El código intermedio generado es analizado y transformado en uno equivalente optimizado Es una tarea muy costosa De hecho, generalmente se puede invocar al compilador activando/desactivando esta opción Otras veces, optimiza el código objeto usual la optimización “peephole”: tomar una porción pequeña de código y hacer una optimización local “desenrrollado” de bucles eliminación de recursividad final 19

GENERACION DE CODIGO Toma código intermedio y genera código objeto para la máquina considerada Es la parte más próxima a la arquitectura de la máquina Habitualmente, se escriben “a mano” desarrollo “a medida” para cada máquina específica Dada la complejidad, si no se va a realizar optimización, se asocia la generación de código a las rutinas semánticas compiladores de “una pasada” 20

La tabla de símbolos Mecanismo para almacenar/acceder la información de los identificadores La información asociada a un identificador se denominan “atributos” Cada vez que se usa un identificador, la tabla de símbolos proporciona la información necesaria Se usa tanto en la parte de análisis como en la de síntesis 21

Manejo de errores Es una de las misiones mas importantes de un compilador, aunque al mismo tiempo, es lo que mas dificulta su realización debido principalmente a dos motivos: A veces unos errores ocultan otros A veces un error provoca una avalancha de muchos errores que se solucionan con el primero Criterios en el manejo de errores Pararse al detectar el primer error Detectar todos los errores de una pasada 22