Anda di halaman 1dari 6

3.3.

TRADUCCION DE UN PROGRAMA

Un compilador es un programa informtico que traduce un programa escrito en un
lenguaje de programacin a otro lenguaje de programacin, generando un programa
equivalente que la mquina ser capaz de interpretar. Usualmente el segundo lenguaje es
lenguaje de mquina, pero tambin puede ser un cdigo intermedio (bytecode), o
simplemente texto. Este proceso de traduccin se conoce como compilacin.
1

Un compilador es un programa que permite traducir el cdigo fuente de un programa en
lenguaje de alto nivel, a otro lenguaje de nivel inferior (tpicamente lenguaje de mquina).
De esta manera un programador puede disear un programa en un lenguaje mucho ms
cercano a cmo piensa un ser humano, para luego compilarlo a un programa ms
manejable por una computadora.
Partes de un compilador
La construccin de un compilador involucra la divisin del proceso en una serie de fases
que variar con su complejidad. Generalmente estas fases se agrupan en dos tareas: el
anlisis del programa fuente y la sntesis del programa objeto.
Anlisis: Se trata de la comprobacin de la correccin del programa fuente, e
incluye las fases correspondientes al Anlisis Lxico (que consiste en la
descomposicin del programa fuente en componentes lxicos), Anlisis Sintctico
(agrupacin de los componentes lxicos en frases gramaticales ) y Anlisis
Semntico (comprobacin de la validez semntica de las sentencias aceptadas en
la fase de Anlisis Sintctico).
Sntesis: Su objetivo es la generacin de la salida expresada en el lenguaje objeto y
suele estar formado por una o varias combinaciones de fases de Generacin de
Cdigo (normalmente se trata de cdigo intermedio o de cdigo objeto) y de
Optimizacin de Cdigo (en las que se busca obtener un cdigo lo ms eficiente
posible).
Alternativamente, las fases descritas para las tareas de anlisis y sntesis se pueden
agrupar en Front-end y Back-end:
Front-end: es la parte que analiza el cdigo fuente, comprueba su validez, genera
el rbol de derivacin y rellena los valores de la tabla de smbolos. Esta parte suele
ser independiente de la plataforma o sistema para el cual se vaya a compilar, y
est compuesta por las fases comprendidas entre el Anlisis Lxico y la Generacin
de Cdigo Intermedio.
Back-end: es la parte que genera el cdigo mquina, especfico de una plataforma,
a partir de los resultados de la fase de anlisis, realizada por el Front End.
Esta divisin permite que el mismo Back End se utilice para generar el cdigo mquina de
varios lenguajes de programacin distintos y que el mismo Front End que sirve para
analizar el cdigo fuente de un lenguaje de programacin concreto sirva para generar
cdigo mquina en varias plataformas distintas. Suele incluir la generacin y optimizacin
del cdigo dependiente de la mquina.
El cdigo que genera el Back End normalmente no se puede ejecutar directamente, sino
que necesita ser enlazado por un programa enlazador (linker).
Tipos de compiladores
Esta taxonoma de los tipos de compiladores no es excluyente, por lo que puede haber
compiladores que se adscriban a varias categoras:
Compiladores cruzados: generan cdigo para un sistema distinto del que estn
funcionando.
Compiladores optimizadores: realizan cambios en el cdigo para mejorar su
eficiencia, pero manteniendo la funcionalidad del programa original.
Compiladores de una sola pasada: generan el cdigo mquina a partir de una
nica lectura del cdigo fuente.
Compiladores de varias pasadas: necesitan leer el cdigo fuente varias veces antes
de poder producir el cdigo mquina.
Compiladores JIT (Just In Time): forman parte de un intrprete y compilan partes
del cdigo segn se necesitan.
Proceso de compilacin
Es el proceso por el cual se traducen las instrucciones escritas en un determinado lenguaje
de programacin a lenguaje mquina. Adems de un traductor, se pueden necesitar otros
programas para crear un programa objeto ejecutable. Un programa fuente se puede
dividir en mdulos almacenados en archivos distintos. La tarea de reunir el programa
fuente a menudo se confa a un programa distinto, llamado preprocesador. El
preprocesador tambin puede expandir abreviaturas, llamadas a macros, a proposiciones
del lenguaje fuente.
Normalmente la creacin de un programa ejecutable (un tpico.exe para Microsoft
Windows o DOS) conlleva dos pasos. El primer paso se llama compilacin (propiamente
dicho) y traduce el cdigo fuente escrito en un lenguaje de programacin almacenado en
un archivo a cdigo en bajo nivel (normalmente en cdigo objeto, no directamente a
lenguaje mquina). El segundo paso se llama enlazado en el cual se enlaza el cdigo de
bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y
se aade el cdigo de las funciones que hay en las bibliotecas del compilador para que el
ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo as
finalmente el cdigo objeto a cdigo mquina, y generando un mdulo ejecutable.
Etapas del Proceso de Compilacin
El proceso de traduccin se compone internamente de varias etapas o fases, que realizan
distintas operaciones lgicas. Es til pensar en estas fases como en piezas separadas
dentro del traductor, y pueden en realidad escribirse como operaciones codificadas
separadamente aunque en la prctica a menudo se integren juntas.
Fase de anlisis
Anlisis lxico
Artculo principal: Analizador lxico
El anlisis lxico constituye la primera fase, aqu se lee el programa fuente de izquierda a
derecha y se agrupa en componentes lxicos (tokens), que son secuencias de caracteres
que tienen un significado. Adems, todos los espacios en blanco, lneas en blanco,
comentarios y dems informacin innecesaria se elimina del programa fuente. Tambin se
comprueba que los smbolos del lenguaje (palabras clave, operadores,...) se han escrito
correctamente.
Como la tarea que realiza el analizador lxico es un caso especial de coincidencia de
patrones, se necesitan los mtodos de especificacin y reconocimiento de patrones, se
usan principalmente los autmatas finitos que acepten expresiones regulares. Sin
embargo, un analizador lxico tambin es la parte del traductor que maneja la entrada del
cdigo fuente, y puesto que esta entrada a menudo involucra un importante gasto de
tiempo, el analizador lxico debe funcionar de manera tan eficiente como sea posible.
Anlisis sintctico
Artculo principal: Analizador sintctico
En esta fase los caracteres o componentes lxicos se agrupan jerrquicamente en frases
gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo
obtenido de la fase anterior es sintcticamente correcto (obedece a la gramtica del
lenguaje). Por lo general, las frases gramaticales del programa fuente se representan
mediante un rbol de anlisis sintctico.
La estructura jerrquica de un programa normalmente se expresa utilizando reglas
recursivas. Por ejemplo, se pueden dar las siguientes reglas como parte de la definicin de
expresiones:
1. Cualquier identificador es una expresin.
2. Cualquier nmero es una expresin.
3. Si expresin
1
y expresin
2
son expresiones, entonces tambin lo son:
o expresin
1
+ expresin
2

o expresin
1
* expresin
2

o ( expresin
1
)
Las reglas 1 y 2 son reglas bsicas (no recursivas), en tanto que la regla 3 define
expresiones en funcin de operadores aplicados a otras expresiones.
La divisin entre anlisis lxico y anlisis sintctico es algo arbitraria. Un factor para
determinar la divisin es si una construccin del lenguaje fuente es inherentemente
recursiva o no. Las construcciones lxicas no requieren recursin, mientras que las
construcciones sintcticas suelen requerirla. Por ejemplo, no podemos emparejar de
manera apropiada los parntesis de las expresiones, o las palabras begin y end en
proposiciones sin imponer alguna clase de estructura jerrquica o de anidamiento a la
entrada.
Anlisis semntico
La fase de anlisis semntico revisa el programa fuente para tratar de encontrar errores
semnticos y rene la informacin sobre los tipos para la fase posterior de generacin de
cdigo. En ella se utiliza la estructura jerrquica determinada por la fase de anlisis
sintctico para identificar los operadores y operandos de expresiones y proposiciones.
Fase de sntesis
Consiste en generar el cdigo objeto equivalente al programa fuente. Slo se genera
cdigo objeto cuando el programa fuente est libre de errores de anlisis, lo cual no
quiere decir que el programa se ejecute correctamente, ya que un programa puede tener
errores de concepto o expresiones mal calculadas. Por lo general el cdigo objeto es
cdigo de mquina relocalizable o cdigo ensamblador.
Generacin de cdigo intermedio
Despus de los anlisis sintctico y semntico, algunos compiladores generan una
representacin intermedia explcita del programa fuente. Se puede considerar esta
representacin intermedia como un programa para una mquina abstracta. Esta
representacin intermedia debe tener dos propiedades importantes; debe ser fcil de
producir y fcil de traducir al programa objeto.
Optimizacin de cdigo
La fase de optimizacin de cdigo consiste en mejorar el cdigo intermedio, de modo que
resulte un cdigo mquina ms rpido de ejecutar. Esta fase de la etapa de sntesis es
posible sobre todo si el traductor es un compilador (difcilmente un intrprete puede
optimizar el cdigo objeto).
EL ENLACE DE UN PROGRAMA SE DA DE LA SIGUIENTE MANERA:
FUENTE: http://www.uhu.es/04004/material/Transparencias3.pdf
Fase de compilacin y linkado (link, montado o enlace)
Un programa escrito en un lenguaje de alto nivel, no puede ser ejecutado directamente
por un ordenador, sino que debe ser traducido a lenguaje mquina.
Las etapas por las que debe pasar un programa escrito en un lenguaje de programacin,
hasta poder ser ejecutable son:
Programa fuente: Programa escrito en un lenguaje de
alto nivel (texto ordinario que contiene las sentencias
del programa en un lenguaje de programacin).
Necesita ser traducido a cdigo mquina para poder
ser ejecutado.
Compilador: Programa encargado de traducir los
programas fuentes escritos en un lenguaje de alto
nivel a lenguaje mquina y de comprobar que las
llamadas a las funciones de librera se realizan
correctamente.
Programa (o cdigo) objeto: Es el programa fuente
traducido (por el compilador) a cdigo mquina. An
no es directamente ejecutable.
Programa Ejecutable: Traduccin completa a cdigo
mquina, realizada por el enlazador, del programa
fuente y que ya es directamente ejecutable.
Montador o enlazador (Linker ): Es el programa
encargado de insertar al programa objeto el cdigo
mquina de las funciones de las libreras (archivos de
biblioteca) usadas en el programa y realizar el proceso de montaje, que producir un
programa ejecutable .exe. Las libreras son una coleccin de cdigo (funciones) ya
programado y traducido a cdigo mquina, listo para utilizar en un programa y que facilita
la labor del programador.

Errores en tiempo de compilacin

Si el programa fuente es sintcticamente correcto, el compilador generar el cdigo
objeto, en caso contrario mostrar una lista con los errores encontrados, no generndose
ningn programa objeto, para que procedamos a su depuracin.
Los compiladores emiten mensajes de error o de advertencia durante las fases de
compilacin, de enlace o de ejecucin de un programa:
o Los errores en tiempo de compilacin son los que se producen
antes de la ejecucin del programa, durante el proceso de
compilacin del programa.

Los errores que se pueden producir en la fase de compilacin son:
Errores fatales: Son raros. Indican errores internos del compilador. Cuando ocurre la
compilacin se detiene inmediatamente.
Errores de sintaxis: Son los errores tpicos de sintaxis. No detienen la compilacin sino
que al finalizar sta se mostrar la lista con todos los errores encontrados. Algunos errores
suelen ser consecuencia de otros cometidos con anterioridad. Con este tipo de errores no
se puede obtener un programa objeto y por lo tanto tampoco el ejecutable.
Advertencias o avisos (warnings): Indican que hay lneas de cdigo sospechosas que a
pesar de no infringir ninguna regla sintctica, el compilador las encuentra susceptibles de
provocar un error. Cuando se detecta un warning la compilacin no se detiene. Si en un
programa fuente slo se detectan warnings, se podr obtener un programa objeto, que
tras el linkado dar lugar a un programa ejecutable.