Compilador (programa informático)
Un compilador es software que traduce código fuente de un lenguaje de programación a otro (a menudo código máquina o una forma intermedia). Este artículo explica sus partes, historia, tipos y usos.
Visión general
Un compilador es un programa informático que convierte código fuente escrito en un lenguaje de programación en código de otro lenguaje. El lenguaje original se llama lenguaje fuente y el resultado es el lenguaje destino. En muchas situaciones comunes, el destino es código máquina que un procesador puede ejecutar directamente, o bien una forma intermedia como bytecode que se ejecuta en una máquina virtual. Para una introducción breve, véase visión general.
Galería de imágenes
1 ImagenPartes principales y fases de procesamiento
La mayoría de los compiladores se organizan en etapas de front-end y back-end, y realizan varias fases distintas. Estas fases transforman y verifican progresivamente el texto del programa, desde los caracteres en bruto hasta las instrucciones ejecutables:
- Análisis léxico — agrupa los caracteres en tokens, como identificadores, literales y operadores.
- Análisis sintáctico (parsing) — construye una estructura en forma de árbol que representa la gramática del programa.
- Análisis semántico — comprueba tipos, uso de símbolos y otras reglas del lenguaje, y anota el árbol con su significado.
- Representación intermedia y optimización — convierte el programa en una forma adecuada para su transformación e intenta mejorar el rendimiento o el tamaño.
- Generación de código — produce texto en el lenguaje destino o instrucciones de máquina.
- Enlazado y ensamblado — combina varias unidades compiladas y resuelve referencias para crear un ejecutable final.
Herramientas especializadas, como los generadores de analizadores sintácticos y los sistemas compilador-compilador, ayudan a construir front-ends para nuevos lenguajes.
Historia y desarrollo
Los compiladores surgieron cuando los programadores buscaron escribir en lenguajes de nivel más alto en lugar de usar instrucciones de máquina en bruto. Los primeros lenguajes de alto nivel y sus compiladores hicieron práctico expresar algoritmos con más claridad y dirigirse a distinto hardware mediante una salida traducida. Con el tiempo, el campo incorporó muchas técnicas —desde gramáticas formales y construcción automática de analizadores sintácticos hasta estrategias sofisticadas de optimización—, lo que permitió a los compiladores producir código muy eficiente y dar soporte a sistemas de software grandes y complejos. Para más contexto, consulte resúmenes históricos.
Tipos y distinciones notables
Los compiladores varían según sus objetivos y salidas. Entre las distinciones más comunes se incluyen:
- Compiladores ahead-of-time (AOT), que traducen el código fuente al destino antes de la ejecución.
- Compiladores just-in-time (JIT), que compilan el código en tiempo de ejecución para aprovechar las condiciones reales de ejecución.
- Compiladores cruzados, que producen código ejecutable para una máquina o sistema operativo distinto de aquel en el que se ejecutan.
- Transpiladores, que traducen entre lenguajes de alto nivel en lugar de hacerlo a código máquina.
- Decompiladores, que intentan recuperar código fuente legible a partir de binarios compilados.
Si una herramienta se llama compilador o intérprete depende de si produce un programa de salida independiente o ejecuta el código directamente; muchos sistemas modernos combinan ambos enfoques (por ejemplo, compilar a bytecode e interpretar ese bytecode o recompilarlo con JIT).
Usos, ejemplos e importancia
Los compiladores son centrales en el desarrollo de software. Permiten la portabilidad al dirigirse a distintos procesadores y sistemas operativos, mejoran el rendimiento mediante la optimización, facilitan la comprobación y el análisis estáticos de errores, y hacen viables nuevos paradigmas de programación. Entre los lenguajes compilados más conocidos hay lenguajes orientados a sistemas y muchos lenguajes de propósito general; sus compiladores traducen programas legibles para humanos en operaciones eficientes a nivel de máquina o en bytecode portátil. Para tutoriales prácticos y cadenas de herramientas, véase recursos para desarrolladores y las implementaciones de compilación cruzada para sistemas integrados en guías de plataforma.
Más allá de producir ejecutables, la infraestructura moderna de compiladores suele proporcionar bibliotecas y servicios usados por entornos de desarrollo integrados (IDE), analizadores estáticos y herramientas de refactorización. Estas herramientas compartidas amplían la productividad y ayudan a mantener la calidad del software a gran escala.
Artículos relacionados
Autor
AlegsaOnline.com Compilador (programa informático) Leandro Alegsa
URL: https://es.alegsaonline.com/art/22240