3.3 Traducción de un programa: compilación, enlace de un programa, errores en tiempo de compilación

El proceso de traducción de un programa fuente escrito en un lenguaje de alto nivel a un lenguaje má-
quina comprensible por la computadora, se realiza mediante programas llamados “traductores”. Los 
traductores de lenguaje son programas que traducen a su vez los programas fuente escritos en lenguajes de alto nivel a código máquina. Los traductores se dividen en compiladores e interpretes.
Intérpretes
Un intérprete es un traductor que toma un programa fuente, lo traduce y, a continuación, lo ejecuta. Los 
programas intérpretes clásicos como BASIC, prácticamente ya no se utilizan, más que en circunstancias 
especiales. Sin embargo, está muy extendida la versión interpretada del lenguaje Smalltalk, un lenguaje 
orientado a objetos puro. El sistema de traducción consiste en: traducir la primera sentencia del programa 
a lenguaje máquina, se detiene la traducción, se ejecuta la sentencia; a continuación, se traduce la  siguiente 
sentencia, se detiene la traducción, se ejecuta la sentencia y así sucesivamente hasta terminar el programa.


Compiladores
Un compilador es un programa que traduce los programas fuente escritos en lenguaje de alto nivel a 
lenguaje máquina. La traducción del programa completo se realiza en una sola operación denominada 
compilación del programa; es decir, se traducen todas las instrucciones del programa en un solo bloque. 
El programa compilado y depurado (eliminados los errores del código fuente) se denomina programa 
ejecutable porque ya se puede ejecutar directamente y cuantas veces se desee; sólo deberá volver a compilarse de nuevo en el caso de que se modifique alguna instrucción del programa. De este modo el programa ejecutable no necesita del compilador para su ejecución. Los lenguajes compiladores típicos más 
utilizados son: C, C++, Java, C#, Pascal, FORTRAN y COBOL.

La compilación y sus fases

La compilación es el proceso de traducción de programas fuente a programas objeto. El programa objeto obtenido de la compilación ha sido traducido normalmente a código máquina.
Para conseguir el programa máquina real se debe utilizar un programa llamado montador o enlazador
(linker). El proceso de montaje conduce a un programa en lenguaje máquina directamente ejecutable 
(Figura 1.23).
El proceso de ejecución de un programa escrito en un lenguaje de programación y mediante un compilador suele tener los siguientes pasos:
1. Escritura del programa fuente con un editor (programa que permite a una computadora actuar 
de modo similar a una máquina de escribir electrónica) y guardarlo en un dispositivo de almacenamiento (por ejemplo, un disco).
2. Introducir el programa fuente en memoria.
3.  Compilar el programa con el compilador C.
4.  Verificar y corregir errores de compilación (listado de errores).
5. Obtención del programa objeto.
6. El enlazador (linker) obtiene el programa ejecutable.
7. Se ejecuta el programa y, si no existen errores, se tendrá la salida del programa.

Si el programa fuente es sintácticamente correcto, el compilador generará el 
código objeto, en caso contrario mostrará una lista con los errores encontrados, 
no generándose ningún programa objeto, para que procedamos a su depuración
Los compiladores emiten mensajes de error o de  advertencia durante las 
fases de compilación, de enlace o de ejecución de un programa: 
• Los errores en tiempo de compilación son los que se producen antes de la 
ejecución del programa, durante el proceso de compilación del programa. 
• Los errores en tiempo de ejecución son los que se producen durante la 
ejecución del programa. Son los más difíciles de encontrar, no son 
detectados por el compilador, ya que son errores de lógica, no de sintaxis. 
Aunque al compilar un programa no de errores, el programa puede funcionar 
incorrectamente y/o a dar errores durante su ejecución. Por ejemplo: 
• Un programa puede producir resultados erróneos, al equivocarnos 
(errores lógicos) al programar el algoritmo (sumar en vez de restar, etc.). 
• Un programa puede interrumpirse bruscamente, por ejemplo si tenemos 
que hacer una división y el divisor es cero, etc. 
Los errores que se pueden producir en la fase de compilación son: 
− Errores fatales: Son raros. Indican errores internos del compilador. 
Cuando ocurren la compilación se detiene inmediatamente. 
− Errores de sintaxis: Son los errores típicos de sintaxis. No detienen la 
compilación 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 líneas de código 
sospechosas que a pesar de no infringir ninguna regla sintáctica, el 
compilador las encuentra susceptibles de provocar un error. Cuando se 
detecta un warning la compilación  no se detiene. Si en un programa 
fuente sólo se detectan warnings sí que se podrá obtener un programa 
objeto, que tras el linkado dará lugar a un programa ejecutable.

biblografia  fundamento de programacion. Luis Joyanes
Comments