19
Introducción a Compiladores e Interpretes 1 Docente: Marvin Osmaro Parada [email protected] UNIVERSIDAD GERARDO BARRIOS FACULTAD DE CIENCIA Y TECNOLOGIA COMPILADORES E INTERPRETES CICLO 1/2016 Clase#2 Clasificación de los Interpretes

Clase2 clasificacion de interpretes

Embed Size (px)

Citation preview

Page 1: Clase2 clasificacion de interpretes

Introducción a Compiladores e Interpretes

1

Docente:

Marvin Osmaro Parada

[email protected]

UNIVERSIDAD GERARDO BARRIOSFACULTAD DE CIENCIA Y TECNOLOGIA

COMPILADORES E INTERPRETES

CICLO 1/2016

Clase#2

Clasificación de los Interpretes

Page 2: Clase2 clasificacion de 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.

Introducción a Compiladores e Interpretes 2

Page 3: Clase2 clasificacion de interpretes

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.

Introducción a Compiladores e Interpretes 3

Page 4: Clase2 clasificacion de interpretes

Resultado del Interprete

Introducción a Compiladores e Interpretes 4

IntérpretePrograma

FuenteSalida

Datos

Page 5: Clase2 clasificacion de interpretes

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.

Introducción a Compiladores e Interpretes 5

Page 6: Clase2 clasificacion de interpretes

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.

Introducción a Compiladores e Interpretes 6

Page 7: Clase2 clasificacion de interpretes

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.

Introducción a Compiladores e Interpretes 7

Page 8: Clase2 clasificacion de interpretes

Clasificación de Intérpretes

• Intérpretes Puros

• Interpretes Avanzados

• Interpretes Incrementales

Introducción a Compiladores e Interpretes 8

Page 9: Clase2 clasificacion de interpretes

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.

Introducción a Compiladores e Interpretes 9

Page 10: Clase2 clasificacion de interpretes

Funcionamiento del Intérprete Puro

Introducción a Compiladores e Interpretes 10

Page 11: Clase2 clasificacion de interpretes

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).

Introducción a Compiladores e Interpretes 11

Page 12: Clase2 clasificacion de interpretes

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).

Introducción a Compiladores e Interpretes 12

Page 13: Clase2 clasificacion de interpretes

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).

Introducción a Compiladores e Interpretes 13

Page 14: Clase2 clasificacion de interpretes

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.

Introducción a Compiladores e Interpretes 14

Page 15: Clase2 clasificacion de interpretes

Funcionamiento del Intérprete Avanzado

Introducción a Compiladores e Interpretes 15

Page 16: Clase2 clasificacion de interpretes

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.

Introducción a Compiladores e Interpretes 16

Page 17: Clase2 clasificacion de interpretes

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.

Introducción a Compiladores e Interpretes 17

Page 18: Clase2 clasificacion de interpretes

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.

Introducción a Compiladores e Interpretes 18

Page 19: Clase2 clasificacion de interpretes

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.

Introducción a Compiladores e Interpretes 19