Un compilador es un programa que traduce el código fuente de otro programa de un lenguaje de programación a código ejecutable.
El código fuente está típicamente en un lenguaje de programación de alto nivel (por ejemplo, Pascal, C, C ++, Java, Perl, C #, etc.). El código ejecutable puede ser una secuencia de instrucciones de máquina que la CPU puede ejecutar directamente, o puede ser una representación intermedia que es interpretada por una máquina virtual (por ejemplo, código de bytes Java).
En resumen, un compilador convierte un programa de un formato legible por humanos a un formato legible por máquina.
En cuanto a cómo funciona un compilador, eso es realmente complicado. Hay libros y cursos universitarios sobre el tema. Intentaré describir brevemente las etapas principales del proceso, pero esta será una visión general muy superficial.
- Lexing: divide el texto del programa en "tokens". Los tokens son las "palabras" del lenguaje de programación, como identificadores (palabras clave, nombres de variables, nombres de funciones, etc.) u operadores (=, *, &, etc.).
- Análisis: convierte la secuencia de tokens en un árbol de análisis, que es una estructura de datos que representa varias construcciones de lenguaje: declaraciones de tipo, declaraciones de variables, definiciones de funciones, bucles, condicionales, expresiones, etc.
- Optimización: evalúe expresiones constantes, optimice las variables no utilizadas o el código inalcanzable, desenrolle los bucles si es posible, etc.
- Traduzca el árbol de análisis a las instrucciones de la máquina (o el código de bytes JVM).
Nuevamente, enfatizo que esta es una descripción muy breve. Los compiladores modernos son muy inteligentes y, en consecuencia, muy complicados.