Está en la página 1de 50

COMPILADORES

FACULTADA DE SISTEMAS
COMPUTACIONALES

7 SEMESTRE

OBJETIVO GENERAL
EL ALUMNO APLICARA TCNICAS Y
HERRAMIENTAS DE DESARROLLO
DE COMPILADORES PARA
ELABORAR SOFTWARE DE BASE,
OBTENIENDO UN SOFTWARE QUE
OPTIMICE TANTO MEMORIA COMO
DESEMPEO.

UNIDAD 1
ELEMENTOS PARA EL ESTUDIO DE LOS
COMPILADORES.

OBJETIVO DE LA UNIDAD I
EL ALUMNO DESCRIBIR LAS
ETAPAS EN EL PROCESO DE
COMPILACIN, SIN IMPORTAR
EL TIPO DE TRADUCTOR DE
QUE SE TRATE.

COMPILADORES
FACULTADA DE SISTEMAS
COMPUTACIONALES

7 SEMESTRE

Conceptos relacionados
Arquitectura de
Computadoras

Teora de
Lenguajes

Lenguajes de
Programacin

Compiladores
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

Conceptos
CDIGO FUENTE
Se le da el nombre de cdigo
fuente a los programas escritos en
un determinado lenguaje de
programacin
y
que
est
compuesto
por
instrucciones
escritas por un programador. El
cdigo fuente no constituye
software propiamente dicho pero
es una instancia mediante la cual
se logra el software

Conceptos
Traductores de un Lenguaje de Programacin
Los
traductores
son
programas que traducen los
programas en cdigo fuente,
escritos en lenguajes de alto
nivel, a programas escritos en
lenguaje mquina.

Los traductores pueden ser


de dos tipos: compiladores e
intrpretes

Definicin de compilador

Traductor:

Compilador:

Interprete:

Programa que toma como entrada un texto escrito


(llamado fuente) y da como salida otro texto (llamado objeto).
Traductor cuyo fuente es un lenguaje de alto
nivel y cuyo objeto es un lenguaje de bajo nivel.

traduce.

Compilador que ejecuta al mismo tiempo que

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
fuente

Programa

compilador
mensajes
de error

Aparente complejidad- Tareas bsicas

objeto

Compiladores
El trabajo del compilador y su funcin es
llevar el cdigo fuente escrito en C/C++ a un
programa escrito en lenguaje mquina.
Un programa en cdigo fuente es compilado
obteniendo un archivo parcial (un objeto)
que tiene extensin obj.
Luego el compilador invoca al linker que
convierte al archivo objeto en un ejecutable
con extensin exe;
Este ltimo archivo es un archivo en
formato binario (ceros y unos) y puede
funcionar por s slo.

Interprete
Los intrpretes no producen un lenguaje
objetivo como en los compiladores. Un
intrprete lee el cdigo como est escrito e
inmediatamente lo convierte en acciones; es
decir, lo ejecuta en ese instante.
Existen lenguajes que utilizan un intrprete
(como por ejemplo JAVA) que traduce en el
instante mismo de lectura el cdigo en
lenguaje mquina para que pueda ser
ejecutado.

Ventajas de los compiladores frente a los


interpretes
Solo

se compilan una vez


Ejecucin ms rpida
Optimizacin de cdigo e Informacin del error ms
detallada.

Ventajas de los Interpretes frente a los


Compiladores
Menor

coste espacial
Mayor interactividad en desarrollo
Aadir cdigo en caliente

HISTORIA
Computadoras

Hombre
Cdigo
Mquina

Ensamblador

Cdigo
Mquina

Ensamblador

Cdigo
Mquina

Lenguaje
Ensamblador

Compilador
Lenguaje
Lenguaje de
Ensamblador
Alto Nivel

Parte de la compilacin

Modelo de anlisis y sntesis de la compilacin


Fase

de anlisis (Etapa inicial)


Divide al programa fuente en sus elementos
componentes y crea una representacin intermedia.

Fase

de sntesis (Etapa final)


Construye el programa objeto a partir de la
representacin intermedia.

Existe una gran variedad de software que realiza algn tipo de anlisis sobre
programas fuente, por ejemplo:
Editores de estructuras

Analiza el texto del programa fuente imponindole una estructura jerrquica apropiada.
Tambin puede proporcionar:
Palabras clave de forma automtica
Saltos desde un parntesis, llave, o corchete que abre hasta su correspondiente que cierra.
Ayuda en la edicin de las estructuras propias del lenguaje.
Visualizadores estticos
Imprime el programa fuente de tal forma que visiblemente claro. Por ejemplo:
Los comentarios pueden aparecer con un tipo de letra especial, al igual que las palabras
clave.
Indentacin proporcional a la profundidad del anidamiento.
Verificadores estticos
Lee el programa fuente y lo analiza para intentar descubrir errores potenciales sin ejecutar el
programa. Por ejemplo:
Partes del programa que nunca se podrn ejecutar.
Si una variable se utiliza antes de ser definida.
Intentar utilizar una variable de tipo real como apuntador.
Intrpretes
En lugar de producir un programa objeto como resultado de una traduccin, realiza las
operaciones que implica el programa fuente.
En la mayora de las ocasiones son utilizados para ejecutar rdenes (por ejemplo: el intrprete
de comandos).

Introduccin a la compilacin
Estructura del programa fuente

El contexto de un compilador

Preprocesador

Cuando

se requiere
generar
un
objeto
ejecutable, el compilador
requiere
de
otros
programas.

Programa fuente

Compilador

Programa objeto en lenguaje ensamblador

Ensamblador

Cdigo mquina relocalizable


Libreras, bibliotecas y
Archivos objeto relocalizables

Enlazador y cargador

Cdigo mquina absoluto

1Actividad

Estructura y fases de un

Conceptualmente

un

compilador

en

opera

fases, cada una de las

cuales

transforma

al

programa fuente de una


representacin a otra.

compilador

Estructura y fases de un

compilador

En la compilacin el anlisis consta de tres fases:


Anlisis

lineal
La secuencia de caracteres que forma el programa fuente se
lee de izquierda a derecha y se agrupa en componentes
lxicos, que son secuencias de caracteres que tienen un
significado colectivo.
Anlisis jerrquico
Los componentes lxicos se agrupan jerrquicamente en
colecciones anidadas con un significado colectivo.
Anlisis semntico
Se realizan ciertas revisiones para asegurar que los
componentes de un programa se ajustan de un modo
significativo.

Estructura y fases de un

compilador

Anlisis lineal
Tambin

conocido como: anlisis lxico o exploracin.


Ejemplo, en la proposicin de asignacin:
posicin = inicial + velocidad * 60
Se identifican los siguientes componentes lxicos

Identificador (posicin)
Smbolo de asignacin (=)
Identificador (inicial)
Signo de suma (+)
Identificador (velocidad)
Signo de multiplicacin (*)
Nmero (60)

Los identificadores o nombres reconocidos se organizan en


una tabla de smbolos que se usar en los pasos siguientes

Estructura y fases de un

compilador

Anlisis jerrquico

Tambin llamado anlisis sintctico.

Implica agrupar los componentes lxicos en frases gramaticales que el


compilador utiliza para sintetizar la salida.

Por lo general, las frases gramaticales se representan mediante un


rbol de anlisis sintctico.
Ejemplo: posicin = inicial + velocidad * 60

Proposicin
de asignacin
Identificador
posicin

=
expresin

expresin
+

expresin

identificador

expresin

inicial

identificador

Nmero

velocidad

60

expresin

Estructura y fases de un

compilador

La estructura jerrquica de un programa normalmente se expresa utilizando


reglas recursivas. Para el ejemplo anterior de la proposicin de asignacin se
tiene:
Cualquier identificador es una expresin
Cualquier nmero es una expresin
Si expresin1 y expresin2 son expresiones, entonces tambin lo son:

expresin1 + expresin2
expresin1 * expresin2
Proposicin
(expresin1)
de asignacin
Identificador
posicion

posicin = inicial + velocidad * 60

=
expresin

expresin
+

expresin

identificador

expresin

inicial

identificador

Nmero

velocidad

60

expresin

Estructura y fases de un

Muchos lenguajes definen recursivamente las proposiciones mediante reglas


como:

Si identificador1 es un identificador y expresin2 es un


identificador, entonces:

Identificador1 = expresin2

Si expresin1 es una expresin y proposicin2 es una proposicin,


entonces:

compilador

while ( expresin1 ) do proposicin2


if ( expresin1 ) then proposicin2

El anlisis lineal (lxico) no es suficientemente poderoso para analizar


proposiciones o expresiones recursivas.

Cundo una construccin del lenguaje fuente es recursiva, entonces es


factible emplear una gramtica libre de contexto para formalizar la recursin.

Estructura y fases de un

compilador

Anlisis semntico

Revisa el programa e intenta encontrar errores semnticos.


Rene la informacin sobre los tipos para la fase posterior de generacin
de cdigo.
Un componente importante es la verificacin de tipos.
Se verifica si cada operador tiene los operandos permitidos.
Un real no debe utilizarse como ndice de un arreglo.
Convertir un nmero entero a real para algunos operadores.

posicin = inicial + velocidad * 60

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

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)

Ao 2004

34

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

Proposicin
de asignacin

d1
Identificador
posicion

t3

d2

expresin

expresin

d3

t2
expresin
*

t1

identificador

expresin

inicial

identificador

Nmero

velocidad

60

expresin

OPTIMIZACIN DE CDIGO
Trata de mejorar el cdigo intermedio para que resulte un cdigo de
mquina ms rpido de ejecutar

En el ejemplo:

t2 : = id3 * 60.0
id1 : = id2 + t2
La conversin a real se hace en compilacin
No necesita t1 ni t3.
Proposicin
de asignacin

d1
Identificador
posicion

t3

d2

expresin

expresin

d3

t2
expresin
*

t1

identificador

expresin

inicial

identificador

Nmero

velocidad

60

expresin

Proposicin
de asignacin

d1
Identificador
posicion

t3
d2

expresin

expresin

d3

t2
expresin
*

t1

identificador

expresin

inicial

identificador

Nmero

velocidad

60

expresin

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

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:
MOVF id3, R2
MULF % 60.0, R2
MOVF id2, R1
ADDF R2, R1
MOVF R1, id1

posicion = inicial + velocidad * 60

Administracin de la tabla de smbolos


Registra los identificadores e informacin
referente a ellos.
Se tiene un registro por cada identificador.
Todas las fases hacen uso de esta tabla.
Deteccin e informacin de errores
En cada fase se pueden encontrar errores.
Se debe definir como se deben tratar los
errores en cada una de las fases.
Las fases de anlisis
Cambian la representacin interna del
programa fuente conforme avanza cada
una de ellas.
Generacin de cdigo intermedio
Se puede considerar como cdigo para una
mquina abstracta.
Dicha representacin debe ser fcil de
producir y fcil de traducir al cdigo objeto.
Optimizacin de cdigo
Trata de mejorar el cdigo intermedio de
modo que resulte un cdigo mquina ms
rpido de ejecutar.
Generacin de cdigo
Por lo general se trata de cdigo mquina
relocalizable o cdigo ensamblador.
Se deben seleccionar posiciones de
memoria para cada una de las variables.

Analizador lxico
id1 = id2 + id3 * 60
Analizador sintctico
=
id1

+
id2

*
id3

60

Analizador semntico
=
id1

+
id2
id3

*
ent a real

T ABLA DE SIMBOLOS
1

posicion

inicial

velocidad

60
Generador de cdigo intermedio
temp1 = entreal(60)
temp2 = id3 * temp 1
temp3 = id2 +temp 2
Id1 = temp3
Optimizador de cdigo
temp 1 = id3 * 60.0
temp 2 = id2 +temp 1
Id1 = temp2
Generador de cdigo
MOVF id 3, R2
MULF #60.0, R2
MOVF id 2, R1
ADDF R2, R1
MOV R1, id1

Vel = V0 + Acel

Sentencia fuente a compilar

V1 = V2 + V3

Resultado del EXPLORADOR

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

V1

<term>
<fact>
=
V2

V1 V2 V3 + =
LOAD Acel
ADD V0
STORE Vel

<fact>
+
V3

RECONOCEDOR:

Anlisis sintctico:
la sentencia es correcta

Sentencia en notacin polaca


(subproducto del reconocedor)
Resultado del GEN. DE CDIGO
(instrucciones para mquina )

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
proyectos inform.

Seleccin de herramientas de
desarrollo. Evaluacin de costo y
beneficios.

LENGUAJES Y TIPOS DE

Un lenguaje de programacin se puede definir como:

TRADUCTORES

Notacin formal para describir algoritmos o funciones que sern


ejecutadas por una computadora.
Lenguaje para comunicar instrucciones a la computadora.
Convencin para escribir descripciones que pueden ser evaluadas.

Dentro de los atributos de un buen lenguaje estn:

Claridad y sencillez
Naturalidad para la aplicacin
Apoyo para la abstraccin
Facilidad para verificar programas
Entorno de programacin
Portabilidad de programas
Costo de uso
Costo de ejecucin
Costo de traduccin
Costo de creacin y prueba
Costo de mantenimiento

LENGUAJES Y TIPOS DE

TRADUCTORES

El trmino general traductor denota cualquier procesador de lenguajes que acepta


programas en cierto lenguaje fuente como entrada y produce lenguajes
funcionalmente equivalentes en otro lenguaje objeto.

Varios tipos de traductores tienen nombres especializados:

Ensamblador
Compilador
Cargador o editor de vnculos
Preprocesador o macroprocesador
Conversor fuente-fuente
Simulador o intrprete de software
Compresores
Formateadores

CRITERIOS GENERALES DE SINTAXIS


SINTAXIS

Es la estructura en que se organizan los distintos elementos sintcticos, como


espacios, identificadores, operadores, etc. Es decir el orden que tienen unos con
respecto a otros.

Consiste en un conjunto de reglas para construir programas vlidos.

EJEMPLO:

Adems de su sintaxis, se requiere de su semntica, es decir se requiere


interpretar el significado de los enunciados y estructuras sintcticas.
SEMNTICA: define algunos atributos
como el uso de declaraciones,
operaciones, control de secuencia y
entornos de refinamiento, los cuales
afectan a una variable y no siempre estn
determinados por reglas de sintaxis.

Criterios generales de sintaxis

Legibilidad.
Facilidad de escritura.
Facilidad de verificacin.
Facilidad de traduccin.
Carencia de ambigedad.

ESPECIFICACIN DE TIPO Y
ESTRUCTURA DE DATOS.

Un tipo de dato es un atributo que poseen las variables (y objetos) y que


permite definir el dominio de valores que puede tomar cada una. Tambin
permiten el chequeo de tipos para detectar errores de programacin.

Preguntas

OBJETIVO DE LA UNIDAD I
EL ALUMNO DESCRIBIR LAS ETAPAS EN
EL PROCESO DE COMPILACIN, SIN
IMPORTAR EL TIPO DE TRADUCTOR DE
QUE SE TRATE.

También podría gustarte