Un compilador es un tipo de programa de ordenador especial que traduce un archivo de texto que cualquier puede leer, a un formato que un ordenador pueden entender más fácilmente. A su nivel más básico, un ordenador solo puede entender dos cosas, que son ceros y unos. A este nivel, un ser humano operará muy despacio y se encontrará con muchos problemas para comprender largas cadenas de ceros y unos. De hecho, llegará un momento en que no sepa ni lo que está leyendo. Un compilador es un programa que soluciona este problema.
Al principio, los compiladores eran simples programas que solo podía traducir símbolos a bits, que son los unos y ceros que un ordenador entendía. El procedimiento de estos programas también era muy sencillo, donde una serie de pasos incluía traducir ciertas partes a mano, lo cual consumía mucho tiempo.
Por este motivo, muchas partes de estas tareas fueron automatizadas o programadas, y el primero compilador fue creado. Este software compilaba los pasos necesarios para ejecutar un programa paso a paso.
Estos simples compiladores fueron usados para escribir un compilador más sofisticado. Con una versión más nueva, se podía añadir más reglas al programa para permitir una estructura de lenguaje más natural para que el programador pudiera trabajar.
Esto hizo que escribir programas fuera más fácil también y permitía a más gente trabar con ello. Según más programadores comenzaron a usar este sistema, se crearon compiladores mejores. De esta manera, estos programas continúan evolucionado, mejorando y siendo más fáciles de usar.
Los compiladores también pueden ser especializados. Ciertos lenguajes son mejores para ciertas tareas, por lo que se desarrollaron para ciertas cosas específicas al igual que lenguajes. Algunos pueden ser multifase. Una primera fase podría hacer la traducción de un archivo en texto claro a un archivo entendible para los ordenadores. Una segunda o tercera fase podría crear un archivo ejecutable.
La fase intermedia en un compilador multifase se suele llamar seudo código ya que no puede ser usado por el ordenador. Esté seudo código está muy estructurado (como el programa de un ordenador). Como se ha dicho, la fase final podría ser un ejecutable, que es el que sirve para poner en marcha el programa. Hacerlo de esta manera hace el trabajo más fácil para los compiladores más sofisticados ya que cada parte es diferente. También hace que sea más fácil para el ordenador apuntar a partes donde puede haber tenido problemas.
Los errores que pueden tener uno de estos programas se reflejan en los llamados errores de sintaxis. Los errores que hay en la manera en que funciona el programa se llaman errores lógicos, los cuales son más difíciles de localizar. Los errores de sintaxis son como errores de ortografía mientra que los lógicos son más como errores gramaticales.
Por otro lado tenemos los compiladores, los cuales permiten que un fichero de texto con instrucciones para un diseño de ordenador y fabricante específico, sea compilado para funcionar en un ordenador diferente por un fabricante también diferente. Por ejemplo, un programa que ha sido escrito para funcionar en un equipo de Microsoft, puede ser compilado de forma cruzada para funcionar en un Mac de Apple.
Sin embargo, esto no suele funcionar muy bien, incluso si ambos equipos se parecen mucho. Lo cierto es que una compilación cruzada es diferente de emular un ordenador para que parezca otro. Si un ordenador está emulando a otro, está pretendiendo ser realmente el otro. La emulación suele ser más lento que la complicación cruzada.