You are on page 1of 11

INTRPRETE (INFORMTICA) Saltar a: navegacin, bsqueda

En ciencias de la computacin, intrprete o interpretador es un programa informtico capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los intrpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripcin en un lenguaje de programacin al cdigo de mquina del sistema, los intrpretes slo realizan la traduccin a medida que sea necesaria, tpicamente, instruccin por instruccin, y normalmente no guardan el resultado de dicha traduccin.

Usando un intrprete, un solo archivo fuente puede producir resultados iguales incluso en sistemas sumamente diferentes (ej. una PC y un PlayStation 3). Usando un compilador, un solo archivo fuente puede producir resultados iguales solo si es compilado a distintos ejecutables especficos a cada sistema.

Los programas interpretados suelen ser ms lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son ms flexibles como entornos de programacin y depuracin (lo que se traduce, por ejemplo, en una mayor facilidad para reemplazar partes enteras del programa o aadir mdulos completamente nuevos), y permiten ofrecer al programa interpretado un entorno no dependiente de la mquina donde se ejecuta el intrprete, sino del propio intrprete (lo que se conoce comnmente como mquina virtual).

Para mejorar el desempeo, algunas implementaciones de programacin de lenguajes de programacin pueden interpretar o compilar el cdigo fuente original en una ms compacta forma intermedia y despus traducir eso al cdigo de mquina (ej. Perl, Python, MATLAB, y Ruby). Algunos aceptan los archivos fuente guardados en esta representacin intermedia (ej. Python, UCSD Pascal y Java).

Comparando su actuacin con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intrprete corresponde al intrprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito.

En la actualidad, uno de los entornos ms comunes de uso de los intrpretes informticos es Internet, debido a la posibilidad que estos tienen de ejecutarse independientemente de la plataforma.

Compilador Diagrama a bloques de la operacin de un buen compilador.

Un compilador es un programa informtico que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de mquina, pero tambin puede ser un cdigo intermedio (bytecode), o simplemente texto. Este proceso de traduccin se conoce como compilacin.1

Un compilador es un programa que permite traducir el cdigo fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (tpicamente lenguaje de mquina). De esta manera un programador puede disear un programa en un lenguaje mucho ms cercano a como piensa un ser humano, para luego compilarlo a un programa ms manejable por una computadora.

Como parte importante de este proceso de traduccin, el compilador informa a su usuario de la presencia de errores en el programa fuente. Los compiladores son programas o herramientas encargadas de compilar. Un compilador toma un texto (cdigo fuente) escrito en un lenguaje de alto nivel y lo traduce a un lenguaje comprensible por las computadoras (cdigo objeto).

Bsicamente, existen dos grandes formas de ejecutar programas: programas compilados (previamente pasados por un compilador) y programas interpretados (necesitan pasar por un intrprete para ejecutarse en tiempo real).

Caractersticas de un compilador

Generalmente un compilador se divide en dos partes:

* Front End: parte que analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y rellena los valores de la tabla de smbolos. Parte que suele ser independiente de la plataforma o sistema operativo para el que funcionar.

* Back End: parte en donde se genera el cdigo mquina exclusivo para una plataforma a partir de lo analizado en el front end.

Por lo general el resultado del back end no puede ser ejecutado directamente, se necesita pasar por un proceso de enlazado (linker).

Existen varios tipos de compiladores: Compiladores cruzados, Compiladores optimizadores, Compiladores de una sola pasada, Compiladores de varias pasadas, Compiladores JIT (Just In Time).

Intrpretes vs compiladores

Cualquier lenguaje puede ser ejecutado tanto va intrprete o va compilador, pero algunos lenguajes suelen asociarse ms a una va que a la otra, y por esto son llamados "lenguajes interpretados" o "lenguajes compilados" respectivamente.

Tambin puede darse que un programa contenga partes que son implementadas va intrprete y otras va compilador.

Tambin existen intrpretes que incluyen cierta "compilacin" en el medio. Son aquellos que compilan a un cdigo intermedio llamado bytecode, que es ms eficiente de ejecutar que hacerlo directamente desde el cdigo fuente.

En general, la principal desventaja de los intrpretes, es que cuando un programa es interpretado, suele ejecutarse ms lento que si el mismo programa estuviese compilado. Esto se debe a que el intrprete debe analizar cada sentencia en el programa en cada ejecucin (un anlisis en tiempo real). Tambin el acceso a variables es ms lento en un intrprete, porque mapear los identificadores para almacenar las localizaciones debe hacerse repetidas veces en tiempo real.

Compilador

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.

Traductores

Los procesadores de lenguajes son aquellos programas destinados a trabajar sobre una entrada, por la forma como ha sido elaborada, pertenece a un lenguaje particular. Los procesadores de lenguajes se clasifican como traductores o interpretes. El traductor es un

programa que recibe una entrada escrita en un lenguaje (el lenguaje fuente) a una salida perteneciente a otro lenguaje (el lenguaje objeto).

Un intrprete, no lleva a cabo tal transformacin, en su lugar obtiene los resultados conforme se van analizando las entradas. Los traductores son clasificados en compiladores, ensambladores y preprocesadotes.

Ensamblador

Es el programa encargado de llevar a cabo un proceso denominado de ensamble o ensamblado, este proceso consiste en que a partir de un lenguaje mquina, este sea utilizado en lenguaje ensamblador:

La integracin de los diversos mdulos que conforman al programa

La resolucin de las direcciones de memoria designadas en el rea de datos para el almacenamiento de variables, constantes y estructuras complejas.

La identificacin de las direcciones de memoria en la seccin del cdigo correspondientes a los puntos de entrada en saltos condicionales o incondicionales junto con los puntos de arranque de las subrutinas

la resolucin de los diversos llamados a los servicios o rutinas del sistema operativo cdigo dinmico y bibliotecas de tiempo de ejecucin

Las especificaciones de la cantidad de memoria destinadas para las reas de datos, el cdigo, la pila, la cantidad o monto otorgados para su ejecucin

La incorporacin de datos y cdigo necesarios para la carga de un programa para su ejecucin.

Histricamente con la escasez de memoria de las primeras computadoras, se puso de moda el uso de interpretes frente a los compiladores, pues el programa fuente sin traducir y el interprete juntos daban una ocupacin de memoria menor que la resultante de los compiladores. Por ello los primeros ordenadores iban siempre acompaados de un interprete Basic (XT, Commodore, Spectrum).

La mejor informacin sobre los errores se daba por parte del compilador as como una mayor velocidad de ejecucin del cdigo resultante hizo que poco a poco se impusieran los compiladores. Hoy en da y con el problema de memoria resuelto, se puede hablar de un gran predominio de los compiladores frente a los interpretes, aunque interpretes como los incluidos en los navegadores de Java son la gran excepcin.

La diferencia entre un compilador y un traductor es: En el compilador se recibe un programa escrito en un lenguaje de alto nivel, medio o bajo y lo transforma a su equivalente en un lenguaje ensamblador e inclusive a lenguaje mquina pero sin ejecutar el programa. Un compilador en un traductor la forma de cmo llevar la traduccin es el objetivo central en el diseo de compilador.

Ventajas de compilador frente a un intrprete

Se compila una vez, se ejecuta n-veces

En bucles, la compilacin genera cdigo equivalente al bucle pero un interpretndolo se traduce tantas veces una lnea como veces se repite el bucle

El compilador tiene una visin global del programa, por lo que la informacin de mensajes de errores es ms detallada.

Ventajas de un intrprete frente a compilador

Un interprete necesita menos memoria que un compilador

Permite una mayor interactividad con el cdigo en tiempo de desarrollo.

Un compilador, no es programa que funciona de manera aislada sino que necesita otro programa para conseguir su objetivo, obtener un programa ejecutable a partir de un programa fuente en un lenguaje de alto nivel.

Clasificacin de compiladores

El programa compilador traduce las instrucciones en un lenguaje de alto nivel a instrucciones que la computadora pueda interpretar y ejecutar. Para cada lenguaje de programacin se requiere un compilador separado, el compilador traduce todo el programa antes de ejecutarlo.

En otras palabras un compilador traduce programas insertados en la memoria por el sistema operativo para convertirlos en pulsaciones electrnicas ejecutables (lenguaje mquina). Los compiladores pueden ser de:

Una sola pasada: Examina el cdigo fuente una vez, generando el cdigo o programa objeto.

Pasadas mltiples: Requiere pasos intermedios para producir un cdigo en otro lenguaje y una pasada final para producir y optimizar el cdigo producido durante los pasos anteriores.

Optimizacin: Lee un cdigo fuente, lo analiza y descubre errores potenciales sin ejecutar el programa.

Compiladores incrementales: Generan un cdigo objeto, instruccin por instruccin, cuando el usuario teclea cada orden individual. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente.

Ensamblador: Es un lenguaje fuente y posee una estructura sencilla.

Compilador cruzado: Se genera cdigo en un lenguaje objeto para una mquina diferente de la que se esta utilizando para compilar. U compilador cruzado nos permite programar, por ejemplo en Windows para un ambiente como Linux.

Compiladores con montador: Ese tipo de compilador compila distintos mdulos de forma independiente y despus es capaz de enlazarlos.

Autocompilador: Compilador que esta escrito en el mismo lenguaje que se va a compilar, evidentemente no se puede ejecutar la primera vez. Sirve para hacer ampliaciones de lenguaje, mejorar el cdigo generado, etc.

Metacompilador: Es sinnimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones de lenguaje, para el que desea obtener un compilador y genera como salida un compilador de ese lenguaje.

Descompilador: Es un programa que acepta como entrada cdigo mquina y lo traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilacin.

Funciones de un compilador

Agrandes rasgos un compilador que lee un programa escrito en un lenguaje, el lenguaje fuente y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto. Como parte importante de este proceso de traduccin, el compilador informa al usuario de la presencia de errores en el programa fuente. A primera vista, la diversidad de compiladores puede parecer abrumadora. Hay miles de lenguajes fuente, desde los lenguajes tradicionales como FORTRAN o PASCAL hasta los lenguajes especializados que han surgido en todas las reas de aplicacin en la informtica.

Un lenguaje objeto puede ser otro lenguaje de programacin o el lenguaje mquina de cualquier computadora entre un microprocesador y un supercomputador.

Se pueden construir compiladores para una gran diversidad de lenguajes fuente y mquina utilizando las mismas tcnicas bsicas. Los primeros compiladores de los aos 50's, estaban relacionados con la traduccin de formulas aritmticas a cdigo de mquina.

En las 50's se considero a los compiladores como programas notablemente difciles de escribir. El primer compilador FORTRAN necesito para su implantacin 18 aos (Backus Fortran).

Partes en las que trabaja un compilador

Conceptualmente FORTRAN diseo un compilador que trabajaba en fases. Es decir, las fases de un compilador transforman el programa fuente de una representacin a otra, en la prctica se agrupan fases y las representaciones intermedias entre las fases no necesitan ser construidas explcitamente.

Anlisis lxico

Es la primera fase de un compilador. Su principal funcin consiste en leer los caracteres de entrada y elaborar como salida una secuencia de componentes lxicos que utiliza el analizador sintctico para hacer el anlisis.

Aspectos del anlisis lxico

Hay varias razones para dividir en fases el anlisis de la compilacin. El anlisis lxico y anlisis sintctico:

Un diseo sencillo es la consideracin ms importante, separar a estos dos tipos de anlisis a menudo permite simplificar una u otra de dichas fases.

Se mejora la eficiencia del compilador adems de permitir construir un procesador especializado y potencialmente ms eficiente para esa funcin. Con algunas tcnicas de manejo de buffers para la lectura de caracteres de entrada y procesamiento de componentes lxicos se pueden mejorar significativamente el rendimiento de un compilador.

Errores lxicos

Son pocos los errores simplemente en el nivel lxico ya que tiene una visin muy restringida de un programa fuente. El analizador lxico debe devolver el componente lxico de un identificador y dejar a otra fase se ocupe de los errores.

Suponga que una situacin en la cual el analizador lxico no puede continuar por que ninguno de los patrones concuerda con un prefijo de la entrada. Tal vez la estrategia de recuperacin ms sencilla sea recuperacin EN MODO PANICO (este mtodo de recuperacin es donde se borra caracteres sucesivos de la entrada hasta que el analizador lxico pueda encontrar un componente lxico bien formado).

Administrador de entradas

Utilizar 2 buffer de entrada resulta til cuando es necesario un pre-anlisis en la entrada para identificar los componentes lxicos despus se introducen algunas tcnicas bsicas para encontrar la velocidad del analizador lxico, como es el uso de centinelas que sirven para marcar el final de buffer, hay tres mtodos generales de implantar un lxico:

Utilizar un generador de analizadores lxicos, como el compilador LEX para producir el analizador lxico a partir de una especificacin basada en expresiones regulares, en este caso el generador proporciona rutinas para leer la entrada y manejarla con buffers.

Escribir el analizador lxico en un lenguaje convencional de programacin de sistemas utilizando las posibilidades de entrada y salida de este lenguaje para leer la entrada.

Escribir el analizador lxico en lenguaje ensamblador y manejar explcitamente la lectura de la entrada.

Parejas de buffers

Se utiliza un buffer dividido en dos mitades de n-caracteres cada una como se indica en la figura:

Texto lenguaje fuente

Traductor

Texto lenguaje objeto

Programa objeto

Compilador

Programa fuente

Mensajes de error

Programa fuente

Analizador lxico

Analizador sintctico

Anlisis semntico

Generacin de cdigo intermedio

Optimizacin de cdigo

Generador de cdigo

Programa objeto

Manejo de errores

Manejo de tabla de smbolos

Analizador lxico

Analizador sintctico

Tabla de smbolos

Componente lxico

Obtn el siguiente componente lxico

Programa fuente

Buffer = espacio en memoria

El lenguaje ensamblador, o assembler (assembly language en ingls), es un lenguaje de programacin de bajo nivel para los computadores, microprocesadores, microcontroladores y otros circuitos integrados programables. Implementa una representacin simblica de los cdigos de mquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representacin ms directa del cdigo mquina especfico para cada arquitectura legible por un programador. Esta representacin es usualmente definida por

el fabricante de hardware, y est basada en los mnemnicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria y otras caractersticas del lenguaje. Un lenguaje ensamblador es por lo tanto especfico de cierta arquitectura de computador fsica (o virtual). Esto est en contraste con la mayora de los lenguajes de programacin de alto nivel, que idealmente son porttiles.

Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al cdigo de mquina del computador objetivo. El ensamblador realiza una traduccin ms o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemnicas a las instrucciones y datos de mquina. Esto est en contraste con los lenguajes de alto nivel, en los cuales una sola declaracin generalmente da lugar a muchas instrucciones de mquina.

Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuracin. Particularmente, la mayora de los ensambladores modernos incluyen una facilidad de macro (descrita ms abajo), y son llamados macro ensambladores.

Fue usado principalmente en los inicios del desarrollo de software, cuando an no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes acadmicos y de investigacin, especialmente cuando se requiere la manipulacin directa de hardware, altos rendimientos, o un uso de recursos controlado y reducido.

Muchos dispositivos programables (como los microcontroladores) an cuentan con el ensamblador como la nica manera de ser manipulados.

You might also like