Compilador

26
Ingeniería en sistemas computacionales. Andrea Custodio Jiménez.

Transcript of Compilador

Page 1: Compilador

Ingeniería en sistemas

computacionales.

Andrea Custodio Jiménez.

Page 2: Compilador

Un compilador es un programa informático

que traduce un programa escrito en un

lenguaje de programación a otro lenguaje

de programación, generando un programa

equivalente que la máquina será capaz de

interpretar.

Page 3: Compilador

Un compilador es un programa que permite

traducir el código fuente de un programa en

lenguaje de alto nivel, a otro lenguaje de nivel

inferior (típicamente lenguaje de máquina).

Page 4: Compilador

De esta manera un programador puede diseñar

un programa en un lenguaje mucho más

cercano a como piensa un ser humano, para

luego compilarlo a un programa más manejable

por una computadora.

Page 5: Compilador

Como parte importante de este proceso de

traducción, el compilador informa a su

usuario de la presencia de errores en el

programa fuente.

Page 6: Compilador

Historia

En 1946 se desarrolló la primera computadora

digital. En un principio, estas máquinas

ejecutaban instrucciones consistentes en

códigos numéricos que señalaban a los circuitos

de la máquina los estados correspondientes a

cada operación, lo que se denominó lenguaje

máquina.

Page 7: Compilador

Pronto los primeros usuarios de estos

ordenadores descubrieron la ventaja de escribir

sus programas mediante claves más fáciles de

recordar que esos códigos; al final, todas esas

claves juntas se traducían manualmente a

lenguaje máquina. Estas claves constituyen los

llamados lenguajes ensambladores.

Page 8: Compilador

El primer compilador fue escrito por Grace

Hopper, en 1952 para el lenguaje de

programación A-0.

Page 9: Compilador

En 1950 John Backus dirigió una

investigación en IBM sobre un lenguaje

algebraico.

Page 10: Compilador

En 1954 se empezó a desarrollar un lenguaje que

permitía escribir fórmulas matemáticas de

manera traducible por un ordenador; le llamaron

FORTRAN (FORmulae TRANslator). Fue el primer

lenguaje de alto nivel y se introdujo en 1957 para

el uso de la computadora IBM modelo 704.

Page 11: Compilador

El primer compilador de FORTRAN tardó 18

años-persona en realizarse y era muy sencillo.

Este desarrollo de FORTRAN estaba muy

influenciado por la máquina objeto en la que iba

a ser implementado.

Page 12: Compilador

El primer compilador auto-contenido, es decir,

capaz de compilar su propio código fuente fue

el creado para Lisp por Hart y Levin en el MIT en

1962. Desde 1970 se ha convertido en una

práctica común escribir el compilador en el

mismo lenguaje que este compila, aunque

Pascal y C han sido alternativas muy usadas.

Page 13: Compilador

El proceso de traducción se compone

internamente de varias etapas o fases, que

realizan distintas operaciones lógicas. Es útil

pensar en estas fases como en piezas

separadas dentro del traductor, y pueden en

realidad escribirse como operaciones

codificadas separadamente aunque en la

práctica a menudo se integren juntas.

Page 14: Compilador

Fase de léxico

El análisis léxico constituye la primera fase, aquí

se lee el programa fuente de izquierda a derecha

y se agrupa en componentes léxicos (tokens),

que son secuencias de caracteres que tienen un

significado.

Page 15: Compilador

Además, todos los espacios en blanco, líneas en

blanco, comentarios y demás información

innecesaria se elimina del programa fuente.

También se comprueba que los símbolos del

lenguaje (palabras clave, operadores, etc.) se

han escrito correctamente.

Page 16: Compilador

En esta fase los caracteres o componentes

léxicos se agrupan jerárquicamente en frases

gramaticales que el compilador utiliza para

sintetizar la salida. Se comprueba si lo obtenido

de la fase anterior es sintácticamente correcto.

Por lo general, las frases gramaticales del

programa fuente se representan mediante un

árbol de análisis sintáctico.

Page 17: Compilador

1. Cualquier identificador es una expresión.

2. Cualquier número es una expresión.

3. Si expresión1 y expresión2 son expresiones,

entonces también lo son:

expresión1 + expresión2

expresión1 * expresión2

( expresión1 )

Page 18: Compilador

Las reglas 1 y 2 son reglas básicas (no

recursivas), en tanto que la regla 3 define

expresiones en función de operadores

aplicados a otras expresiones.

Page 19: Compilador

La fase de análisis semántico revisa el programa

fuente para tratar de encontrar errores

semánticos y reúne la información sobre los

tipos para la fase posterior de generación de

código.

Page 20: Compilador

En ella se utiliza la estructura jerárquica

determinada por la fase de análisis sintáctico

para identificar los operadores y operandos de

expresiones y proposiciones.

Page 21: Compilador

Fase de Generación de código intermedio

Después de los análisis sintáctico y semántico,

algunos compiladores generan una

representación intermedia explícita del programa

fuente. Se puede considerar esta representación

intermedia como un programa para una máquina

abstracta.

Page 22: Compilador

La representación intermedia puede tener

diversas formas. Existe una forma intermedia

llamada «código de tres direcciones» que es

como el lenguaje ensamblador de una máquina

en la que cada posición de memoria puede

actuar como un registro

Page 23: Compilador

Fase de Optimización de código

La fase de optimización de código consiste en

mejorar el código intermedio, de modo que

resulte un código máquina más rápido de

ejecutar. Esta fase de la etapa de síntesis es

posible sobre todo si el traductor es un

compilador

Page 24: Compilador

Hay mucha variación en la cantidad de

optimización de código que ejecutan los

distintos compiladores. En los que hacen

mucha optimización, llamados «compiladores

optimizadores»,

Page 25: Compilador

Hay optimizaciones sencillas que mejoran

sensiblemente el tiempo de ejecución del

programa objeto sin retardar demasiado la

compilación

Page 26: Compilador