Un compilador es un tipo especial de programa de computadora que traduce un archivo de texto legible por humanos a una forma que la computadora puede entender más fácilmente. En su nivel más básico, una computadora solo puede entender dos cosas, un 1 y un 0. En este nivel, un humano operará muy lentamente y encontrará incomprensible la información contenida en la larga cadena de unos y ceros. Un compilador es un programa de computadora que cierra esta brecha.
Al principio, los compiladores eran programas muy simples que solo podían traducir símbolos en bits, los 1 y 0, según entendía la computadora. Los programas también eran muy simples, compuestos por una serie de pasos que originalmente se traducían a mano en datos que la computadora podía entender. Esta fue una tarea que consumió mucho tiempo, por lo que partes de esta tarea se automatizaron o programaron y se escribió el primer compilador. Este programa reunió o compiló los pasos necesarios para ejecutar el programa paso a paso.
Estos simples compiladores se utilizaron para escribir un compilador más sofisticado. Con la versión más reciente, se podrían agregar más reglas al programa compilador para permitir una estructura de lenguaje más natural para que el programador humano pueda operar. Esto facilitó la escritura de programas y permitió que más personas comenzaran a escribir programas. A medida que más personas comenzaron a escribir programas, se ofrecieron más ideas sobre programas de escritura y se utilizaron para hacer compiladores más sofisticados. De esta manera, los programas de compilación continúan evolucionando, mejorando y volviéndose más fáciles de usar.
Los programas del compilador también pueden especializarse. Ciertas estructuras de lenguaje son más adecuadas para una tarea en particular que otras, por lo que se desarrollaron compiladores específicos para tareas o lenguajes específicos. Algunos compiladores son de varias etapas o de varias pasadas. Un primer paso podría tomar un lenguaje muy natural y acercarlo a un lenguaje comprensible por computadora. Una segunda o incluso una tercera pasada podría llevarlo a la etapa final, el archivo ejecutable.
La salida intermedia en un compilador de varias etapas se suele denominar pseudocódigo, ya que la computadora no la puede utilizar. El pseudocódigo es muy estructurado, como un programa de computadora, no fluye libremente y es prolijo como un lenguaje más natural. La salida final se llama archivo ejecutable, ya que es lo que realmente ejecuta o ejecuta la computadora. Dividir la tarea de esta manera facilitó la escritura de compiladores más sofisticados, ya que cada subtarea es diferente. También hizo que fuera más fácil para la computadora señalar dónde tenía problemas para comprender lo que se le pedía que hiciera.
Los errores que limitan la comprensión de un programa por parte del compilador se denominan errores de sintaxis. Los errores en la forma en que funciona el programa se denominan errores lógicos. Los errores lógicos son mucho más difíciles de detectar y corregir. Los errores de sintaxis son como errores ortográficos, mientras que los errores lógicos son un poco más como errores gramaticales.
También se han desarrollado programas de compilación cruzada. Un compilador cruzado permite que un conjunto de instrucciones de archivo de texto escrito para una computadora diseñada por un fabricante específico sea compilado y ejecutado para una computadora diferente por un fabricante diferente. Por ejemplo, un programa que se escribió para ejecutarse en una computadora Intel a veces se puede compilar de forma cruzada para ejecutar una en una computadora desarrollada por Motorola. Con frecuencia, esto no funciona muy bien. En el nivel en el que operan los programas de computadora, el hardware de la computadora puede verse muy diferente, incluso si pueden parecerse a usted.
La compilación cruzada es diferente a hacer que una computadora emule a otra computadora. Si una computadora está emulando una computadora diferente, se hace pasar por esa otra computadora. La emulación suele ser más lenta que la compilación cruzada, ya que dos programas se ejecutan a la vez, el programa que pretende ser la otra computadora y el programa que se está ejecutando. Sin embargo, para que la compilación cruzada funcione, necesita tanto el texto en lenguaje natural original que describe el programa como una computadora que sea lo suficientemente similar a la computadora original en la que el programa pueda funcionar para ejecutarse en una computadora diferente. Esto no siempre es posible, por lo que se utilizan ambas técnicas.