Sunteți pe pagina 1din 39

Introduccin al Diseo de

Compiladores

ASIGNATURA: COMPILADORES

1
CONTENIDOS
Tema 1.- Introduccin a la Compilacin

Tema 2.- Lenguajes, autmatas y gramticas

Tema 3.- Anlisis lxico

Tema 4: Tablas de Smbolos

Tema 5.- Anlisis sintctico

Tema 6.- Anlisis semntico

Tema 7.- Principios bsicos de la fase de sntesis


2
INTRODUCCIN

3
Conceptos relacionados

Arquitectura de Lenguajes de
Computadoras Programacin

Compiladores
Teora de
Lenguajes Ingeniera de
Software
Teora de
Algoritmos

Con algunas tcnicas bsicas de escritura de compiladores se pueden


construir traductores para una gran variedad de lenguajes y mquinas
4
Compiladores
Un compilador es un programa que
lee un programa en un lenguaje y
lo traduce a un programa equivalente en otro lenguaje,
y adems informa al usuario sobre
la presencia de errores en el programa de entrada

programa compilador programa


fuente objeto
mensajes
de error

Aparente complejidad- Tareas bsicas


5
CLASIFICACION GENERAL
De una pasada o de mltiples pasadas
De carga y de ejecucin
De depuracin o de optimizacin

6
HISTORIA
Computadoras Hombre
Cdigo
Mquina

Ensamblador
Cdigo Lenguaje
Mquina Ensamblador

Ensamblador Compilador
Cdigo Lenguaje Lenguaje de
Mquina Ensamblador Alto Nivel

7
HOY. Y A FUTURO

El Diseo de un compilador surge como resultado de:

Desarrollo de un nuevo lenguaje de programacin


Adicin de extensiones a los ya existentes
Explotacin de las caractersticas del hardware

A futuro:

Extensin para el cmputo paralelo y distribuido

8
TIPOS DE SISTEMAS DE COMPILACIN
ENSAMBLADOR
Traducen programas escritos en lenguaje ensamblador
a cdigo mquina

COMPILADOR
Traducen programas escritos en lenguaje de alto nivel a
cdigo intermedio o a cdigo mquina
INTERPRETE
No genera cdigo objeto, analiza y ejecuta directamente
cada proposicin del Programa Fuente (PF)
PREPROCESADOR
Sustituyen macros, incluyen archivos o extensin del
lenguaje.
9
SISTEMA PARA PROCESAMIENTO DE UN LENGUAJE

estructura del programa fuente

preprocesador

programa fuente

compilador

programa objeto en lenguaje ensamblador

ensamblador
cdigo de mquina relocalizable
biblioteca
editor de carga y enlace archivos obj.relocal.

cdigo de mquina absoluto


10
PARTES DE LA COMPILACIN
ANLISIS (Etapa Inicial):
Divide al PF en sus elementos componentes y crea
una representacin intermedia.
Se determinan las operaciones y se registran en una
estructura de rbol (ej. rbol sintctico)

SNTESIS (Etapa Final):


Construye el PO deseado a partir de la representacin
Intermedia (requiere tcnicas ms especializadas)

11
UN AMBIENTE GENERAL DE COMPILACIN
Fuente

Anlisis lxico
Anlisis sintctico
Anlisis semntico Ms:
Sistemas de
Intermedio edicin y
depuracin
Generador de cdigo

Cdigo relocalizable

Enlazador

Objeto
12
ANLISIS DEL PROGRAMA FUENTE

ANALISIS LINEAL (Lxico- Exploracin- Scanner)


Se lee el programa como una cadena de izquierda a derecha,
se agrupan y se generan componentes lxicos o tokens
(secuencia de caracteres con significado colectivo)

ANALISIS JERARQUICO (Sintctico- Parser)


Los componentes lxicos se agrupan en colecciones
anidadas con un significado colectivo ( frases gramaticales
que por lo general se representan mediante
rboles sintcticos)

ANALISIS SEMANTICO
Se realizan revisiones para asegurar que los componentes de
un programa se ajustan de un modo significativo

13
EJEMPLO DE ANLISIS:
posicion := inicial + velocidad * 60

a ) Componentes lxicos:
1. El identificador posicion
2. El smbolo de asignacin :=
3. El identificador inicial
4. El signo de suma: +
5. El identificador velocidad
6. El signo de multiplicacin: *
7. El nmero 60

Los identificadores o nombres reconocidos se organizan en una


tabla de smbolos que se usar en los pasos siguientes
14
posicion := inicial + velocidad * 60

a ) Anlisis sintctico (rbol de analis. sint.)


proposicin
de asignacin

identificador := expresin

posicion +
expresin expresin

identificador expresin * expresin

inicial identificador nmero

velocidad
Ao 2004 60 15
posicion := inicial + velocidad * 60

b ) Anlisis sintctico ( reglas recursivas)

Las construcciones lxicas no requieren recursin


(ej. Reconocer un identificador) mientras que las sintcticas
suelen requerirlas (ej. Emparejamiento de parntesis o Begin-
End)

La estructura jerrquica de un programa normalmente se


expresa mediante reglas recursivas
Exp :: ident | nro
Exp :: Exp + Exp| Exp * Exp | (Exp)

Las gramticas libres de contexto (GLC) son una


formalizacin de reglas recursivas que pueden guiar el
anlisis sintctico 16
posicion := inicial + velocidad * 60

c ) Anlisis semntico

Significado de una unidad gramatical, interpretacin


Traducir la entrada a una forma de representacin intermedia
Anlisis y verificacin de tipos
Utiliza la estructura jerrquica del Anlisis sintctico
El rbol semntico permite una representacin interna
compacta del rbol de anlisis sintctico. Ejemplos:
:= :=
posicion + posicion +
inicial * inicial *
velocidad 60 velocidad entareal
60
17
FASES DE UN COMPILADOR

PROGRAMA FUENTE

analizador lxico
analizador sintctico
administrador analizador semntico manejador
de la tabla generador de cdigo intermedio de errores
de smbolos optimizador de cdigo
generador de cdigo

PROGRAMA OBJETO

Cada fase transforma al PF de una representacin a otra

18
ESQUEMA DE BLOQUES DE UN COMPILADOR

FUENTE Compilador

ANALISIS
Scanner
Tabla
Parser de
smbolos

SINTESIS

Prep. para la Gen.


del cdigo

OBJETO Gener. del cdigo


19
ESTRUCTURA FUNCIONAL DE UN COMPILADOR
(de una pasada)

SENTENCIA

Fuente Explorador Recono- Generador Objeto


cedor de cdigo

Tabla de
smbolos

20
COMPILACIN DE UNA SENTENCIA EJEMPLO
Vel = V0 + Acel Sentencia fuente a compilar

V1 = V2 + V3 Resultado del EXPLORADOR

<sent>
< sent asign> RECONOCEDOR:
<var> <expre>
<expre> + <term>

<term>
<fact> <fact> Anlisis sintctico:
V1 = V2 + V3 la sentencia es correcta

V1 V2 V3 + = Sentencia en notacin polaca


(subproducto del reconocedor)
LOAD Acel
ADD V0 Resultado del GEN. DE CDIGO
STORE Vel (instrucciones para mquina )
21
El analizador Lxico, lee el flujo de caracteres
que componen el programa fuente y los
agrupa en secuencias significativas,
conocidas como lexemas. Para cada lexema,
el analizador lxico produce como salida un
token de la forma

(nombre-token, atributo)

22
1.- posicion es un lexema que se asigna a un token
(id,1), en donde id es un smbolo abstracto que
representa la palabra identificador y 1 apunta a la
entrada de la tabla de smbolos para la posicin.

2.- El smbolo asignacin = es un lexema que se


asigna al token (=). Como este token no necesita un
valor-atributo, omitimos el segundo componente,
aunque se puede utilizar un smbolo abstracto

3.- inicial es un lexema que se asigna al token


(id,2), en donde 2 apunta a la entrada en la tabla de
smbolos para inicial 23
4.- + es un lexema que se asigna al token (+)

5.- velocidad es un lexema que se asigna al token


(id,3) en donde 3 apunta a la entrada en la tabla de
smbolos para velocidad

6.- * es un lexema que se asigna al token (*)


7.- 60 es un lexema que se asigna al token (60)

24
El analizador lxico ignora los espacios en blanco
que separa los lexemas

Despues del anlisis lxico como la secuencia de


tokens quedara

(id,1) = (id,2) (+) (id,3) (*) (60)

25
posicion := inicial + velocidad * 60
A. Lex: id1 : = id2 + id3 * 60

A. Sint: :=
id1 +
id2 *
id3 60

A. Seman: :=
id1 +
id2 *
id3 entareal
60

26
ADMINISTRADOR DE LA TABLA DE SMBOLOS
TABLA DE SMBOLOS
Estructura de datos que contiene un registro por cada
identificador, con los campos para los atributos:
-- Informacin sobre la memoria asignada
-- tipo
-- mbito
-- Si es nombre de procedimiento (nmero, tipo
y mtodo de paso de cada argumento)
Permite encontrar rpidamente cada ID y almacenar o
consultar datos de ese registro

En el Anlisis Lxico se detectan los ID y se introducen en


la Tabla de Smbolos

Las fases restantes introducen informacin sobre los ID y


despus la utilizan
Ao 2004 27
DETECCIN E INFORMACIN DE ERRORES

Cada fase puede encontrar errores y debe tratarlo para


continuar con la Compilacin, permitiendo detectar ms
errores

Las fases de Anlisis Lxico, Sintctico y Semntico


manejan la mayora de los errores

En el Anlisis Semntico se detectan errores donde la


estructura sintctica es correcta pero no tiene significado
la operacin
( Por. ej. sumar dos ID , donde uno es el nombre de una
matriz y el otro un nombre de procedimiento)

28
GENERACIN DE CDIGO INTERMEDIO
Se genera una representacin intermedia explcita del PF

La representacin intermedia es como un programa para


una mquina abstracta

Esta representacin debe ser fcil de producir y de traducir


al programa objeto

Una de ellas es el cdigo intermedio de 3 direcciones


(Cada posicin de memoria puede actuar como registro)
( Cada instruccin tiene como mximo 3 operandos )

Ejemplo t1 := entareal (60)


t2 := id3 + t1
t3 := id2 + t2
id1 := t3
29
OPTIMIZACIN DE CDIGO

Trata de mejorar el cdigo intermedio para que resulte un


cdigo de mquina ms rpido de ejecutar

En el ejemplo: t1 : = id3 * 60.0


id1 : = id2 + t1
La conversin a real se hace en compilacin
No necesita t2 ni t3.

Compiladores optimadores : La fase de optimacin ocupa


una parte significativa del tiempo del compilador

Hay optimaciones sencillas que mejoran el tiempo de


ejecucin del programa sin retardar mucho la compilacin

30
GENERACIN DE CDIGO
La fase final genera cdigo objeto ( en general cdigo de mquina
recolalizable o cdigo ensamblador)

Se seleccionan las posiciones de memoria para las variables


usadas por el programa .
Se traduce cada una de las instrucciones intermedias a una
secuencia de instrucciones de mquina

Un aspecto decisivo es la asignacin de variables a registros.


En el ejemplo, utilizando los registros 1 y 2:

LDF R2, id3


MULF R2, R2, #60.0 (cte de punto flotante, # = trato de cte, inmediata)
LDF R1, R1, R2
ADDF R2, R1
STF id1, R1

31
PROGRAMAS RELACIONADOS CON UN COMPILADOR
PREPROCESADORES (producen la entrada para un comp.)
Procesamiento de Macros
Inclusin de archivos
Preprocesadores racionales (estruct. de control)
Extensiones a lenguajes ( bases de datos)

ENSAMBLADORES
Producen cdigo ensamblador que se pasa a un ensamblador
para su procesamiento ( versin mnemotcnica del cdigo de
mquina: nombres de operaciones y nombres de direcciones
de memoria)

ENSAMBLADO DE DOS PASADAS (lecturas del archivo IN)


Primera: Identificadores - Tabla de smbolos
Segunda: Traduce cdigos de operaciones e identificadores
El resultado es cdigo de maquina relocalizable

CARGADORES Y EDITORES DE ENLACE


Modifica las direcciones relocalizables y ubica en memoria.
Forma un solo prog. desde varios archivos relocalizables
Ao 2004 32
AGRUPAMIENTO DE FASES EN LA IMPLEMENTACION

ETAPA INICIAL Y ETAPA FINAL


Inicial : Fases que dependen del lenguaje fuente
Hasta cierta optimacin
Final : Partes que dependen de la maq. objeto y del leng.
intermedio

PASADAS
Se agrupan las actividades de varias fases en una misma
pasada (lectura de un archivo de entrada y escritura de un
archivo de salida)

REDUCCION DEL NUMERO DE PASADAS


Pocas pasadas --> Varias fases dentro de una pasada -->
Prog. completo en memoria en representacin intermedia
Fusin de cdigo intermedio y objeto: backpatching
Ao 2004 33
HERRAMIENTAS PARA CONSTRUCCIN DE COMPIL.

SIST. DE AYUDA PARA ESCRIBIR COMPILADORES


Comp. de comp. / Generadores de comp. /
Sist. generadores de traductores

HERRAMIENTAS GENERALES PARA EL DISEO AUTOM-


TICO DE COMPONENTES ESPECFICOS DE UN COMP.

Utilizan leng. especficos para especificar e imple-


mentar la componente

Ocultan detalles del algoritmo de generacin

Producen componentes que se pueden integrar al


resto del compilador

Ao 2004 34
HERRAMIENTAS PARA CONSTRUCCIN DE COMPIL.
GENERADORES DE ANALIZADORES SINTACTICOS
Producen AS a partir de una Gramtica Libre de Contexto
Hoy esta es una de la fases ms fciles de aplicar

GENERADORES DE ANALIZADORES LEXICOS


Producen AL a partir de una especificacin en Expres.
Regulares. El AL resultante es un Autmata Finito

DISPOSITIVOS DE TRADUC. DIRIGIDA POR LA SINTAXIS


Producen grupos de rutinas que recorren el rbol de AS
generando cdigo intermedio

GENERADORES AUTOMTICOS DE CDIGO


Las proposiciones en cod. Int. se reemplazan por plan-
tillas que representan secuencia de instruc. de mquina
DISPOSITIVOS PARA ANALISIS DE FLUJO DE DATOS
Inf. sobre como los valores se transmiten de una parte a
otra del programa Ao 2004 35
HERRAMIENTAS PARA CONSTRUCCIN DE COMPIL.

Lex y YACC

Herramientas que nos permiten desarrollar componentes o


la mayor parte de un compilador

Son un recurso invaluable para el profesional y el


investigador

Existen paquetes freeware

Ao 2004 36
ALGUNOS TIPOS ESPECIALES DE COMPILADORES
COMPILE- LINK- GO
Se compilan segmentos por separado y luego se montan
todos los objetos producidos en un mdulo cargable listo

COMPILADOR DE VARIAS PASADAS


No es ms lento. Ocupa poca memoria. Fcil de mantener

COMPILADOR INCREMENTAL ( o interactivo)


Se pueden compilar solo las modificaciones

AUTOCOMPILADOR
Comp. escrito en el propio leng. que traduce. Portabilidad.
METACOMPILADOR
Programa al que se le especifica el lenguaje para el que se
quiere un comp. y produce el comp. como resultado

DECOMPILADOR
Traduce de cdigo mquina a leng. de alto nivel
Ao 2004 37
EL LENGUAJE Y LA HERRAMIENTA

MODELO LENGUAJE CARACTERISTICAS

Compilado Fortran, COBOL, Sintaxis rigurosa,


C/C++, Pascal velocidad y tamao

Interpretado Lisp,AWK, BASIC, Desempeo lento.


SQL Actividades no planea-
das. Sintaxis relajadas

Pseudocompilado Java Transportabilidad


absoluta, desempeo
intermedio. Sintaxis
rigurosa

Ao 2004 38
ASPECTOS ACADEMICOS Y DE INVESTIGACION
AREA BENEFICIOS

Lenguaje de prog. Principios para su desarrollo


Herramientas para implementacin

Inteligencia artificial Interfases de reconocimiento de


lenguaje natural

Sistemas operativos Desarrollo de interfases de control


y usuario final. Intrpretes de
comandos ( shells)

Diseo de interfaces Desarrollo de interf. orientadas a


comando y carcter. Voz o escritura

Administracin de Seleccin de herramientas de


proyectos inform. desarrollo. Evaluacin de costo y
beneficios.
Ao 2004 39

S-ar putea să vă placă și