Compiladores e interpretes

Compiladores Definición Un compilador es un programa informático que traduce un programa escrito en un lenguaje de progr

Views 109 Downloads 0 File size 672KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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 interpretado no funciona sin el intérprete.

Archivo compilado que puede distribuirse conociendo la plataforma.

Muy lenta la traducción porque se realiza por cada línea del programa.

Un archivo compilado es de 10 o 20 veces más rápido que el interpretado.

Lee línea a línea

Lee totalmente el programa escrito.

Traduce mientras lee, convirtiendo el programa en acciones.

Corre solo el proceso para transformarlo complejo en el lenguaje máquina.

Cualquier programa puede interpretarlo en cualquier plataforma.

El archivo creado solamente funciona en esa plataforma.

El código fuente es necesario en cada ejecución, así que no puede permanecer en secreto.

Una vez compilado, el código fuente puede permanecer en secreto.

Se detectan errores sintácticos durante la ejecución, porque la traducción se hace línea a línea.

El ejecutable va dirigido a una plataforma especifica es prácticamente imposible 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