Compilador

¿Qué es?

Un compilador es un programa que
convierte o traduce el código fuente de un
programa hecho en lenguaje de alto nivel,
a un lenguaje de bajo nivel.

Partes de un compilador

El FrontEnd

Es la parte del compilador que interactúa
con el usuario. Se encarga de realizar el
análisis del código fuente a compilar y
verifica que este sea válido, así como
también, genera el árbol de derivación y
rellena los valores de la tabla de
símbolos.

El BackEnd

Esta parte del compilador es la encargada
de generar el código en formato de
máquina, a partir del trabajo hecho por el
Front End.

Tipos de compiladores

Compiladores cruzados

generan código para un sistema distinto del
que están funcionando.

Compiladores optimizadores

realizan cambios en el código para mejorar
su eficiencia, pero manteniendo la
funcionalidad del programa original.

Compiladores de una sola pasada

generan el código máquina a partir de una
única lectura del código fuente.

Compiladores de varias pasadas

necesitan leer el código fuente varias veces
antes de poder producir el código máquina.

Compiladores JIT (Just In Time)

forman parte de un intérprete y compilan
partes del código según se necesitan.

Compiladores incrementales

Generan un código objeto, instrucción por
instrucción cuando el usuario teclea cada
orden individual.

Compilador con montador

Compila distintos módulos de forma
independiente y después es capaz de
aplazarlos.

Auto compilador

Compilador que está escrito en el mismo
lenguaje que va a compilar.

Meta compilador

Es programa que recibe como entrada las
especificaciones del lenguaje para el que
se desea obtener un compilador y genera
como salida el compilador para ese
lenguaje.

Descompilador

Es un programa que acepta como entrada
código maquina y la traduce a un lenguaje
de alto nivel realizando el proceso inverso
a la compilación.

Estructura de un compilador

Preprocesador

Es el encargado de transformar el código
fuente de entrada original en el código
fuente puro.

Compilacion

En esta etapa se somete al código fuente
puro de entrada a un análisis léxico gráfico,
a un análisis sintáctico, a un análisis
semántico, que construyen la tabla de
símbolos, se genera un código intermedio
al cual se optimiza para así poder producir
un código de salida generalmente en algún
lenguaje ensamblador

Ensamblado

Este modulo recibe un código fuente de
entrada escrito en ensamblador, y produce
otro código de salida, llamado código
binario no enlazado.

Enlazado

Este ultimo modulo es el que produce
como salida el código binario enlazado.

Estructura del proceso de
compilacion

Fase Analisis

Lexico

Su función es tomar el programa fuente en
forma de tokens, que recibe del analizador
léxico y determinar la estructura de las
sentencias del programa.

Sintactico

Se encarga de revisar que los tokens estén
ubicados y agrupados de acuerdo a la
definición del lenguaje.

Semántico

El analizador semántico detecta la validez
semántica de las sentencias aceptadas por
el analizador sintáctico.

Fase Sintesis

Generacion de codigo intermedio

En esta etapa se lleva el código del
programa fuente a un código interno para
poder trabajar mas fácilmente sobre él.

Generacion de codigo

Esta constituye la fase final de un
compilador. En ella se genera el código
objeto que por lo general consiste en
código en lenguaje máquina (código
relocalizable) o código en lenguaje
ensamblador.

Optimizacion de codigo

En esta fase se trata de mejorar el código
intermedio, de modo que resulte un código
de máquina más rápido de ejecutar.