Está en la página 1de 7

Compiladores

Definición
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. Usualmente el segundo lenguaje
es lenguaje de máquina, pero también puede ser un código intermedio, o simplemente
texto. Este proceso de traducción se conoce como compilación.

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). De esta manera un programador puede diseñar un programa en un lenguaje
mucho más cercano a cómo piensa un ser humano, para luego compilarlo a un programa
más manejable por una computadora. [1]

Partes del Compilador


Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye
las fases correspondientes al Análisis Léxico (que consiste en la descomposición del
programa fuente en componentes léxicos), Análisis Sintáctico (agrupación de los
componentes léxicos en frases gramaticales) y Análisis Semántico (comprobación de la
validez semántica de las sentencias aceptadas en la fase de Análisis Sintáctico).

Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y


suele estar formado por una o varias combinaciones de fases de Generación de Código
(normalmente se trata de código intermedio o de código objeto) y de Optimización de
Código (en las que se busca obtener un código lo más eficiente posible).

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, y está
compuesta por las fases comprendidas entre el Análisis Léxico y la Generación de
Código Intermedio.

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

Ilustración 1. Esquema General de un Compilador

Ventajas de los Compiladores

 Produce un código optimizado.


 La ejecución del programa objeto es mucho mas rápida que si se interpreta el
programa fuente.
 El compilador tiene una visión global del programa, por lo que la información
de mensajes de error es más detallada.
 Se debe ejecutar muchas veces el código fuente para ver los cambios en el
resultado.
 Mayor consumo de memoria.
Intérpretes
Definición

Un intérprete es un programa o software capaz de analizar y ejecutar


programas escritos en lenguajes de alto nivel. Los intérpretes funcionan de manera
distinta a los compiladores, ya que van traduciendo y ejecutando el código hecho por
el programador o desarrollador línea a línea, cargando el código fuente y traduciendo
las instrucciones a un lenguaje intermedio, para que el programa pueda ser ejecutado
por el ordenador o la computadora en donde se está ejecutando el intérprete.

En pocas palabras, podemos decir que un intérprete genera un código binario que
es interpretado por el ordenador cada vez que se ejecuta el programa escrito
en lenguaje de alto nivel. Esta es su principal diferencia frente al compilador que genera
un archivo que puede ser ejecutado por el ordenador de forma automática. [2]

Tipos de intérpretes
A continuación se va a realizar una clasificación de los diferentes métodos de
interpretación según la estructura interna del intérprete. Es conveniente observar que
algunos métodos podrían considerarse híbridos, ya que mezclan los procesos de
compilación e interpretación.

Intérpretes puros
Los intérpretes puros son los que analizan y ejecutan sentencia a sentencia todo el
programa fuente. Siguen el modelo de interpretación iterativa y, por tanto, se utilizan
principalmente para lenguajes sencillos. Los intérpretes puros se han venido utilizando
desde la primera generación de ordenadores al permitir la ejecución de largos programas
en ordenadores de memoria reducida, ya que sólo debían contener en memoria el
intérprete y la sentencia a analizar y ejecutar en cada momento. El principal problema
de este tipo de intérpretes es que si a mitad del programa fuente se producen errores, se
debe de volver a comenzar el proceso.

Intérpretes avanzados
Los intérpretes avanzados o normales incorporan un paso previo de análisis de todo el
programa fuente. Generando posteriormente un lenguaje intermedio que es ejecutado
por ellos mismos. De esta forma en caso de errores sintácticos no pasan de la fase de
análisis. Se utilizan para lenguajes más avanzados que los intérpretes puros, ya que
permiten realizar un análisis más detallado del programa fuente (comprobación de tipos,
optimización de instrucciones, etc.)

Intérpretes incrementales
Existen ciertos lenguajes que, por sus características, no se pueden compilar
directamente. La razón es que pueden manejar objetos o funciones que no son
conocidos en tiempo de compilación, ya que se crean dinámicamente en tiempo en
ejecución. Entre estos lenguajes, pueden considerarse Smalltalk, Lisp o Prolog. Con el
propósito de obtener una mayor eficiencia que en la interpretación simple, se diseñan
compiladores incrementales. La idea es compilar aquellas partes estáticas del programa
en lenguaje fuente, marcando como dinámicas las que no puedan compilarse.
Posteriormente, en tiempo de ejecución, el sistema podrá compilar algunas partes
dinámicas o recompilar partes dinámicas que hayan sido modificadas. Estos sistemas no
producen un código objeto independiente, sino que acompañan el sistema que permite
compilar módulos en tiempo de ejecución (run time system) al código objeto generado.

Ilustración 2. Esquema General del intérprete

Ventajas de los Intérpretes

 Su principal ventaja es que permiten una fácil depuración. Permiten una mayor
interactividad con el código en tiempo de desarrollo.
 En algunos lenguajes (Smalltalk, Prolog, LISP) está permitido y es frecuente
añadir código según se ejecuta otro código, y esta característica solamente es
posible implementarla en un intérprete.
 Puede ser interrumpido con facilidad.
 Puede ser rápidamente modificado y ejecutado nuevamente.
 Un Intérprete necesita menos memoria que un compilador.
 Facilita la búsqueda de errores.
 En algunos lenguajes está permitido añadir código según se ejecuta otro código.
 Menor consumo de memoria.
 Lentitud de ejecución, ya que al ejecutar a la vez que se traduce no puede
aplicarse un alto grado de optimización.
 Cada instrucción debe ser traducida a código máquina tantas veces como sea
ejecutada
 Durante la ejecución, el intérprete debe residir en memoria ya que no genera
código objeto.
Desventajas de los intérpretes
 Es necesario tener el intérprete instalado en el equipo para que se ejecute el
programa hecho en lenguaje de alto nivel.
 Cuando los programas son pequeños, la velocidad de ejecución es bastante
lenta con respecto a los programas compilados.
 Lentitud de ejecución, ya que al ejecutar a la vez que se traduce no puede
aplicarse un alto grado de optimización. Cada instrucción debe ser traducida
a código máquina tantas veces como sea ejecutada
 Durante la ejecución, el intérprete debe residir en memoria ya que no genera
código objeto.
 Tamaño del programa objeto, que exige añadir el intérprete al programa
propiamente dicho.

Diferencias entre Compiladores e Intérpretes

La diferencia entre compiladores y intérpretes parece bastante clara:


Un intérprete es un programa que ejecuta directamente las instrucciones escritas en un
lenguaje de programación dado
Un compilador es un programa que transforma el código fuente de un programa a su
equivalente en otro lenguaje de programación de más bajo nivel (una excepción sería el
caso de los transpiladores, recordad la diferencia entre compilador y transpilador).
 El intérprete detecta si el programa tiene errores y permite su depuración durante
el proceso de ejecución, mientras que el compilador espera hasta terminar la
compilación de todo el programa para generar un informe de errores.
 Un programa compilado es más seguro que uno interpretado, porque no contiene
el código fuente, que puede ser modificado incorrectamente por el usuario.
 Ambos, intérpretes y compiladores están disponibles en la mayoría de los
lenguajes de alto nivel.

Pero si miramos estas definiciones más de cerca veremos que la diferencia empieza a
ser difusa. Por ejemplo, un intérprete podría primero traducir el código a interpretar a
alguna representación intermedia para así acelerar su ejecución. Esto es por ejemplo lo
que pasa con los lenguajes que se basan en máquinas virtuales, como el caso de Java y
su Java Virtual Machine.
Diferencias entre Compiladores e interpretes

DIFERENCIAS

INTÉRPRETE COMPILADOR
No genera ejecutable, un archivo Archivo compilado que puede distribuirse
interpretado no funciona sin el conociendo la plataforma.
intérprete.
Muy lenta la traducción porque Un archivo compilado es de 10 o 20 veces
se realiza por cada línea del más rápido que el interpretado.
programa.

Lee línea a línea Lee totalmente el programa escrito.


Traduce mientras lee, Corre solo el proceso para transformarlo
convirtiendo el programa en complejo en el lenguaje máquina.
acciones.

Cualquier programa puede El archivo creado solamente funciona en


interpretarlo en cualquier esa plataforma.
plataforma.

El código fuente es necesario en Una vez compilado, el código fuente puede


cada ejecución, así que no puede permanecer en secreto.
permanecer en secreto.
Se detectan errores sintácticos El ejecutable va dirigido a una plataforma
durante la ejecución, porque la especifica es prácticamente imposible
traducción se hace línea a línea. portarlo a otra.

Ilustración 3 Diferencias de intérpretes y compiladores


Bibliografía

[1] P. d. l. U. d. O. Oviedo, Intérpretes Y Diseño de Lenguajes De Programación, SERVITEC ISBN:


84-688-4210-9 , Noviembre 2003.

[2] j. Aguilar, Fundamentos de Programacion, Mexico, 1996.

Sitios WEB

https://es.slideshare.net/solartime/interprete-vs-compilador

http://equipo5241v.blogspot.com/2010/05/comparacion-interpretes-y-compiladores.html

También podría gustarte