inf web viewel intérprete analiza, lee línea a línea el programa fuente, lo...

14
INTÉRPRETES Y COMPILADORES INTRODUCCIÓN: La palabra intérprete puede darse en dos tipos de disciplinas: en la Traducción y en la Informática. Para la Traducción, un intérprete se definiría como una persona que explica a otras, en lengua que entienden, lo dicho en otra que les es desconocida (según la definición de la Real Academia Española) . Un intérprete en Informática sería un traductor de lenguaje de programación de alto nivel. Más adelante ampliaremos su definición. Nos centraremos en el dominio de la Informática, para saber ¿qué es exactamente un intérprete?, ¿para qué sirve?, ¿en qué lo podemos comparar con un intérprete humano?, y por último ¿en qué nos puede ayudar a la hora de hacer una traducción? En primer lugar analizaremos sus características y funciones. En segundo veremos los puntos comunes y las diferencias con un intérprete humano, y por último qué funciones nos pueden servir en el momento que tengamos que realizar una traducción. I- Definiciones y funciones: A) Definiciones: Un intérprete es un programa de traducción de lenguaje de alto nivel. En Informática se habla de lenguajes de programación que son un medio de comunicación entre el usuario y el ordenador formado por un conjunto de símbolos elementales (alfabeto), palabras (vocabulario), y reglas (semántica y sintaxis). Con un lenguaje se construyen cada una de las órdenes o instrucciones para el ordenador de la secuencia de instrucciones que constituyen un programa. Dentro de los lenguajes de programación se encuentra el lenguaje de alto nivel: universal, no depende del procesador ni de la estructura interna de cada ordenador. No se necesita conocer el hardware específico de dicha máquina. Está más

Upload: tranthien

Post on 01-Feb-2018

213 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: inf   Web viewEl intérprete analiza, lee línea a línea el programa fuente, lo traduce a un código intermedio y lo ejecuta directamente, sin generar ningún código equivalente

INTÉRPRETES Y COMPILADORES

INTRODUCCIÓN: La palabra intérprete puede darse en dos tipos de disciplinas: en la Traducción y en la Informática. Para la Traducción, un intérprete se definiría como una persona que explica a otras, en lengua que entienden, lo dicho en otra que les es desconocida (según la

definición de la Real Academia Española). Un intérprete en Informática sería un traductor de lenguaje de programación de alto nivel. Más adelante ampliaremos su definición. Nos centraremos en el dominio de la Informática, para saber ¿qué es exactamente un intérprete?, ¿para qué sirve?, ¿en qué lo podemos comparar con un intérprete humano?, y por último ¿en qué nos puede ayudar a la hora de hacer una traducción? En primer lugar analizaremos sus características y funciones. En segundo veremos los puntos comunes y las diferencias con un intérprete humano, y por último qué funciones nos pueden servir en el momento que tengamos que realizar una traducción.

I- Definiciones y funciones:

A) Definiciones:

Un intérprete es un programa de traducción de lenguaje de alto nivel. En Informática se habla de lenguajes de programación que son un medio de comunicación entre el usuario y el ordenador formado por un conjunto de símbolos elementales (alfabeto), palabras (vocabulario), y reglas (semántica y sintaxis). Con un lenguaje se construyen cada una de las órdenes o instrucciones para el ordenador de la secuencia de instrucciones que constituyen un programa. Dentro de los lenguajes de programación se encuentra el lenguaje de alto nivel: universal, no depende del procesador ni de la estructura interna de cada ordenador. No se necesita conocer el hardware específico de dicha máquina. Está más próximo a lo que es un lenguaje natural. Es claro, simple, eficiente y legible. Sus instrucciones equivalen a las múltiples instrucciones en lenguaje máquina (códigos binarios de instrucciones, es decir, sucesiones de ceros y unos: 1100 0010 1010 0101… que componen un repertorio reducido de operaciones). Existe el problema de que los programas son más lentos en su ejecución y necesitan ser traducidos a lenguaje máquina para que el procesador los entienda. Algunos ejemplos de lenguajes de alto nivel pueden ser: FORTRAN, ALGOL, COBOL, BASIC, PASCAL, LISP, JAVA…

El intérprete analiza, lee línea a línea el programa fuente, lo traduce a un código intermedio y lo ejecuta directamente, sin generar ningún código equivalente. Pero el intérprete no es el único programa traductor que existe. También están los compiladores, que analizaremos más adelante, los ensambladores que traducen el lenguaje ensamblador (códigos de instrucciones

Page 2: inf   Web viewEl intérprete analiza, lee línea a línea el programa fuente, lo traduce a un código intermedio y lo ejecuta directamente, sin generar ningún código equivalente

formados por grupos de palabras mnemotécnicas como LOAD= almacenar, ADD= sumar, CMP= comparar…) a lenguaje máquina, y los preprocesadores que traducen un programa escrito en lenguaje de alto nivel a otro escrito en otro lenguaje de alto nivel.

Los compiladores tienen una acción parecida a la de los intérpretes, sólo que poseen un programa objeto que ya está traducido en lenguaje máquina.

B) Funciones:

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

Page 3: inf   Web viewEl intérprete analiza, lee línea a línea el programa fuente, lo traduce a un código intermedio y lo ejecuta directamente, sin generar ningún código equivalente

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

Page 4: inf   Web viewEl intérprete analiza, lee línea a línea el programa fuente, lo traduce a un código intermedio y lo ejecuta directamente, sin generar ningún código equivalente

II- Intérprete informático y humano

a) La simultaneidad:

Un intérprete humano tiene como objetivo transmitir un mismo mensaje desde una lengua origen hacia una lengua meta. Se podría comparar con un intérprete informático en cuanto a la simultaneidad. El intérprete humano va traduciendo lo que se emite en el momento determinado. El intérprete informático va traduciendo según se ejecuta un programa, línea por línea, oración por oración, etc. Tiene como objeto la obtención de los resultados del programa. El intérprete también traduce un código fuente en lenguaje máquina.

Esto es lo que haría un intérprete informático:

Page 5: inf   Web viewEl intérprete analiza, lee línea a línea el programa fuente, lo traduce a un código intermedio y lo ejecuta directamente, sin generar ningún código equivalente

Y esto es lo que haría un intérprete humano:

Situación de intento de traducción

⤹ ⤹

b) La ineficacia:

Difiere del compilador en que ejecuta cada orden una vez que se traduce. Se debe analizar, traducir y ejecutar cada instrucción. Este proceso puede hacer más lenta la ejecución del programa, con lo cual los intérpretes se utilizan menos que los compiladores.

En lugar de generar un código del árbol sintáctico, este último se procesa directamente para evaluar expresiones y ejecutar sentencias, así hasta terminar. 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 resultar 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, por lo tanto, en las aplicaciones donde la velocidad no sea importante, es mejor utilizar un intérprete.

También es importante decir que consume muchos recursos, es decir que ocupa mucha memoria.

c) El compilador como un traductor:

El objetivo de un compilador es la obtención de una traducción del programa fuente a otro lenguaje.

En la primera etapa se analiza la entrada para averiguar qué es lo que se intenta comunicar. Esto es lo que se conoce como análisis. El fruto de esta etapa es una representación de la entrada que permite que la siguiente fase se desarrolle con facilidad. La segunda etapa, la

Discurso de partida en lengua de origen

Intérprete

Traduce y ejecuta oración por oración

Page 6: inf   Web viewEl intérprete analiza, lee línea a línea el programa fuente, lo traduce a un código intermedio y lo ejecuta directamente, sin generar ningún código equivalente

síntesis, toma la representación obtenida en el análisis y la transforma en su equivalente en el lenguaje destino.

Análisis:

- Léxico: de caracteres a componentes

- Sintáctico: de componentes a árboles de análisis

- Semántico: de árboles de análisis a AST (Advanced Software Technologies)

Síntesis:

- Generación de código intermedio

- Generación de código objeto

- Optimización (mezclada con las anteriores)

Coincide con un traductor humano en que en primer lugar debe hacer un análisis de lectura (que se debe efectuar más de una vez) comprobando el campo léxico, la sintaxis y sobre todo el significado del texto. La síntesis correspondería al proceso de traducción en el cual se pasa el texto de una lengua origen a una lengua meta. Por último quedaría la revisión. El compilador tiene una visión global del programa, por lo que la información de mensajes de error es más detallada. Un traductor puede corregir sus errores de forma más fácil que un intérprete que traduce de forma simultánea. Los compiladores permiten una mayor interactividad con el código en tiempo de desarrollo. Necesita otros programas para conseguir su objetivo (por ejemplo el linker, el depurador, el ensamblador, etc.). Un traductor también hace uso de distintos recursos aparte del texto (por ejemplo glosarios, tesauros, enciclopedias, etc.). El compilador informa de los errores a su usuario. El traductor puede consultar al cliente sobre las diferentes traducciones que pueden hacerse y así encontrar la que más se adecúe al interés del primero. Pueden discutirse errores en cuanto al uso de una palabra concreta por ejemplo. Sin embargo, no coincide con un traductor humano en cuanto a la velocidad. Normalmente un compilador suele ser más rápido que un intérprete. En la vida real, la interpretación se hace en el momento, si el discurso es de 10 minutos, la interpretación se hace en 10 minutos. Una traducción necesita días para llevarse a cabo.

III- ¿En qué nos puede ayudar a nosotros, traductores?

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,

Page 7: inf   Web viewEl intérprete analiza, lee línea a línea el programa fuente, lo traduce a un código intermedio y lo ejecuta directamente, sin generar ningún código equivalente

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 Ejecución de cadenas de caracteres mediante operadores como "execute", "interprete" o "evalquote".

o Modificar sobre la marcha el significado de los símbolos e incluso prescindir por completo de las declaraciones.

o Obtener un ligamiento dinámico completo en los sistemas orientados a objetos.

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

Pequeña curiosidad:

En el siguiente artículo http://spac.caad.es/2/spip.php%3Farticle127?article127, el autor hace una reflexión de porqué es preferible que haya interpretes tecnológicos antes que intérpretes humanos en un videojuego de rol (juego en el que cada jugador tiene que desempeñar un papel de un personaje totalmente fuera de la realidad). Los dos argumentos que expone son:

1) “Si bien es cierto que jugando con Máster* humanos, estos harán de intérprete de tus acciones y por tanto serán capaces de responderte más y mejor que un intérprete informático (…)la realidad desde mi punto de vista, es que jugando contra la máquina,

Page 8: inf   Web viewEl intérprete analiza, lee línea a línea el programa fuente, lo traduce a un código intermedio y lo ejecuta directamente, sin generar ningún código equivalente

sin humanos de por medio, tienes más libertad. (…) la libertad de desconectarse del mundo real y liberar su mente. Visto así, si con Masters vas a poder hacer más cosas en el mundo del juego... (…) te cortan el punto, así de simple, una o varias personas escuchándote, son, lo quieran o no, personas que juzgan (…)”.

2) “una AC informática se puede empaquetar en un ejecutable, el mundo del juego que propone, está definido rígidamente a nivel binario y con el texto y comportamiento, y es como es, por sí mismo. No depende de quién entre en ese mundo a explorarlo, y no depende de cómo te lo muestra un Máster, ese mundo era y es como es antes de que tú llegarás... (…)La definición exacta del mundo del juego sufre la interpretación del Máster, para cada Máster que ofrece una partida en ese mundo. Su valor y definición original siempre es adulterada en un porcentaje. Ese valor es distinto en cada Máster, porque los hay mejores y peores.

La redacción de tiene un gran nivel pero entendemos lo que quiere transmitirnos. Sin embargo existe una respuesta a este artículo que podría resultar muy interesante:

“Analizándolos parece que el autor tiene miedo a vivir, o al menos, jugar en sociedad. Veamos:

Miedo a ser juzgado por sus experimentos ¿inmorales? Decir que su libertad de experimentación se ve menoscabada por que frente a él tiene un Máster y otros jugadores que son humanos y juzgan implica dos posibilidades: nunca ha jugado con adultos caso en el que al jugar al rol siempre hay que poner en claro que los personajes son una cosa y las personas otras. Si ’llevas’ al villano de la ’película’ harás salvajadas, traicionarás o quemarás aldeanos, violarás a inocentes... pero no eres tú el que lo hace, sino el personaje y parte de la experiencia es ver a tus amigos en esas circunstancias increíbles y nada relacionadas con ellos. Eso es rol entre adultos. ¿Tan inmorales son los experimentos que quiere desarrollar el autor que provocaría el rechazo abierto de jugadores y Máster adultos? A mí me suena a miedo a jugar en sociedad.

El segundo argumento me parece similar. ¿Qué el hecho de hacer un agujero en una pared y que el Máster ’cree’ de la nada lo que hay al otro lado ’ensucia’ el mundo de juego? Qué cosa más absurda. Es como pensar que las historias embutidas en una ACS no han sido inventadas por un creador, creador que tenía vagamente en la cabeza múltiples aspectos del ’juego’ que nunca ha reflejado en el juego en sí. Todas las historias tienen limitaciones sea en el soporte que sea. La improvisación teatral y el rol en directo son probablemente de los pocos soportes para historias en donde constantemente se pueden romper estas restricciones y eso no es un problema, es claramente un valor. La experiencia, que al final es lo que importa, puede ser casi tan extensa como se quiera. El humano que está ahí frente a ti, logra que la experiencia se adapte a tus reacciones. Eso es algo que una máquina solo puede hacer de una manera mucho más limitada. Todo el argumento de que la historia existía ahí a priori, es una cosa absurda para mí. ¿Qué más da? Lo que importa es lo que experimentes no cómo se llega a esa experiencia. Y desde luego lo de que la cosa se ’ensucia’ porque hay otros jugadores de nuevo me suena a miedo a jugar en sociedad. ¿Por qué se ensucia? ¿Es que no puedes coordinar tu experiencia para disfrutarla conjuntamente con otros jugadores? ¿Tan frágil es tu capacidad de

Page 9: inf   Web viewEl intérprete analiza, lee línea a línea el programa fuente, lo traduce a un código intermedio y lo ejecuta directamente, sin generar ningún código equivalente

sostener la suspensión de la realidad porque el gordo del Máster mastique unas patatas justo antes de describir la corte del conde local?”

*un Máster es un jefe de juego.

Nos preguntamos, en este caso, ¿qué sería más conveniente?

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.

El intérprete coincide con un intérprete humano en su simultaneidad pero difiere en la velocidad de ejecución. Los intérpretes informáticos suelen ser más lentos que los compiladores. También podemos comparar los compiladores con los traductores humanos en cuanto a su necesidad de utilizar varios recursos para poder traducir como en la posibilidad de consultar y corregir de manera más profunda. 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).

Estas distintas funciones pueden ayudarnos a nosotros, traductores, para poder introducir algoritmos (en lenguaje humano) dentro de una computadora y que esta pueda entenderlos (en lenguaje de código de objeto) y así poder utilizar el programa que deseamos para poder ejercer con las traducciones.

Page 10: inf   Web viewEl intérprete analiza, lee línea a línea el programa fuente, lo traduce a un código intermedio y lo ejecuta directamente, sin generar ningún código equivalente

BIBLIOGRAFÍA

Fuentes informáticas

http://www.todo-programacion.com.ar/archives/2005/04/interpretes_y_c.html

http://www.mitecnologico.com/Main/DiferenciasEntreInterpretesYCompiladores

http://www.mitecnologico.com/Main/ComparacionInterpretesYCompiladores

http://www.monografias.com/trabajos11/compil/compil.shtml

http://www.mailxmail.com/curso-informatica-ordenador-cientifico-desarrollo/compiladores-interpretes-programas

http://www.giaa.inf.uc3m.es/docencia/ITIG/introduccion.pdf

http://spac.caad.es/2/spip.php%3Farticle127?article127

http://profejavaoramas.blogspot.com/2010/04/interprete.html

http://repositori.uji.es/xmlui/bitstream/handle/10234/5876/estructura.apun.pdf?sequence=1

http://algomasquetraducir.com/2007/09/02/traducir-programas-informaticos-la-localizacion/

Wikipedia

www.rae.es

http://mi-carrera.com/TraductorEInterprete.html

http://www.investigacion.frc.utn.edu.ar/labsis/Publicaciones/InvesDes/Compiladores/caratula.html

http://es.scribd.com/doc/49201542/Compiladores-E-Interpretes

http://arantxa.ii.uam.es/~alfonsec/docs/compila8.htm

http://www.di.uniovi.es/~labra/FTP/Interpretes.pdf

Fuentes bibliográficas

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