You are on page 1of 19

INTRODUCCIN A LA

COMPILACIN
Compiladores: Definicin
Compiladores: Clasificacin
Como fueron construidos:
De una pasada
De mltiples pasadas
De carga y ejecucin.
Funcin que realizan:
De depuracin o de optimizacin.
Las Fases del Compilador
Agrupamiento de Fases (1/2)
Etapa Inicial (de anlisis front-end): incluye
fases que dependen principalmente del
lenguaje fuente
Anlisis Lxico
Anlisis Sintctico
Creacin de la tabla de smbolos
Anlisis Semntico
Generacin de cdigo intermedio
Agrupamiento de Fases (2/2)
Etapa Final (sntesis back-end): incluye las
fases que dependen del lenguaje intermedio
y la maquina objeto.
Optimizacin de Cdigo
Generacin de Cdigo
Manejo de Errores
Operaciones con la tabla de smbolos
Fases
Anlisis lxico, la cadena de caracteres que constituye el
programa fuente y los agrupa en secuencias significativas
(lexemas). Para cada lexema el analizador produce como
salida un token.

Anlisis sintctico, utiliza los tokens producidos por el
analizador lxico para crear una representacin
intermedia en forma de rbol que describa la estructura
gramatical del flujo de tokens.
Fases
Anlisis semntico, utiliza el rbol y tabla de
smbolos para comprobar la consistencia
semntica del programa fuente con la definicin
del lenguaje.

Generacin de cdigo intermedio: Entrega una
representacin intermedia (cdigo de tres
direcciones) que la podemos considerar como un
programa para una mquina abstracta
Fases
Optimizacin de cdigo, Independiente de la maquina
virtual trata de mejorar el cdigo intermedio de manera
que se produzca un cdigo destino ms eficiente.

Generacin de cdigo: Recibe la representacin
intermedia y la transforma al lenguaje destino. Primero
asigna las direcciones de memoria de c/u de las variables
y luego traduce las instrucciones intermedias en
secuencias de instrucciones de mquina que realizan la
misma tarea.
Por Ejemplo:

Analicemos la siguiente cadena:


Posicin := inicial + velocidad * 60
Anlisis lxico
Componentes lxicos:
Identificadores: posicin, inicial, velocidad
Smbolos: (:=), (+), (*).
Nmero: 60

Los espacios en blanco que separan a los
componentes lxicos se eliminan

Anlisis sintctico: rbol
Sintctico
:=
/ \
id1 +
/ \
id2 *
/ \
id3 60
Anlisis semntico
Utiliza el rbol sintctico para identificar
operadores, operando de expresiones y
proposiciones.

Otra parte importante es la verificacin de tipos
de cada operador.

Qu pasara si todos los identificadores del
ejemplo fueran de tipo real?
Pasadas
Las actividades de varias fases se pueden
agrupar en una sola pasada.
1era. Pasada, fases de anlisis
2da. Pasada, Optimizacin de Cdigo (Opcional).
3ra. Pasada, Generacin del cdigo para una
mquina destino especfica.

Reduccin del nmero de
pasadas
Pocas pasadas debido al tiempo de lectura y
escritura de archivos intermedios.

Si se agrupan muchas fases dentro de una
pasada, puede ser necesario tener todo el
programa en memoria; debido a que alguna
fase puede necesitar informacin.
Herramientas de Construccin de
Compiladores.- Caractersticas
Herramientas que utilizan lenguajes
especializados para especificar e implementar
componentes especficos.

Las ms exitosas son la que ocultan los detalles
del algoritmo de generacin y producen
componentes que se integran fcilmente al resto
del compilador
Herramientas de Construccin de
Compiladores
Generadores de escaners.- Producen analizadores de lxicos a
partir de una descripcin de tokens de un lenguaje utilizando
expresiones regulares.

Generadores de analizadores sintcticos (parsers).- Producen
analizadores sintcticos a partir de la gramtica del lenguaje de
programacin.
Motores de traduccin orientados a la sintaxis.- Producen
rutinas para recorrer rboles sintcticos y generar cdigo
intermedio
Herramientas de Construccin de
Compiladores
Generadores de generadores de cdigo.- Producen
un generador de cdigo a partir de una coleccin de
reglas para traducir cada operacin del lenguaje
intermedio en lenguaje de mquina.

Motores de anlisis de flujo de datos.- Analizan el
flujo de informacin en un programa. Es vital para la
optimizacin de cdigo

You might also like