El documento clasifica e introduce los diferentes tipos de intérpretes: intérpretes puros analizan y ejecutan sentencia a sentencia; intérpretes avanzados realizan análisis previo y generan un lenguaje intermedio; e intérpretes incrementales permiten compilar módulos definidos y recompilar nuevos módulos en tiempo de ejecución.
1. 1
Clasificación de los Interpretes
Pedro Antonio Villalta
https://plus.google.com/u/0/105223072803758915793/about
Mis Redes Sociales
Facebook.com/pavillalta
twitter.com/pavillalta
Mis Correos
pavillalta@gmail.com
pavillalta@ugb.edu.sv
Introducción a Compiladores e Interpretes
2. Pasa por mis blog y deja tus comentarios
1. http://compiladores-interpretes.blogspot.com/
2. http://programacion-visualbasic-net.blogspot.com/
3. http://ingenieria-en-sistemas-informaticos.blogspot.com/
4. http://investigacion-cientifica-docente.blogspot.com/
5. http://soporteredes.blogspot.com/
6. http://ecomerce-comercio-electronico.blogspot.com/
7. http://miw2012.blogspot.com/
8. http://programacion-visual-c-net.blogspot.com/
9. http://programacion-web-php.blogspot.com/
10. http://programacion-moviles.blogspot.com/
3. Introducción a Compiladores e Interpretes
3
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.
4. Introducción a Compiladores e Interpretes
4
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.
6. Introducción a Compiladores e Interpretes
6
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.
7. Introducción a Compiladores e Interpretes
7
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.
8. Introducción a Compiladores e Interpretes
8
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.
9. Introducción a Compiladores e Interpretes
Clasificación de Intérpretes
• Intérpretes Puros
• Interpretes Avanzados
• Interpretes Incrementales
9
10. Introducción a Compiladores e Interpretes
10
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.
12. Introducción a Compiladores e Interpretes
12
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).
13. Introducción a Compiladores e Interpretes
13
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).
14. Introducción a Compiladores e Interpretes
14
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).
15. Introducción a Compiladores e Interpretes
15
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.
17. Introducción a Compiladores e Interpretes
17
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.
18. Introducción a Compiladores e Interpretes
18
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.
19. Introducción a Compiladores e Interpretes
19
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.
20. Introducción a Compiladores e Interpretes
20
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.