¿Por qué las computadoras pueden reconocer idiomas?
Cada computadora con una arquitectura tiene un conjunto de instrucciones correspondiente, que es un conjunto de instrucciones binarias (instrucciones de la CPU). Son estas instrucciones las que la computadora puede ejecutar directamente. Para que sea más fácil de recordar, las personas usan código ensamblador para recordar y corresponder uno a uno.
Un compilador de propósito general es un programa que compila un lenguaje en instrucciones de la CPU que la computadora puede ejecutar directamente.
El flujo de trabajo principal de un compilador moderno es el siguiente:
Código fuente) → preprocesador) → compilador) → ensamblador) → código de destino) → enlazador) → documento ejecutable].
Principio de operación
La traducción es del código fuente (generalmente un lenguaje de alto nivel) al código de destino (generalmente un lenguaje de bajo nivel o lenguaje de máquina) que puede ser ejecutado directamente por una computadora o máquina virtual. Pero también hay compiladores desde lenguajes de bajo nivel hasta lenguajes de alto nivel. Los compiladores que se utilizan para regenerar código de lenguaje de alto nivel a partir de código de lenguaje de bajo nivel generado por lenguajes de alto nivel también se denominan descompiladores. También hay compiladores que generan un lenguaje de alto nivel a partir de otro, o que generan código intermedio que requiere procesamiento posterior (también llamado cascada).
La salida típica del compilador es un archivo objeto que consta de código de máquina, que contiene el nombre y la dirección del punto de entrada y llamadas externas (llamadas a funciones que no están en este archivo objeto). No es necesario que el mismo compilador genere un conjunto de archivos objeto, pero los compiladores utilizados deben usar el mismo formato de salida y pueden vincularse entre sí para producir un programa ejecutable que el usuario pueda ejecutar directamente.
La generación de código máquina es el proceso de convertir código intermedio optimizado en instrucciones de máquina. Los compiladores modernos adoptan principalmente la estrategia de generar código ensamblador en lugar de generar directamente código objeto binario. Incluso durante la fase de generación de código, los compiladores avanzados todavía realizan mucho trabajo de análisis, optimización y transformación. Por ejemplo, cómo asignar registros, cómo elegir la selección de instrucciones de máquina adecuada, cómo combinar varios códigos en una oración, etc.
Cómo funciona el compilador:
Análisis léxico, análisis de sintaxis, generación de código intermedio, optimización y generación de código de destino.