Sie sind auf Seite 1von 34

Introduccin a la Compilacin

Diseo y Construccin de Compiladores

Conceptualizacin

de Compilador Por qu y para qu estudiar tcnicas de compilacin? Fases de un compilador Clasificacin de los Compiladores Compiladores vs. Intrpretes Temticas abordadas en la materia

ndice

Compilador:

Programa que lee un programa escrito en un lenguaje de programacin y lo traduce a un programa equivalente en otro lenguaje de programacin.
Programa Destino

Programa Fuente

Compilador

Mensajes de Error

Compilador

Forma

parte de los conocimientos que un Lic. en Computacin o un Ingeniero de Software debe poseer.
El funcionamiento de una computadora. El cdigo de mquina generado para las construcciones del lenguaje de programacin. Estrategias de diseo de lenguajes. Etc.

Permite

conocer:

Por qu estudiar compiladores?

Comprensin

de Programas

Para qu estudiar compiladores?

Transformar

cdigo

Para qu estudiar compiladores?

Generar

Cdigo

Para qu estudiar compiladores?

Anlisis

de Cdigo Esttico y Dinmico

Para qu estudiar compiladores?

Aplicaciones

Comerciales/Lenguajes Especficos del Dominio

HDL

Lenguaje Intermedio

Para qu estudiar compiladores?

Analizador Lexicogrfico Analizador Sintctico Administrador De Tabla de Smbolos Analizador Semntico


Generador de Cdigo Intermedio Optimizador de Cdigo

Manejador de Errores

Generador de Cdigo

Fases de un Compilador

Front-end:

mquina.

Operaciones independientes de la

Anlisis Lexicogrfico Anlisis Sintctico Creacin de Tabla de Smbolos Generacin de Cdigo Intermedio Manejo de Errores

Back-end:

mquina.

Operaciones dependientes de la

Optimizacin de Cdigo Generacin de Cdigo Etc.

Agrupacin de las Fases de Un Compilador

Como

hay muchas variantes en las formas en que las fases de un compilador se agrupan, se prefiere hablar de fases antes que pasos. Es comn que en diferentes fases se agrupen en un paso y que la actividad de esas fases se solapen durante un paso (scanner, parser, anlisis semntico, generacin de cdigo intermedio).

Fases de un Compilador

Es

importante notar que deseable tener pocas fases porque la lectura y escritura de archivos consume mucho tiempo.

Ejemplo:

Scanner-parser Representacin Cdigo.

Intermedia-Generacin

de

Fases de un Compilador

Anlisis

Lexicogrfico

Agrupa caracteres en tokens (lexema). Produce mensajes de errores lexicogrficos e intenta recuperarse.

a = a+1 1 Id a 5 = 1 Id a 6 + 3 Num 1

Funciones de las Fases

Anlisis

Sintctico

Agrupa los tokens en frases gramaticales. Representa las frases gramaticales como un rbol de parser. Produce mensajes de errores sintcticos. Intenta detectar y recuperarse de los errores.

Funciones de las Fases

Anlisis
a=a+1

Sintctico

asig

id

exp

id

num

Funciones de las Fases

Anlisis

Controla los errores semnticos del programa.

Semntico

Variables usadas y no definidas. Operandos de tipos compatibles. Invocaciones a procedimientos con el nmero y tipo correctos de parmetros. Nmeros reales no pueden ser usados como subndices de arreglos. Conversin de tipos cuando se permiten las cohersiones.

Funciones de las Fases

bool a; a= a + 1 !!!!!!

int a; a= a + 1

Funciones de las Fases

Generador

de Cdigo Intermedio

Genera una representacin intermedia explcita.


rboles de sintaxis abstracta. Grafos acclicos dirigidos. Notacin postfija. N-uplas (cdigo de tres direcciones).

Funciones de las Fases

Posfija a=a+1 rbol de Sintaxis Abstracta


=

aa1+=

id

id

num

Funciones de las Fases

Optimizacin

de Cdigo

Intenta reducir el tiempo de ejecucin.


Descubrir y propagar algn valor constante. Mover determinadas computaciones a lugares menos frecuentemente ejecutados. Descubrir computaciones redundantes y removerlas. Remover cdigo intil o inalcanzable.

Funciones de las Fases

Generador

de Cdigo

Genera el cdigo objeto, esto es cdigo de mquina reubicable o cdigo assembly.


a=a+1 lw r1,#a lw r2,0(r1) addi r2,r2,#1 sw 0(r1),r2

Funciones de las Fases

Simple

pasada

Multi

pasada

Clasificacin de los Compiladores

Compilador
Recuperar un token

Simple Pasada

Analizar el token Verificar el token Generar Cdigo para el token

El programa destino se genera mientras el programa fuente se lee.

Clasificacin de los Compiladores

Compilador

Multi-Pasada
parser Anlisis Semntico rbol Cdigo

scanner caracteres

Tokens

Cada fase lee los datos desde un archivo y escribe el resultado en otro

Por qu mltiples pasadas? Memoria escasa Lenguaje Complejo Portabilidad

Clasificacin de los Compiladores

Front-end

Back-end

Scanner Parser Anlisis Semtico

Generacin de Cdigo

Representacin Intermedia Ventajas: Importante Portabilidad El front-end es dependiente del Optimizaciones ms fciles de lenguaje hacer El Back-end es dependiente de la Se pueden combinar los frontmquina end y los back-ends

Clasificacin de los Compiladores

Intrprete:

Programa que lee un programa escrito en un lenguaje de programacin y produce el resultado de ejecutar tal programa.

Lenguaje de Programacin INTRPRETE Datos Salida

Intrprete

Compilador

Intrprete

Se compila una vez seSe traduce cada vez que ejecuta n veces. se ejecuta. El proceso dePermite interaccionar compilacin tiene unams con el cdigo en visin global de todo eltiempo de ejecucin. programa. La ejecucin es msNecesita rpida memoria. menos

Compiladores vs. Intrpretes

Anlisis:

Parte el programa fuente en piezas y crea una representacin intermedia. Construye el programa a partir de la representacin intermedia.

Sntesis:

Partes de la Compilacin

Anlisis

Lineal: El programa se lee de izquierda a derecha y se detectan secuencias de caracteres que tienen un significado colectivo (Tokens). Jerrquico: Los tokens se agrupan jerrquicamente en colecciones anidadas con significado colectivo. Semntico: Se realizan ciertos chequeos que garantizan que las componentes del programa tienen sentido.

Anlisis

Anlisis

Anlisis

Generadores Generadores Mquinas

de Scanners (Lex) de Parsers (yacc, bison)

Sintxis.

de Traduccin Dirigida por la

Generadores

de Cdigo Automtico.

Herramientas de Construccin de Compiladores

Preprocesadores

Macro Procesadores Inclusin de Archivos Extensiones del Lenguaje

Ensambladores Ensambladores Loaders

de dos pasadas

and Link-Editors

Otros Traductores

Tabla

de Smbolos Descendente Recursivo de Errores Dirigida por la sintxis

Parser

Manejo

Traduccin Chequeo

de Tipos de Cdigo

Generacin

Temticas Abordadas en la Materia

Compilers:

Principles, Techniques and Tools. Aho, Setti and Ullman. (The Dragon ).

Apuntes

de la materia.

Biliografa

Das könnte Ihnen auch gefallen