Proyecto Final. Monografía Intérpretes.
00010001
Universidad del Desarrollo Profesional. Unidad: Ciudad Obregón, Sonora, Centro. Ingeniería En Sistemas Computacionales. Elaborado: Jesús Isidro González Espinoza. Maestro: Dr. Benito Franco Urrea.
INTRODUCCIÓN La avance acelerado de la tecnología, la cual suele estar íntimamente ligada a la computación, nos hace protagonistas de esos cambios constantes, no se nos permite estar exentos de la misma, en esta oportunidad exploraremos los Interpretadores, quienes actúan como enlace entre el ser humano y la máquina, la cual traduce el requerimiento del humano al idioma de la misma.
1
INTERPRETES Es el que realiza las operaciones que implica el programa fuente, muchas veces los intérpretes se utilizan para ejecutar lenguajes de órdenes, pues cada operador que se ejecuta en un lenguaje de este tipo suele ser una invocación de una rutina, como un editor o un compilador. Del mismo modo algunos lenguajes de alto nivel son interpretados, porque hay muchas cosas sobre los datos, como el tamaño y la forma de las matrices que no se pueden deducir en el momento de la compilación. Es un traductor que realiza la operación de compilación paso a paso. Para cada sentencia que compone el texto de entrada, se realiza una traducción, ejecuta dicha sentencia y vuelve a iniciar el proceso con la sentencia siguiente. La principal ventaja del proceso de compilación frente al de interpretación es que los programas se ejecutan mucho más rápidamente una vez compilados; por el contrario, es más cómodo desarrollar un programa mediante un intérprete que mediante un compilador puesto que en el intérprete las fases de edición y ejecución están más integradas. La depuración de los programas suele ser más fácil en los intérpretes que en los compiladores puesto que el código fuente está presente durante la ejecución. Estas ventajas pueden incorporarse al compilador mediante la utilización de entornos de desarrollo y depuradores simbólicos en tiempo de ejecución. Diferencia de un intérprete y un compilador: Interprete: Es un programa que lee línea a línea un programa escrito en un lenguaje; en lenguaje fuente y lo va traduciendo a un código intermedio, para ejecutarlo. Compilador: Es un programa que lee totalmente un programa escrito en un lenguaje; el lenguaje fuente, y lo traduce a un programa equivalente a otro lenguaje, lenguaje objeto. PROGRAMA FUENTE Es el programa escrito en alguno de los lenguajes y que no ha sido traducido al lenguaje de la máquina, es decir el programa que no está en código de máquina y que por lo tanto no puede ser ejecutable. Lenguajes de alto nivel Para acelerar, aún más, el proceso de programación se desarrollan los lenguajes de alto nivel en los que se podía escribir un enunciado para realizar tareas sustanciales. Los lenguajes de alto nivel permiten a los programadores escribir instrucciones que asemejan al inglés cotidiano y contiene notaciones matemáticas de uso común.
2
Existen lenguajes que utilizan un Intérprete, un ejemplo de ello es el programa JAVA, y su intérprete traduce en el instante mismo de lectura, el código en lenguaje máquina para que pueda ser ejecutado. La siguiente figura muestra el funcionamiento de un intérprete.
Funciones de un Intérprete. Las funciones de un intérprete son las mismas que la de los compiladores:
Análisis léxico: es la parte inicial de leer y analizar el código fuente. El texto es leído y dividido en tokens (que según la Wikipedia es llamado también componente léxico y es “una cadena de caracteres que tiene un significado coherente en cierto lenguaje de programación. Ejemplos de tokens, podrían ser palabras clave (if, else, while, int, ...), identificadores, números, signos, o un operador de varios caracteres, (por ejemplo, :=).”), cada uno de los cuales corresponde a un símbolo en el lenguaje de programación, por ejemplo, el nombre de una variable, una palabra reservada o un número.
Análisis sintáctico: en esta fase se toma una lista de tokens producida por el análisis léxico y los acomoda en una estructura de árbol llamado árbol sintáctico que refleja la estructura del programa. Esta fase también se llama parsing.
Verificación de tipos: en esta pate se analiza el árbol sintáctico para determinar si el programa viola ciertos requerimientos de consistencia, es decir, si una variable se utiliza pero no se declara, o si se usa en un contexto que no tiene sentido por el tipo de variable, tal como un string (que según la Wikipedia “es una secuencia ordenada de longitud arbitraria (aunque finita) de elementos que pertenecen a un cierto alfabeto”) para utilizar un valor booleano (según la Wikipedia: “aquel que puede representar valores 3
de lógica binaria, esto es 2 valores, valores que normalmente representan falso o verdadero”) como una función de apuntador.
Generación de código intermedio: el programa se traduce a un lenguaje simple e independiente de la máquina.
Ubicación de registros: los nombres simbólicos de las variables utilizadas en el código intermedio se traducen a números, cada uno de ellos correspondiendo a un registro de máquina objetivo (de la máquina que va a ejecutar finalmente el programa).
Generación de código máquina: el lenguaje intermedio se traduce al lenguaje ensamblador (representación textual de código máquina) para una estructura de máquina específica.
Ensamblado y enlazado: el código en lenguaje ensamblador se traduce a una representación binaria y se determina la dirección real de las variables, funciones, etc.
Aquí podemos observar un esquema sobre las distintas partes en que trabaja:
Pero a diferencia de un intérprete, el compilador es una aplicación que lee totalmente un programa escrito en lenguaje fuente, y lo traduce a un programa equivalente a otro en lenguaje objeto. La principal ventaja del proceso de compilación frente al de interpretación es que los programas se ejecutan mucho más rápidamente una vez compilados; por el contrario, es más cómodo desarrollar un programa mediante un intérprete que mediante un compilador puesto que 4
en el intérprete las fases de edición y ejecución están más integradas. La depuración de los programas suele ser más fácil en los intérpretes que en los compiladores puesto que el código fuente está presente durante la ejecución. Estas ventajas pueden incorporarse al compilador mediante la utilización de entornos de desarrollo y depuradores simbólicos en tiempo de ejecución. Los usos principales de un intérprete. Los intérpretes se usan principalmente: Para el desarrollo de prototipos y la enseñanza; cuando el lenguaje tiene características que exigen un intérprete (Lisp, APL, REXX, Smalltalk, Prolog); cuando el lenguaje dispone de operadores muy potentes, lo que significa que la mayor parte del tiempo los programas están ejecutando código rápido prefabricado, más que los programas fuente del programador (APL, SNOBOL). También sirve para obtener independencia de la máquina (JAVA) y para aumentar la seguridad (JAVA).
Ventajas de un intérprete:
Flexibilidad: permite realizar acciones complejas, imposibles o muy difíciles con un compilador, como las siguientes:
o o o o
Ejecución de cadenas de caracteres mediante operadores como "execute", "interprete" o "evalquote". Modificar sobre la marcha el significado de los símbolos e incluso prescindir por completo de las declaraciones. Obtener un ligamiento dinámico completo en los sistemas orientados a objetos. Simplificar la gestión de memoria en los programas fuente.
La facilidad de depuración de programas: la interpretación puede interrumpirse en cualquier momento para examinar o modificar los valores de las variables o la situación en la ejecución. La tabla de símbolos está disponible. Se pueden corregir los errores y continuar; trazas y paradas programadas, saltos en el programa, abandonos de subrutinas.
En comparación con un compilador podemos decir que, en un ejemplo de la vida real; supongamos que tenemos un libro escrito en una lengua diferente al castellano. Existen dos procesos para acceder a su contenido cuando se necesite su uso. El primero es traducir en el momento de su empleo la parte del libro que se necesite, pero sin transcribirla a papel, solo de forma simultánea. Este proceso corresponde a la función del intérprete. El segundo sería traducir el libro al castellano y dejar dicha versión escrita sobre papel, lo que corresponde a la compilación. 5
Conclusión. En conclusión podemos decir que el intérprete puede aparecer en forma de ser humano o de aplicación informática. Cada uno tiene sus distintas características pero coinciden en muchos aspectos como en el principal: la transmisión de un código de una lengua origen a una lengua meta. Hemos adoptado la definición de “intérprete informático” como un programa de traducción de lenguaje de alto nivel que se diferencia del compilador, otro programa de traducción. En este caso, la traducción de un compilador resulta más eficaz que la de un intérprete que debería emplearse sólo para el desarrollo de prototipos y para la enseñanza. También sirve cuando el lenguaje tiene características que exigen un intérprete (Lisp, APL, REXX, Smalltalk, Prolog), cuando el lenguaje dispone de operadores muy potentes y, por último, para obtener independencia de la máquina (JAVA) y para aumentar la seguridad (JAVA).
6
Bibliografía. http://www.monografias.com/trabajos37/interpretadores/interpretadores2.shtml http://www.todo-programacion.com.ar/archives/2005/04/interpretes_y_c.html “Métodos informáticos en turbo pascal” cap. 1 Fundamentos de programación – Ángel García y Beltrán, Raquel Martínez Fernández y José Alberto Jaén Gallego.
7