Академический Документы
Профессиональный Документы
Культура Документы
INTRODUCCIN
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
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
editores/formateadores de texto
lenguajes de consulta
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
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
no siempre presente realiza optimizaciones (algunas) sobre el cdigo (intermedio) generado traduce el cdigo intermedio (optimizado) a
Cuarta fase:
ensamblador
binario
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
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
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
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
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:
y debemos analizar
21
El analizador sintctico
El rbol sintctico correspondiente es
22
El analizador semntico
Realiza dos funciones:
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
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
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.
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
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:
26
GENERACION DE CODIGO
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
27
La tabla de smbolos
de los identificadores
Las informaciones asociadas a un identificador se
denominan atributos
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
29