Compilador


En informática , un compilador es un programa informático que traduce el código informático escrito en un lenguaje de programación (el idioma de origen ) a otro idioma (el idioma de destino ). El nombre "compilador" se utiliza principalmente para programas que traducen código fuente de un lenguaje de programación de alto nivel a un lenguaje de nivel inferior (por ejemplo , lenguaje ensamblador , código objeto o código de máquina ) para crear un programa ejecutable . [1] [2] : p1 

Hay muchos tipos diferentes de compiladores que producen resultados en diferentes formas útiles. Un compilador cruzado produce código para una CPU o sistema operativo diferente de aquel en el que se ejecuta el compilador cruzado. Un compilador de arranque es a menudo un compilador temporal, que se utiliza para compilar un compilador más permanente o mejor optimizado para un lenguaje.

El software relacionado incluye, un programa que se traduce de un lenguaje de bajo nivel a uno de nivel superior es un descompilador  ; un programa que traduce entre lenguajes de alto nivel, generalmente llamado compilador o transpilador de fuente a fuente . Un reescritor de idiomas suele ser un programa que traduce la forma de expresiones sin un cambio de idioma. Un compilador-compilador es un compilador que produce un compilador (o parte de uno), a menudo de forma genérica y reutilizable para poder producir muchos compiladores diferentes.

Un compilador es probable que realizar algunas o todas de las siguientes operaciones, a menudo llamados fases: preprocesamiento , análisis léxico , análisis sintáctico , análisis semántico ( traducción dirigida por la sintaxis ), conversión de programas de entrada a una representación intermedia , optimización de código y generación de código . Los compiladores generalmente implementan estas fases como componentes modulares, promoviendo un diseño eficiente y la corrección de las transformaciones.de la entrada de origen a la salida de destino. Las fallas del programa causadas por el comportamiento incorrecto del compilador pueden ser muy difíciles de rastrear y solucionar; por lo tanto, los implementadores del compilador invierten un esfuerzo significativo para asegurar la corrección del compilador . [3]

Los compiladores no son el único procesador de lenguaje utilizado para transformar programas fuente. Un intérprete es un software de computadora que transforma y luego ejecuta las operaciones indicadas. [2] : p2  El proceso de traducción influye en el diseño de los lenguajes informáticos, lo que conduce a una preferencia de compilación o interpretación. En teoría, un lenguaje de programación puede tener tanto un compilador como un intérprete. En la práctica, los lenguajes de programación tienden a asociarse con uno solo (un compilador o un intérprete).

Los conceptos de computación teórica desarrollados por científicos, matemáticos e ingenieros formaron la base del desarrollo de la computación digital moderna durante la Segunda Guerra Mundial. Los lenguajes binarios primitivos evolucionaron porque los dispositivos digitales solo entienden unos y ceros y los patrones de circuito en la arquitectura de la máquina subyacente. A finales de la década de 1940, se crearon lenguajes ensambladores para ofrecer una abstracción más funcional de las arquitecturas informáticas. Memoria limitadaLa capacidad de las primeras computadoras generó importantes desafíos técnicos cuando se diseñaron los primeros compiladores. Por lo tanto, el proceso de compilación debía dividirse en varios programas pequeños. Los programas de front-end producen los productos de análisis que utilizan los programas de back-end para generar el código de destino. A medida que la tecnología informática proporcionaba más recursos, los diseños de los compiladores podían adaptarse mejor al proceso de compilación.


Un diagrama del funcionamiento de un compilador típico de múltiples idiomas y múltiples destinos
Diseño del compilador
Lexer y analizador ejemplo para C . A partir de la secuencia de caracteres " if(net>0.0)total+=net*(1.0+tax/100.0);", el escáner compone una secuencia de tokens y categoriza cada uno de ellos, por ejemplo, como identificador , palabra reservada , literal numérico u operador . El analizador transforma esta última secuencia en un árbol de sintaxis , que luego es tratado por las fases restantes del compilador. El analizador y el analizador manejan las partes regulares y libres de contexto de la gramática para C , respectivamente.