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.