intérpretes y compiladores

Anuncio
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
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.

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.
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:
Y esto es lo que haría un intérprete humano:
Situación de intento de traducción
Discurso de partida en lengua de origen
⤹
⤹
Intérprete
Traduce y ejecuta oración por oració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
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,
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.
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,
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
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.
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/compiladoresinterpretes-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.
Documentos relacionados
Descargar