traductores de lenguajes de programación

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.

Existen distintos tipos de traductores, entre ellos destacan:

Compiladores

Es el tipo de traductor más conocido. Se trata de un programa que traduce código fuente escrito en un lenguaje de alto nivel (Pascal) en código máquina (no siempre). Son más rápidos que los intérpretes pero presentan mayor dificultad a la hora de detectar errores.

Un compilador es un programa que lee el código escrito en un lenguaje (lenguaje origen), y lo traduce o traduce en un programa equivalente escrito en otro lenguaje (lenguaje objetivo). Como una parte
fundamental de este proceso de traducción, el compilador le hace notar al usuario la presencia de errores en el código fuente del programa.



El compilador deriva su nombre de la manera en que trabaja, buscando en todo el código fuente, recolectando y reorganizando las instrucciones. Un compilador difiere de un intérprete en que el intérprete toma cada línea de código y la analiza y ejecuta mientras que el compilador mira el código por completo.

Los compiladores requieren de un tiempo antes de poder generar un ejecutable, sin embargo los programas creados con compiladores se ejecutan mucho más rápido que un mismo programa ejecutado con un intérprete.

Cada lenguaje de programación de alto nivel (excepto los estrictamente imperativos) viene con un compilador.

Dado que los compiladores traducen código fuente a código objeto, el cual es único para cada tipo de maquina, existen múltiples compiladores para un mismo lenguaje. Por ejemplo lenguaje C tiene un compilador para PC, otro para Apple Macintosh, además existen muchas casa que desarrollan compiladores para una misma plataforma y un mismo lenguaje, por ejemplo Microsoft y Borland tienen sus compiladores propios para lenguaje C.


Etapas del proceso de compilación:

  1. Edición. Esta fase consiste en escribir el programa empleando algún lenguaje y un editor. Como resultado nos dará el código fuente de nuestro programa.
  2. Compilación. En esta fase se traduce el código fuente obtenido en la fase anterior a código máquina. Si no se produce ningún error se obtiene el código objeto.
    En caso de errores el compilador los mostraría para ayudarnos a corregirlos y se procedería a su compilación de nuevo, una vez corregidos.
  3. Linkado. Esta fase consiste en unir el archivo generado en la fase dos con determinadas rutinas internas del lenguaje, obteniendo el programa ejecutable.

Existen dos tipos de linkados:

    • Linkado estático: Los binarios de las librerías se añaden a nuestros binarios compilados generando el archivo ejecutable.
    • Linkado dinámico: no se añaden las librerías a nuestro binario sino que hará que se carguen en memoria las librerías que en ese momento se necesiten.

Una vez traducido, compilado y linkado el archivo esta listo para su ejecución donde también podrán surgir problemas y fallos, para los cuales tendríamos que volver a realizar todo el proceso anteriormente citado, de modo que puedan ser corregidos.

Por este motivo es importante realizar numerosas pruebas en tiempo de ejecución antes de presentar el programa al cliente.

Partes de un compilador

Normalmente los compiladores están divididos en dos partes:

  • Front End: es la parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar.
  • Back End: es la parte que genera el código máquina, específico de una plataforma, a partir de los resultados de la fase de análisis, realizada por el Front End.

Esta división permite que el mismo Back End se utilice para generar el código máquina de varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código fuente de un lenguaje de programación concreto sirva para la generación de código máquina en varias plataformas distintas.

El código que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker).

Tipos de compiladores

Esta taxonomía de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categorías:

  • 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 intérprete y compilan partes del código según se necesitan.

A continuacion, un breve tutorial de como compilar y ejecutar un programa usando Java mediante el IDE Netbeans: