¿Qué hace?: Toma un código escrito en un lenguaje de alto nivel (como Python, C++ o Java) y lo traduce a código binario o lenguaje máquina, que puede ser ejecutado por la CPU directamente.
-
¿Por qué se usa?:
- Para convertir programas legibles para los humanos en instrucciones que el hardware entienda.
- Optimizar el código para que sea más eficiente.
- El compilador se encarga de evitar que se pueda traducir un programa con código fuente mal escrito y de hacer otras verificaciones previas, de modo que el código máquina tiene ciertas garantías de que cumple cuando menos con los estándares de sintaxis obligatorios de un lenguaje. Gráficamente el proceso sería algo así:
int a = 5; pasaría por el compilador y se traduciría a una
secuencia binaria que el procesador pueda ejecutar.
El archivo ejecutable no es válido para cualquier ordenador. Por ejemplo, si se ha generado el ejecutable para Windows, no podrá utilizarse en Linux. Sin embargo, como hemos dicho C es un lenguaje estandarizado y apto para todas las plataformas. Por tanto sí podemos utilizar el mismo código fuente y pasarlo por distintos compiladores para obtener los ejecutables en distintos sistemas operativos (como Windows, Linux o MacOS).
Hay muchos compiladores C. Casi con total seguridad, ya tienes un compilador C (o más de uno) instalado en tu ordenador, aunque no seas consciente de ello. ¿Por qué? Como hemos dicho C es un lenguaje que ha tenido y tiene gran importancia tanto para sistemas operativos como para software, por ello muchos sistemas operativos incorporan compiladores C.
Además del compilador, para programar en C vamos a usar un entorno de desarrollo o IDE (Integrated Development Environment), que no es otra cosa que un programa para facilitar la escritura de programas y utilización del lenguaje de programación.
¿Como funciona un compilador?
- Analizador Léxico. Lee el programa fuente y agrupa los caracteres generando «tokens» (pares nombre-valor) que introduce en la tabla de símbolos.
- Analizador sintáctico («parsing»). Crea un árbol que describe la estructura gramatical del flujo de tokens.
- Analizador semántico. Usa el árbol sintáctico y la tabla de símbolos para comprobar la consistencia semántica del código fuente con la definición del lenguaje. También recopila información sobre tipos y la guarda, en el árbol sintáctico o en la tabla de símbolos, para usarla mas tarde.
- Generador de código intermediario. El compilador puede construir una o mas representaciones intermedias, que pueden tener distintas formas.
- Optimizador de código. Opcionalmente, se pueden realizar optimización es que buscan mejorar el código intermedio para producir un mejor código destino.
- Generador de código destino. Recibe como entrada una representación intermedia del programa fuente y la asigna al lenguaje destino.
Para resumir, un compilador funciona de la siguiente forma:
- El código fuente se lee en la memoria de la computadora.
- El código fuente se convierte en código objeto o módulo de objeto. Un programa puede tener muchos objetos y bibliotecas que necesitan ser unidas entre sí para crear el ejecutable.
- Se crean los conectores, para enlazar todos los componentes del programa.
- Se reasignan los bloques de memoria dentro del programa de modo que una pieza no sobreponga a otra parte en la memoria.
- Los archivos compilados se graban en el disco u otro tipo de memoria permanente.
- El resultado es un archivo o programa ejecutable.
Tipos y ejemplos de compiladores:
- Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
- Compiladores Optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.
- Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente.
- Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.
- Compiladores JIT (Just in time): forman parte de un interprete y compilan partes del código según se necesitan.
Dev-C++:
Entorno de desarrollo libre basado en el popular Dev-C++. Entre sus características destaca:
- Diseñador de forma de wxWidgets.
- Depurador integrado
- Completado de código
- Resaltado de sintaxis.
- Soporte para CSV
Zinjai:
Desarrollo hecho en castellano para el desarrollo utilizando C++. Entre sus características incluye:- Coloreado de texto.
- Desarrollo rápido de ejercicios sin necesidad de tener que crear proyectos.
- Completo sistema de ayuda, toda en castellano.
- Autocompletado y ayuda de funciones.
- Portabilidad. Puede funcionar tanto bajo en Windows como en Linux.
- Licencia GPL




