Compiladores e intérpretes.

INTRODUCCION En este documento hablaremos sobre los compiladores de programación a si como los intérpretes ya que son muy importantes y fundamentales para la programación ya que sin la ayuda de ellos el programar sería muy difícil y gracias a estos la programación se ha facilitado enormemente. El compilador nos ayuda a traducir lenguajes de alto nivel a un lenguaje mejor conocido como lenguaje maquina por lo tanto nos ayuda a traducir la mayor parte de la programación porqu e de lo contrario tendríamos que programar a lenguaje maquina. Este también nos ayuda a depurar o más bien a limpiar errores que haya a la hora de programar los programas que son compatibles para este tipo de de compilador son: java, c++,c#, pascal entre otros. Interprete es el programa que utiliza el compilador para que juntos hagan una buena programación sea cual sea el programa el interprete por una parte trabaja a menos velocidad que el compilador esto es porque solo es la ayuda para que los programas no tengan muchos errores a la hora de ejecutarlos. Los intérpretes son muy importantes en la vida de la progracion ya que hace que el compilador no marque errores a la hora de ejecutar el programa también tiene un defecto que nos hace más lenta la ejecución del programa ya que verifica los errores que hay para corregirlos en algunas ocasiones.

Compiladores Un compilador es un programa que traduce los programas fuente escritos en lenguaje de alto nivel a lenguaje máquina. La traducción del programa completo se realiza en una sola operación denominada compilación del programa; es decir, se traducen todas las instrucciones del programa en un solo bloque. Compilador programa fuente mensaje de error El programa compilado y depurado (eliminados los errores del código fuente) se denomina programa ejecutable porque ya se puede ejecutar directamente y cuantas veces se desee; sólo deberá volver a compilarse de nuevo en el caso de que se modifique alguna instrucción del programa. De este modo el programa ejecutable no necesita del compilador para su ejecución. Los lenguajes compiladores típicos más utilizados son: C, C++, Java, C#, Pascal, FORTRAN y COBOL. Programa objeto

La entrada es un archivo en un lenguaje de alto nivel. El primer compilador de FORTRAN. Compilar el programa con el compilador C. Verificar y corregir errores de compilación (listado de errores). se tendrá la salida del programa. El enlazador (linker) obtiene el programa ejecutable. El programa objeto obtenido de la compilación ha sido traducido normalmente a código máquina. por ejemplo. También se han desarrollado buenos lenguajes de implantación. 5. Obtención del programa objeto. Introducir el programa fuente en memoria. 4. El proceso de montaje conduce a un programa en lenguaje máquina directamente ejecutable El proceso de ejecución de un programa escrito en un lenguaje de programación y mediante un compilador suele tener los siguientes pasos: 1. 3. Ej:Basic. Con estos avances. Escritura del programa fuente con un editor (programa que permite a una computadora actuar de modo similar a una máquina de escribir electrónica) y guardarlo en un dispositivo de almacenamiento (por ejemplo. se considero a los compiladores como programas notableme difíciles nte de escribir. necesito para su implicación 18 años de trabajo en grupo (Backus y otro 1975 ). en tornos de programación y herramientas de software. Para conseguir el programa máquina real se debe utilizar un programa llamado montador o enlazador (linker). un disco). Desde entonces se han descubierto técnicas sistemáticas para manejar muchas de las importancias tarea que surgen en la compilación. 7. puede hacerse un compilador real incluso como proyecto de estudios en un curso de un semestre sobre diseño de compiladores. 6. La compilación La compilación es el proceso de traducción de programas fuente a programas objeto. 2. si no existen errores. Programa fuente Manejador de errores Analizador Léxico Analizador Semántico Analizador Sintáctico Optimador de código Generador de código intermedio Administrador de la tabla de símbolos Generador de códigos Programa objetivo Intérprete: Ejecuta una a una las instrucciones de un programa de alto nivel. PROLOG son interpretados Ventaja: fácil depuración Desventaja: lentitud y consumo de recursos (pues el Intérprete ocupa tiempo y memoria) . Se ejecuta el programa y.En la década de 1950. la diferencia con un compilador es que la salida es una ejecución. LISP.

una PC y un PlayStation 3). un intérprete se ve obligado generalmente a analizar cada instrucción tantas veces como se ejecute (incluso miles o millones de veces). este tipo de instrucciones es imposible de tratar por medio de compiladores. prescinden de este tipo de operadores. MATLAB. exigen un intérprete. Los análisis léxico. etc. Un intérprete permite utilizar funciones y operadores más potentes. instrucción por instrucción. en una mayor facilidad para reemplazar partes enteras del programa o añadir módulos completamente nuevos). Pero escribir un intérprete es más fácil de mover a una . por eso la interpretación puede ser más lenta que la ejecución de un programa compilado. Además. Un intérprete facilita la búsqueda de errores. Usando un intérprete. Perl. Intérpretes y compiladores tienen diversas ventajas e inconvenientes que los hacen complementarios El intérprete difiere del compilador en que ejecuta cada orden una vez que se traduce. algunas implementaciones de programación de lenguajes de programación pueden interpretar o compilar el código fuente original en una más compacta forma intermedia y después traducir eso al código de máquina (ej. Intérprete que analiza el programa fuente y lo ejecuta directamente. Usualmente. durante la generación del programa equivalente. pero a cambio son más flexibles como entornos de programación y depuración (lo que se traduce.). UCSD Pascal y Java). un solo archivo fuente puede producir resultados iguales solo si es compilado a distintos ejecutables específicos a cada sistema. INTERPRETE En ciencias de la computación. Un intérprete puede necesitar evaluar la misma parte del árbol sintáctico varias veces (por ejemplo cuando se hacen ciclos). sin generar ningún código equivalente. Los lenguajes compilativos. los primeros (los intérpretes) sólo realizan la traducción a medida que sea necesaria. Los lenguajes que incluyen este tipo de operadores y que. ya que el análisis del lenguaje fuente se hace una sola vez. intérprete o interpretador es un programa informático capaz de analizar y ejecutar otros programas. por ejemplo. Usando un compilador. sino del propio intérprete (lo que se conoce comúnmente como máquina virtual).Un compilador suele generar programas más rápidos y eficientes. Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta. La interpretación comparte muchos aspectos con el compilador. Un intérprete es otra manera de implementar un lenguaje de programación. Su acción equivale a la de un intérprete humano. Los intérpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripción en un lenguaje de programación al código de máquina del sistema. así que los intérpretes se utilizan menos que los compiladores. y Ruby). Para mejorar el desempeño. un solo archivo fuente puede producir resultados iguales incluso en sistemas sumamente diferentes (ej. el programa puede modificarse sobre la marcha. Algunos aceptan los archivos fuente guardados en esta representación intermedia (ej. pues la ejecución de un programa puede interrumpirse en cualquier momento para estudiar el entorno (valores de las variables. sin producir ningún escrito permanente. sin necesidad de volver a comenzar la ejecución. Python. que permiten el uso de un compilador.. y normalmente no guardan el resultado de dicha traducción. sintáctico y verificación de tipos son exactamente los mismos que en un compilador. y permiten ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete. Este proceso puede hacer más lenta la ejecución del programa. Python. como por ejemplo ejecutar código contenido en una variable en forma de cadenas de caracteres. típicamente. se llaman interpretativos. escritos en un lenguaje de alto nivel. En cambio. por tanto. que traduce las frases que oye sobre la marcha.

realizara correctamente las actividades descritas en el programa fuente. La siguiente figura representa los componentes en que se divide un compilador. . De esta forma podrán controlarse más eficientemente los errores encontrados en cada una de las fases de la compilación de un programa. Esta representación intermedia debe tener dos propiedades importantes: debe ser fácil de producir y fácil de traducir al programa objeto. En ella se genera el código objeto que por lo general consiste en código en lenguaje máquina (código relocalizable) o código en lenguaje ensamblador. Cada fase representa una transformación al código fuente para obtener el código objeto. Análisis Léxico. lo mejor es utilizar un intérprete. El administrador de la tabla de símbolos se encarga de manejar los accesos a la tabla de símbolos. Esta constituye la fase final de un compilador. comprobar que los argumentos que tienen un operador pertenecen al conjunto de operadores posible. Manejador de errores. En cada una de las fases se utiliza un administrador de la tabla de símbolos y un manejador de errores. Generación de Código. Análisis Sintáctico. Cada componente léxico es una secuencia lógicamente coherente de caracteres relativa a un identificador. Cualquier compilador debe realizar dos tareas principales: análisis del programa a compilar y síntesis de un programa en lenguaje maquina que. pero que no tengan significado para la operación implicada. así que para aplicaciones donde la velocidad no importa. y si son compatibles entre sí. Para el estudio de un compilador. Las tres primeras fases realizan la tarea de análisis. A la secuencia de caracteres que representa un componente léxico se le llama lexema (o con su nombre en inglés token). Algunos compiladores generan una representación intermedia explícita del programa fuente. los componentes léxicos se agrupan en frases gramaticales que el compilador utiliza para sintetizar la salida. una palabra reservada. La fase de análisis semántico se intenta detectar instrucciones que tengan la estructura sintáctica correcta. Es conveniente que el tratamiento de los errores se haga de manera centralizada a través de un manejador de errores. En esta fase. en cada una de las etapas de compilación de un programa. un operador o un carácter de puntuación. En esta fase se trata de mejorar el código intermedio. El registro incluye los campos para los atributos del identificador. Se puede considerar esta operación intermedia como un subprograma para una máquina abstracta. En el caso de los identificadores creados por el programador no solo se genera un componente léxico. Optimización de Código. En la fase de análisis léxico se leen los caracteres del programa fuente y se agrupan en cadenas que representan los componentes léxicos.máquina diferente. Análisis Semántico: Este análisis es más difícil de formalizar. y las demás la síntesis. Análisis Semántico. Generación de código Intermedio. cuando se ejecute. Fases de un compilador Estructura de un Compilador. una vez que se han realizado las fases de análisis. de modo que resulte un código de máquina más rápido de ejecutar. Una tabla de símbolos es una estructura de datos que contiene un registro por cada identificador. Administrador de la tabla de símbolos. es necesario dividir su trabajo en fases. determina el tipo de los resultados intermedios. sino que se genera otro lexema en la tabla de símbolos. En cada fase del proceso de compilación es posibles encontrar errores.

Un programa puede manipular su propio código fuente a medida que se ejecuta. Actualmente. Aumentan la portabilidad del lenguaje: Para que el lenguaje interpretado funcione en otra máquina sólo es necesario que su intérprete funcione en dicha máquina. surgieron en primer lugar como sistemas interpretados y posteriormente surgieron compiladores. Facilitan la meta-programación. Muchos lenguajes como Lisp. Prolog. la eficiencia es un problema menos grave y muchas veces se prefieren sistemas que permitan un desarrollo rápido de aplicaciones que cumplan fielmente la tarea encomendada. los nuevos avances informáticos aumentan la velocidad de procesamiento y capacidad de memoria de los ordenadores. los sistemas interpretados suelen ser menos eficientes que los compilados. Los intérpretes. No obstante.Ventajas de la utilización de intérpretes En general. Esto es debido a que durante la ejecución de código compilado no es necesario realizar complejos análisis (ya se hicieron en tiempo de compilación). realizan la fase de análisis y ejecución a la vez. Esto facilita la implementación de sistemas de aprendizaje automatizado y reflectividad. por definición. APL. No es necesario contener en memoria todo el código fuente. la utilización de compiladores permite construir programas más eficientes que los correspondientes interpretados. un buen compilador es capaz de detectar errores y optimizar el código generado. son más sencillos de implementar. Lo cual facilita el estudio de la corrección del intérprete y proporciona nuevas líneas de investigación como la generación automática de intérpretes a partir de las especificaciones semánticas del lenguaje. lo cual imposibilita tales optimizaciones. A continuación se enumeran una serie de ventajas de los sistemas interpretados. Puesto que no existen etapas intermedias de compilación. Proporcionan una mayor flexibilidad que permite modificar y ampliar características del lenguaje fuente. además. Esto permite su utilización en sistemas de poca memoria o en entornos de red. en los que se puede obtener el código fuente a medida que se necesita. potencian la utilización de sistemas interactivos y facilitan las tareas de depuración. en general. los sistemas interpretados facilitan el desarrollo rápido de prototipos. Por esta razón. etc. . Los intérpretes.

Sign up to vote on this title
UsefulNot useful