Clase 2:
Clasificación de los interpretes
Concepto de Interprete
•
En lugar de producir un programa objeto como
resultado de una traducción, un intérprete realiza las
operaciones que implica el programa fuente.
•
Un intérprete no genera un programa equivalente,
sino que toma una sentencia del programa fuente en un lenguaje de alto nivel,
la traduce al código equivalente y al mismo tiempo la ejecuta.
•
Un intérprete es un programa que analiza y
ejecuta simultáneamente el programa fuente, es decir no producen un código objeto, siendo su ejecución simultánea
a la del programa fuente.
Comportamiento de un
Interprete
•
Un intérprete es como un compilador, solo que la
salida es una ejecución. El programa de entrada se reconoce y ejecuta a la vez.
No se produce un resultado físico (código máquina) sino lógico (una ejecución).
•
Además de que la traducción optimiza el programa
acercándolo a la máquina, los lenguajes interpretados tienen la característica
de que permiten construir programas que se pueden modificar a sí mismos.
Resultado
del Interprete
Ventajas de los
Interpretes
•
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.
Ventajas de los
Interpretes
*
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.
Desventajas de los
Interpretes
•
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.
Clasificación de
Intérpretes
•
Intérpretes
Puros
•
Interpretes
Avanzados
•
Interpretes
Incrementales
Intérpretes Puros
•
Los intérpretes puros son los que analizan una
sentencia y la ejecutan, y así sucesivamente todo el programa fuente. Fueron
los intérpretes desarrollados en la primera generación de ordenadores, pues
permitían la ejecución de largos programas con ordenadores de memoria muy
reducida, ya que sólo debían contener en memoria el intérprete y la sentencia a
analizar y ejecutar.
•
El principal problema de este tipo de
intérpretes es que si a mitad del programa fuente se producen errores, se debe
de reiniciar el proceso.
Funcionamiento del
Intérprete Puro
Explicación del
Interprete Puro
•
En la figura se representa el esquema general de
un intérprete puro, donde se puede observar que el lenguaje fuente se traduce a
una representación interna (texto o binaria) que puede ser almacenada en
memoria o en disco.
•
Esta representación interna tiene todas las
instrucciones numeradas o colocadas consecutivamente en estructuras de tamaño
fijo (por ejemplo un array o posiciones consecutivas de memoria, o un fichero
binario de estructuras de tamaño fijo).
Explicación del Interprete
Puro
•
Mientras se realiza este paso se puede construir
la tabla de etiquetas, que es una tablas que contiene una estructura donde
están todas las etiquetas y su posición en el programa fuente (las etiquetas se
utilizan tanto en las instrucciones de salto como en las llamadas a
procedimientos y funciones).
•
Una vez que este proceso ha finalizado, comienza
la ejecución por la primera instrucción del código, que se envía al evaluador
de instrucciones, éste la ejecuta (recibiendo datos si es necesario o enviando
un mensaje de error).
Explicación del
Interprete Puro
•
El evaluador de instrucciones también determina
la instrucción siguiente a ejecutar, en algunos casos previa consulta a la
tabla de etiquetas. En el caso de que no haya saltos (GOTO) o llamadas a
procedimientos o funciones se ejecuta la siguiente instrucción a la instrucción
en curso.
•
El evaluador de instrucciones puede utilizar dos
métodos de evaluación. El método clásico es la evaluación voraz o ansiosa,
donde se evalúan las expresiones completamente. Otro método es la evaluación
perezosa, evaluándose sólo la parte necesaria de la expresión ( el resto no se
evalúa).
Interpretes 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.
Funcionamiento del
Intérprete Avanzado
Explicación del
Interprete Avanzado
• Un
ejemplo de intérprete avanzado es el que utiliza el lenguaje Java. Así un
programa en lenguaje java (con la extensión .java) se compila y produce uno o
varios ficheros con la extensión .class, estos ficheros están en un formato
binario denominado bytecode independiente de plataforma, que se interpreta
posteriormente.
Explicación del
Interprete Avanzado
• Esto
permite que el bytecode se ejecute en cualquier sistema operativo que disponga
de un intérprete de bytecode. Dado que la mayor parte de los navegadores de
Internet llevan inmerso un intérprete de bytecode, esto ha permitido al
lenguaje Java ser uno de los más utilizados en aplicaciones que usen Internet.
Interpretes
Incrementales
• Algunos lenguajes no se pueden compilar, debido
a que entre sus características pueden
manejar objetos o funciones que no son
conocidos en tiempo de compilación, ya que son
creados en ejecución. Para este
tipo de lenguajes existen los intérpretes incrementales, que
permiten compilar
los módulos completamente definidos, y recompilar en tiempo de
ejecución los
nuevos módulos.
Interpretes
Incrementales
• Los
intérpretes incrementales tienen gran interés en los lenguajes que permiten no
definir
los problemas completamente en tiempo de compilación. En estos casos se
utilizan evaluadores parciales que toman como entrada el programa fuente junto
con algunos datos (
pero no todos), realizándose los cálculos que se pueden
hacer con dicho subconjunto de datos, y produciendo una salida que contiene un
residuo del programa fuente que se ha introducido.

































No hay comentarios.:
Publicar un comentario