You are on page 1of 5

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 porque
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 Programa objeto

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.
En la década de 1950, se considero a los compiladores como programas notablemente difíciles
de escribir. El primer compilador de FORTRAN, por ejemplo, necesito para su implicación 18
años de trabajo en grupo (Backus y otro 1975 ).
Desde entonces se han descubierto técnicas sistemáticas para manejar muchas de las
importancias tarea que surgen en la compilación. También se han desarrollado buenos
lenguajes de implantación, en tornos de programación y herramientas de software. Con estos
avances, puede hacerse un compilador real incluso como proyecto de estudios en un curso de
un semestre sobre diseño de compiladores.

La compilación

La compilación es el proceso de traducción de programas fuente a programas objeto. El


programa objeto obtenido de la compilación ha sido traducido normalmente a código
máquina.
Para conseguir el programa máquina real se debe utilizar un programa llamado montador o
enlazador (linker). 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. 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, un disco).
2. Introducir el programa fuente en memoria.
3. Compilar el programa con el compilador C.
4. Verificar y corregir errores de compilación (listado de errores).
5. Obtención del programa objeto.
6. El enlazador (linker) obtiene el programa ejecutable.
7. Se ejecuta el programa y, si no existen errores, se tendrá la salida del programa.
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. La entrada es un
archivo en un lenguaje de alto nivel, la diferencia con un compilador es que la salida es una
ejecución.

– Ej:Basic, LISP, PROLOG son interpretados


– Ventaja: fácil depuración
– Desventaja: lentitud y consumo de recursos (pues el
Intérprete ocupa tiempo y memoria)
Un compilador suele generar programas más rápidos y eficientes, ya que el análisis del
lenguaje fuente se hace una sola vez, durante la generación del programa equivalente. En
cambio, un intérprete se ve obligado generalmente a analizar cada instrucción tantas veces
como se ejecute (incluso miles o millones de veces).

INTERPRETE
En ciencias de la computación, intérprete o interpretador es un programa informático capaz de
analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel,. 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, los primeros
(los intérpretes) sólo realizan la traducción a medida que sea necesaria, típicamente,
instrucción por instrucción, y normalmente no guardan el resultado de dicha traducción.
Usando un intérprete, 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
específicos a cada sistema.
Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad
de traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos
de programación y depuración (lo que se traduce, por ejemplo, en una mayor facilidad para
reemplazar partes enteras del programa o añadir módulos completamente nuevos), y
permiten ofrecer al programa interpretado un entorno no dependiente de la máquina donde
se ejecuta el intérprete, sino del propio intérprete (lo que se conoce comúnmente como
máquina virtual).
Para mejorar el desempeño, 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. Perl, Python, MATLAB, y
Ruby). Algunos aceptan los archivos fuente guardados en esta representación intermedia (ej.
Python, UCSD Pascal y Java).
Un intérprete facilita la búsqueda de errores, pues la ejecución de un programa puede
interrumpirse en cualquier momento para estudiar el entorno (valores de las variables, etc.).
Además, el programa puede modificarse sobre la marcha, sin necesidad de volver a comenzar
la ejecución.
Un intérprete permite utilizar funciones y operadores más potentes, como por ejemplo
ejecutar código contenido en una variable en forma de cadenas de caracteres. Usualmente,
este tipo de instrucciones es imposible de tratar por medio de compiladores. Los lenguajes que
incluyen este tipo de operadores y que, por tanto, exigen un intérprete, se llaman
interpretativos. Los lenguajes compilativos, que permiten el uso de un compilador, prescinden
de este tipo de operadores.
Intérprete que analiza el programa fuente y lo ejecuta directamente, sin generar ningún código
equivalente. Su acción equivale a la de un intérprete humano, que traduce las frases que oye
sobre la marcha, sin producir ningún escrito permanente. 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. Este
proceso puede hacer más lenta la ejecución del programa, así que los intérpretes se utilizan
menos que los compiladores. Un intérprete es otra manera de implementar un lenguaje de
programación. La interpretación comparte muchos aspectos con el compilador. Los análisis
léxico, sintáctico y verificación de tipos son exactamente los mismos que en un compilador.

Un intérprete puede necesitar evaluar la misma parte del árbol sintáctico varias veces (por
ejemplo cuando se hacen ciclos), por eso la interpretación puede ser más lenta que la
ejecución de un programa compilado. Pero escribir un intérprete es más fácil de mover a una
máquina diferente, así que para aplicaciones donde la velocidad no importa, lo mejor es
utilizar un intérprete.

Fases de un compilador

Estructura de un Compilador.
Cualquier compilador debe realizar dos tareas principales: análisis del programa a compilar y
síntesis de un programa en lenguaje maquina que, cuando se ejecute, realizara correctamente
las actividades descritas en el programa fuente. Para el estudio de un compilador, es necesario
dividir su trabajo en fases. Cada fase representa una transformación al código fuente para
obtener el código objeto. La siguiente figura representa los componentes en que se divide un
compilador. Las tres primeras fases realizan la tarea de análisis, y las demás la síntesis. En cada
una de las fases se utiliza un administrador de la tabla de símbolos y un manejador de errores.
Análisis Léxico.
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. Cada componente léxico es una secuencia
lógicamente coherente de caracteres relativa a un identificador, una palabra reservada, un
operador o un carácter de puntuación. A la secuencia de caracteres que representa un
componente léxico se le llama lexema (o con su nombre en inglés token). En el caso de los
identificadores creados por el programador no solo se genera un componente léxico, sino que
se genera otro lexema en la tabla de símbolos.
Análisis Sintáctico.
En esta fase, los componentes léxicos se agrupan en frases gramaticales que el compilador
utiliza para sintetizar la salida. Análisis Semántico.
La fase de análisis semántico se intenta detectar instrucciones que tengan la estructura
sintáctica correcta, pero que no tengan significado para la operación implicada.
Análisis Semántico: Este análisis es más difícil de formalizar, determina el tipo de los resultados
intermedios, comprobar que los argumentos que tienen un operador pertenecen al conjunto
de operadores posible, y si son compatibles entre sí.

Generación de código Intermedio.


Algunos compiladores generan una representación intermedia explícita del programa fuente,
una vez que se han realizado las fases de análisis. Se puede considerar esta operación
intermedia como un subprograma para una máquina abstracta. Esta representación
intermedia debe tener dos propiedades importantes: debe ser fácil de producir y fácil de
traducir al programa objeto.
Optimización de Código.
En esta fase se trata de mejorar el código intermedio, de modo que resulte un código de
máquina más rápido de ejecutar.
Generación de Código.
Esta constituye la fase final de un compilador. 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.
‘’‘Administrador de la tabla de símbolos. ‘’‘ Una tabla de símbolos es una estructura de datos
que contiene un registro por cada identificador. El registro incluye los campos para los
atributos del identificador. El administrador de la tabla de símbolos se encarga de manejar los
accesos a la tabla de símbolos, en cada una de las etapas de compilación de un programa.
Manejador de errores.
En cada fase del proceso de compilación es posibles encontrar errores. Es conveniente que el
tratamiento de los errores se haga de manera centralizada a través de un manejador de
errores. 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.
Ventajas de la utilización de intérpretes

En general, la utilización de compiladores permite construir programas más eficientes que los
correspondientes interpretados. 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), además, un buen compilador es capaz de detectar errores y optimizar el código
generado.
Los intérpretes, por definición, realizan la fase de análisis y ejecución a la vez, lo cual
imposibilita tales optimizaciones. Por esta razón, los sistemas interpretados suelen ser menos
eficientes que los compilados. No obstante, los nuevos avances informáticos aumentan la
velocidad de procesamiento y capacidad de memoria de los ordenadores. Actualmente, 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. A
continuación se enumeran una serie de ventajas de los sistemas interpretados.
Los intérpretes, en general, 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.
Proporcionan una mayor flexibilidad que permite modificar y ampliar características del
lenguaje fuente. Muchos lenguajes como Lisp, APL, Prolog, etc. surgieron en primer lugar como
sistemas interpretados y posteriormente surgieron compiladores. No es necesario contener en
memoria todo el código fuente. 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.
Facilitan la meta-programación. Un programa puede manipular su propio código fuente a
medida que se ejecuta. Esto facilita la implementación de sistemas de aprendizaje
automatizado y reflectividad. 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. Puesto que no existen etapas intermedias de compilación, los sistemas interpretados
facilitan el desarrollo rápido de prototipos, potencian la utilización de sistemas interactivos y
facilitan las tareas de depuración.

You might also like