Un traductor es un
metaprograma que toma como entrada un programa (o parte de un programa) escrito
en lenguaje simbólico, alejado de la máquina, denominado programa fuente y
proporciona como salida otro programa, semánticamente equivalente, escrito en
un lenguaje comprensible por el hardware del ordenador, denominado programa
objeto. Veremos dos tipos de traductores, los compiladores e intérpretes, que
representan dos aproximaciones muy distintas a la tarea de permitir el
funcionamiento de los programas escritos en un determinado lenguaje de
programación de alto nivel.
Un compilador traduce completamente un programa fuente,
escrito en un lenguaje de alto nivel, a un programa objeto, escrito en lenguaje
ensamblador o máquina. El programa fuente suele estar contenido en un archivo,
y el programa objeto puede almacenarse como archivo en memoria masiva para ser
procesado posteriormente, sin necesidad de volver a realizar la traducción. Una
vez traducido el programa, su ejecución es independiente del compilador, así,
por ejemplo, cualquier interacción con el usuario sólo estará controlada por el
sistema operativo. Como parte importante de este proceso de traducción, el
compilador informa al usuario de la presencia de errores en el programa fuente,
pasándose a crear el programa objeto sólo en el caso de que no hayan sido
detectados errores (por lo general, suele cancelarse la compilación al detectar
un error).
La traducción por un compilador (la compilación) consta
de dos etapas fundamentales, que a veces no están claramente diferenciadas a lo
largo del proceso: la etapa de análisis del programa fuente y la etapa de
síntesis del programa objeto. Cada una de estas etapas conlleva la realización
de varias fases. El análisis del texto fuente implica la realización de un
análisis del léxico, de la sintaxis y de la semántica. La síntesis del programa
objeto conduce a la generación de código y su optimización.
Un intérprete permite que un programa fuente escrito en
un determinado lenguaje vaya traduciéndose y ejecutándose directamente,
sentencia a sentencia, por el ordenador. El intérprete capta una sentencia
fuente, la analiza e interpreta, dando lugar a su ejecución inmediata, no
creándose, por tanto, un archivo o programa objeto almacenaje en memoria masiva
para posteriores ejecuciones. La ejecución del programa estará supervisada por
el intérprete.
En la práctica, el usuario crea un archivo con el
programa fuente. Esto suele realizarse con un editor específico del propio
intérprete del lenguaje. Según se van almacenado las instrucciones simbólicas,
se analizan y se producen los mensajes de error correspondientes; así, el
usuario puede proceder inmediatamente a su corrección. Una vez creado el
archivo fuente, el usuario puede dar la orden de ejecución y el intérprete lo
ejecuta línea a línea. Siempre el análisis antecede inmediatamente a la
ejecución.
Si utilizamos un intérprete para traducir un programa,
cada vez que necesitemos ejecutar el programa se volverá a analizar, ya que, no
se genera un fichero objeto. En cambio, con un compilador, aunque sea más
lenta, la traducción sólo debe realizarse una vez. Además los traductores no
permiten realizar optimizaciones del código (que eliminan órdenes innecesarias
compactando el código) más allá del contexto de cada sentencia del programa.
La principal ventaja de los intérpretes frente a los
compiladores es que resulta más fácil localizar y corregir errores de los
programas, ya que la ejecución de un programa bajo un intérprete puede
interrumpirse en cualquier momento para conocer los valores de las distintas
variables y la instrucción fuente que acaba de ejecutarse. Con un compilador
esto no se puede realizar, salvo que el programa se ejecute bajo el control de
un programa especial de ayuda denominado depurador (“debugger”). Por este
motivo, los intérpretes resultan más pedagógicos para aprender a programar, ya
que el alumno puede detectar y corregir más fácilmente sus errores.
Gracias
ResponderEliminarxD
ResponderEliminarElla no me ama
ResponderEliminar