miércoles, 1 de junio de 2011

LOS COMPILADORES


Un compilador es un programa que traduce un programa hecho en un lenguaje de alto nivel en un programa funcionalmente equivalente con un lenguaje de bajo nivel. Por lo tanto, un compilador es básicamente un traductor cuyo idioma de origen (es decir, el idioma a traducir) es el lenguaje de alto nivel, y la lengua es un lenguaje de bajo nivel, es decir, un compilador se utiliza para aplicar un lenguaje de alto nivel en un equipo.
Un traductor es cualquier programa que toma como entrada un texto escrito en un lenguaje, llamado fuente y da como salida otro texto en un lenguaje, denominado objeto.

ESTRUCTURA DE UN COMPILADOR
La estructura de un compilador, esta dividida en cuatro grandes módulos, cada uno independiente del otro, se podría decir que un compilador esta formado por cuatros módulos mas a su vez.

PROCESO DE COMPILACION

Es el proceso por el cual se traducen las instrucciones escritas en un determinado lenguaje de programación a lenguaje máquina. Además de un traductor, se pueden necesitar otros programas para crear un programa objeto ejecutable. Un programa fuente se puede dividir en módulos almacenados en archivos distintos. La tarea de reunir el programa fuente a menudo se confía a un programa distinto, llamado preprocesador. El preprocesador también puede expandir abreviaturas, llamadas a macros, a proposiciones del lenguaje fuente.
Normalmente la creación de un programa ejecutable (un típico.exe para Microsoft Windows o DOS) conlleva dos pasos. El primer paso se llama compilación (propiamente dicho) y traduce el código fuente escrito en un lenguaje de programación almacenado en un archivo a código en bajo nivel (normalmente en código objeto, no directamente a lenguaje máquina). El segundo paso se llama enlazado en el cual se enlaza el código de bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y se añade el código de las funciones que hay en las bibliotecas del compilador para que el ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo así finalmente el código objeto a código máquina, y generando un módulo ejecutable.
Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de compilación en archivos objetos (un típico.obj para Microsoft Windows, DOS o para Unix); para enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase de compilación se almacena sólo temporalmente. Un programa podría tener partes escritas en varios lenguajes (por ejemplo C, C++ y Asm), que se podrían compilar de forma independiente y luego enlazar juntas para formar un único módulo ejecutable.

TIPOS DE COMPILADORES

  • Compiladores cruzados: generan código para un sistema distinto del que están funcionando.

  • Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.

  • Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente.

  • Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.

  • Compiladores JIT (Just In Time): forman parte de un interprete y compilan partes del código según se necesitan.