Вы находитесь на странице: 1из 29

COMPILADORES

INTRODUCCIN

M.C. Jos Andrs Vzquez Flores Facultad de Ciencias de la Computacin

andrex@cs.buap.mx
FCC-BUAP

Otoo 2013

Introduccin
Qu es un compilador (traductor)?

Programa que lee un programa (fuente) en un lenguaje ascci y lo traduce a un programa EQUIVALENTE en otro lenguaje (objeto) Adems:

da mensajes de error lleva a cabo determinadas correcciones (recuperacin de errores) puede optimizar el cdigo generado

Permite programar independientemente de la mquina

Importante, ya que el nmero de mquinas diferente crece deprisa

De dnde el nombre compilador?


Murray Hopper (50s) La traduccin se vea como la compilacin

de una secuencia de subprogramas tomados de una librera (biblioteca) de programas Compilacin (actual) se llamaba programacin automtica se vea como algo futurista Primeros compiladores modernos: FORTRAN (finales 50) independencia de la mquina coste: 18 personas/ao

No siempre el lenguaje objeto tiene que ser de bajo nivel

(traductor) Tcnicas aplicables para:

editores/formateadores de texto

nroff, troff, eqn, tbl, pic de UNIX,TeX


SQL, shells

lenguajes de consulta

transformacin de formatos de ficheros

Clasificacin de los lenguajes


Lenguajes mquina Son los lenguajes de ms bajo nivel: secuencias binarias de ceros y unos. Histricamente, los primeros

Lenguajes ensambladores Segunda generacin de lenguajes Versin simblica de los lenguajes mquina (MOV, ADD).
Lenguajes de alto nivel Lenguajes de tercera generacin (3GL) Estructuras de control, Variables de tipo, Recursividad, etc. Ej.: C, Pascal, C++, Java, etc Lenguajes orientados a problemas. Lenguajes de cuarta generacin (4GL) Ej. SQL

INTERPRETE
El intrprete ejecuta el cdigo segn lo va interpretando. Cada vez que se escribe una lnea el programa comprueba si es correcta, si lo es, la ejecuta. La ejecucin es interactiva. Los intrpretes ms puros no guardan copia del programa que se est escribiendo. Ejemplos: Procesos por lotes, CAML, etc. El intrprete siempre debe estar presente.

COMPILADOR
El compilador es el traductor ms extendido Realiza un anlisis y genera un programa

ejecutable El programa ejecutable, una vez creado, no necesita el compilador para funcionar

COMPILADOR VS INTERPRETE
Compilador Se compila una vez, se ejecuta n veces El proceso de compilacin tiene una visin global de todo el programa, por lo cual la gestin de errores es ms eficiente. La ejecucin es ms rpida.

Intrprete Se traduce cada vez que se ejecuta Permite interaccionar ms con el cdigo en tiempo de ejecucin. Necesita menos memoria

10

Las FASES de un compilador

Primera fase (precompilador)


no siempre se realiza sustituciones de macros eliminacin de comentarios inclusin de ficheros extensiones al lenguaje (C+SQL) es la parte fundamental (y siempre presente) consta de: analizador lxico analizador sintctico

Segunda fase

generador de cdigo

traduce el cdigo fuente a otro objeto puede ser el definitivo puede ser un cdigo intermedio

11

Las FASES de un compilador


Tercera fase

no siempre presente realiza optimizaciones (algunas) sobre el cdigo (intermedio) generado traduce el cdigo intermedio (optimizado) a

Cuarta fase:

ensamblador

binario

Muchas variaciones posibles:


sin preprocesador sin usar cdigo intermedio optimizando directamente sobre el ensamblador de la mquina generar directamente binario, sin pasar por el ensamblador .........

12

Tipos de Compiladores

Ensamblador: el lenguaje fuente es lenguaje ensamblador y posee una estructura sencilla. Compilador cruzado: se genera cdigo en lenguaje objeto para una mquina diferente de la que se est utilizando para compilar. Compilador con montador: compilador que compila distintos mdulos de forma independiente y despus es capaz de enlazarlos. Autocompilador: compilador que est escrito en el mismo lenguaje que va a compilar.

13

Tipos de Compiladores

Metacompilador: es sinnimo de compilador de compiladores y se refiere a un 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 cdigo mquina y lo traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilacin.

14

ESTRUCTURA DE UN COMPILADOR Etapas que constituyen el proceso de compilacin


Programa Fuente

Anlisis Lxico

Anlisis Sintctico
Manejo de la Tabla de Smbolos Anlisis Semntico Generacin de Cdigo Intermedio Optimizacin de Cdigo Generacin de Cdigo Manejo de Errores

15

Programa Objeto

Las partes principales


La primera fase (front end) es la encargada

de analizar el programa fuente Fase de Anlisis. (back end) es la encargada de generar cdigo para la mquina objeto.- Fase de sntesis. El puente de unin entre las dos fases era un lenguaje intermedio que se design con el nombre de UNCOL (UNiversal Computer Oriented Language).

El analizador lxico
Lo realiza un scanner

tambin tokenizer El scanner recorre los caracteres de entrada (el fuente) hasta reconocer un token token: unidad lxica indivisible

ejemplos: while,if,==,>=,ancho,... La secuencia de caracteres correspondiente se llama lexema (componente lxico) 1 token <> 1 lexema Existen Generadores automticos de analizadores lexicos como LEX

17

El analizador lxico
Adems, suele realizar otras tareas:

procesar directivas al compilador (opciones) introducir informacin preliminar en la tabla de smbolos eliminar separadores innecesarios sustituir macros listar el fuente

Normalmente, los tokens se describen mediante

expresiones regulares

18

El analizador lxico
Ejemplo: El scanner deber reconocer sucesivamente,

19

El analizador sintctico
O parser Objetivo: agrupar los tokens suministrados por el scanner

para reconocer frases

Cmo lo hace?

La sintaxis se suele especificar formalmente mediante una GLC tambin de otros tipos El parser recibe tokens y los agrupa de acuerdo a especificadas por la GLC

El parser detecta errores sintcticos Y si es bueno, puede adems realizar algunas correcciones

producciones

20

El analizador sintctico
Ejemplo:

supongamos sintaxis asignacin como:

y debemos analizar

21

El analizador sintctico
El rbol sintctico correspondiente es

22

El analizador semntico
Realiza dos funciones:

Anlisis de la semntica esttica Es cada construccin legal y con sentido?


variables en una expresin definidas del tipo adecuado alcance de los objetos

Generacin del cdigo intermedio Generalmente se lleva a cabo mediante gramticas de atributos
la GLC se completa con atributos necesarios
tipo valor acciones a ejecutar cuando se detecta una construccin legal ....

23

Generacin de Cdigo Intermedio

Cuando el nmero de lenguajes fuente crece hasta un nmero grande M, y/o cuando el nmero de lenguajes objeto tambin crece hasta un numero grande N, es necesario encontrar una tcnica para evitar tener que disear MxN compiladores.La solucin consiste en utilizar un lenguaje intermedio o una representacin intermedia; de esta forma solo hay que construir M programas que traduzcan de cada lenguaje fuente al lenguaje intermedio y N programas que traduzcan del lenguaje intermedio a cada lenguaje objeto.
24

Generacin de Cdigo Intermedio

La generacin de cdigo intermedio transforma un rbol de anlisis sintctico (semntico) en una representacin en un lenguaje intermedio, que suele ser cdigo suficientemente sencillo para poder luego generar cdigo mquina.

While (A>B) AND (A<=2*B-5) Do A := A + B

25

L1: IF A>B GOTO L2 GOTO L3 L2: T1:= 2*B T2:= T1-5 IF A<=T2 GOTO L4 GOTO L3 L4: A:= A+B GOTO L1 L3: ....

OPTIMIZACION DE CODIGO

El cdigo intermedio generado es analizado y transformado

en uno equivalente optimizado Es una tarea muy costosa De hecho, generalmente se puede invocar al compilador activando/desactivando esta opcin Otras veces, optimiza el cdigo objeto usual la optimizacin peephole:

tomar una porcin pequea de cdigo y hacer una optimizacin local

desenrrollado de bucles eliminacin de recursividad final ....

26

GENERACION DE CODIGO

Toma cdigo intermedio y genera cdigo objeto para

la mquina considerada
Es la parte ms prxima a la arquitectura de la

mquina
Habitualmente, se escriben a mano desarrollo a medida para cada mquina especfica

Dada la complejidad, si no se va a realizar

optimizacin, se asocia la generacin de cdigo a las rutinas semnticas

compiladores de una pasada

27

La tabla de smbolos

Mecanismo para almacenar/acceder la informacin

de los identificadores
Las informaciones asociadas a un identificador se

denominan atributos

Cada vez que se usa un identificador, la tabla de

smbolos proporciona la informacin necesaria


Se usa tanto en la parte de anlisis como en la de

sntesis

28

Manejo de errores

Es una de las misiones mas importantes de un compilador, aunque al mismo tiempo, es lo que mas dificulta su realizacin debido principalmente a dos motivos:
1) 2)

A veces unos errores ocultan otros A veces un error provoca una avalancha de muchos errores que se solucionan con el primero

Criterios en el manejo de errores


a) b)

Pararse al detectar el primer error Detectar todos los errores de un pasada

29

Вам также может понравиться