¿Cómo funciona un compilador? [cerrado]

15

Nota: Me sorprende que esto no se haya preguntado anteriormente y, si lo ha hecho, no pude encontrarlo en una búsqueda.

He estado en toneladas de sitios web, he leído toneladas de artículos y he escuchado toneladas de explicaciones. La mayoría de ellos eran buenos, pero todos eran demasiado amplios o demasiado complicados o simplemente malos. Entonces mi pregunta es, ¿cómo funciona un compilador?

Si esta es una pregunta amplia y difícil, por favor dígamelo. Pero si no, por favor responde la pregunta.

    
pregunta Dynamic 08.11.2011 - 18:44

2 respuestas

21

Un compilador es un programa que traduce el código fuente de otro programa de un lenguaje de programación a un código ejecutable.

El código fuente suele estar 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 la máquina que puede ser ejecutada directamente por la CPU, o puede ser una representación intermedia interpretada por una máquina virtual (por ejemplo, el código de bytes de 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é resumir brevemente las etapas principales del proceso, pero este será un resumen muy breve.

  1. Lexing: divida 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 (=, *, & amp ;, etc.).
  2. 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.
  3. Optimización: evalúe expresiones constantes, optimice las variables no utilizadas o el código inalcanzable, desenrolle los bucles si es posible, etc.
  4. Convierta el árbol de análisis en instrucciones de la máquina (o código de byte JVM).

Una vez más, recalco que esta es una descripción muy breve. Los compiladores modernos son muy inteligentes y, en consecuencia, muy complicados.

    
respondido por el Dima 08.11.2011 - 18:47
5

Un compilador es un programa informático (o conjunto de instrucciones) que transforma el código fuente escrito en un lenguaje de programación (el idioma fuente) en otro lenguaje informático (el idioma objetivo, que a menudo tiene una forma binaria conocida como código objeto). La razón más común para querer transformar el código fuente es crear un programa ejecutable.

Los compiladores unen los programas de origen en lenguajes de alto nivel con el hardware subyacente. Un compilador requiere:

  1. Determinar la corrección de la sintaxis de los programas
  2. Generar código de objeto correcto y eficiente
  3. organización en tiempo de ejecución
  4. Dar formato a la salida de acuerdo con las convenciones del ensamblador y / o del vinculador.
respondido por el Mario Stylianou 08.11.2011 - 18:49

Lea otras preguntas en las etiquetas