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

Semana 1: Introduccin

MG. GMEZ AVILA, JOS

Presentacin
Mg. Gmez Avila Jos
3 Unidades de Aprendizaje
1 Proyecto de Curso
3 Exmenes
Terico
Laboratorio (2)
Exposicin Proyecto

Correo:

jgomez@steperu.com
jgomez@unitru.edu.pe

Horario de Consultas
Jueves 4 5 pm

MG. GMEZ AVILA, JOS

Autmata

Compiladores
Es un compilador es un traductor especial que toma un lenguaje de alto nivel, y lo traduce a
una representacin de bajo nivel que el computador puede ejecutar en ltima instancia.
Los compiladores que hacen la traduccin de un lenguaje de alto nivel a lenguaje
ensamblador. El ensamblador puede entonces finalizar el proceso de traduccin y el
sistema enlazador/cargador puede preparar el programa para su ejecucin.

Lenguaje de alto nivel

Compilador

Programa de bajo nivel

Adicional

PROGRAMAS RELACIONADOS CON LOS COMPILADORES


INTRPRETES
Un intrprete es un traductor de lenguaje, igual que un compilador, pero difiere de ste en que ejecuta el
programa fuente inmediatamente, en vez de generar un cdigo objeto que se ejecuta despus de que se
completa la traduccin.
Cualquier lenguaje de programacin se puede interpretar o compilar, pero se puede preferir un intrprete a un
compilador dependiendo del Lenguaje que se est usando y de la situacin en la cual se presenta la traduccin.
Es preferible usar un compilador si lo que importa es la velocidad de ejecucin, ya que el cdigo objeto
compilado es siempre ms rpido que el cdigo fuente interpretado, en ocasiones hasta por un factor de 10 o
ms.

Ejemplo: LISP, BASIC, etc.

ENSAMBLADORES
Un ensamblador es un traductor para el lenguaje ensamblador de una computadora en particular.
El lenguaje ensamblador es una forma simblica del lenguaje de mquina de la computadora y es particularmente
fcil de traducir.
En ocasiones un compilador generar lenguaje ensamblador como su lenguaje objetivo y depender entonces de un
ensamblador para terminar la traduccin a cdigo objeto.
LIGADORES
Los compiladores como los ensambladores a menudo dependen de un programa conocido como ligador, el cual
recopila el cdigo que se compila o ensambla por separado en diferentes archivos objeto, a un archivo que es
directamente ejecutable.
Se puede hacerse una distincin entre cdigo objeto (cdigo de mquina que todava no se ha ligado) y cdigo de
mquina ejecutable. Un ligador tambin conecta un programa objeto con el cdigo de funciones de libreras
estndar, as como con recursos suministrados por el sistema operativo de la computadora, tales como asignadores
de memoria y dispositivos de entrada y salida.
Los ligadores ahora realizan la tarea que originalmente era una de las principales actividades de un compilador
(compilador: construir mediante la recopilacin o compilacin de fuentes diferentes)

CARGADORES
Un compilador, ensamblador o ligador produce un cdigo que todava no est completamente organizado y
Iisto para ejecutarse, pero cuyas principales referencias de memoria se hacen relativas a una localidad de
arranque indeterminada que puede estar en cualquier sitio de la memoria.
Por tanto el cdigo es relocalizable y un cargador resolver tantas las direcciones relocalizables relativas a una
direccin base, o de inicio, dada.
El uso de un cargador hace ms flexible el cdigo ejecutable, pero el proceso de carga con frecuencia ocurre en
segundo plano (como parte del entorno operacional) o conjuntamente con el ligado.

PREPROCESADORES
Un preprocesador es un programa separado que es invocado por el compilador antes de que comience la
traduccin real.
Un preprocesador de este tipo puede eliminar los comentarios, incluir otros archivos y ejecutar sustituciones
de macro (una macro es una descripcin abreviada de una secuencia repetida de texto).
Los preprocesadores pueden ser requeridos por el lenguaje (como en C) o pueden ser agregados posteriores
que proporcionen facilidades adicionales.

EDITORES
Los compiladores por lo regular aceptan programas fuente escritos utilizando cualquier editor que pueda
producir un archivo estndar, tal como un archivo ASCII.
Los compiladores han sido integrados junto con editores y otros programas en un ambiente de desarrollo
interactivo o IDE.
Un editor, mientras que an produce archivos estndar, puede ser orientado hacia el formato o estructura del
lenguaje de programacin en cuestin. Estos editores se denominan basados en estructura y ya incluyen
algunas de las operaciones de un compilador.
Ejemplo, el editor puede informar al programador de los errores a medida que el programa se vaya escribiendo
en lugar de hacerlo cuando est compilado.
El compilador y sus programas acompaantes tambin pueden llamarse desde el editor, de modo que el
programador pueda ejecutar el programa sin tener que abandonar el editor

DEPURADORES
Un depurador es un programa que puede utilizarse para determinar los errores de ejecucin en un programa
compilado. A menudo est integrado con un compilador en un IDE.
La ejecucin de un programa con un depurador se diferencia de la ejecucin directa en que el depurador se
mantiene al tanto de la mayora o la totalidad de la informacin sobre el cdigo fuente, tal como los nmeros
de lnea y los nombres de las variables y procedimientos.
Tambin puede detener la ejecucin en ubicaciones previamente especificadas denominadas puntos de
ruptura, adems de proporcionar informacin de cules funciones se han invocado y cules son Los valores
actuales de las variables.
Para efectuar estas funciones el compilador debe suministrar al depurador la informacin simblica
apropiada, lo cual en ocasiones puede ser difcil, en especial en un compilador que intente optimizar el cdigo
objeto.

PERFILADORES
Un perfilador es un programa que recolecta estadsticas sobre el comportamiento de un programa objeto
durante la ejecucin.
Las estadsticas tpicas que pueden ser de inters para el programador son el nmero de veces que se llama
cada procedimiento y el porcentaje de tiempo de ejecucin que se ocupa en cada uno de ellos.
Las estadsticas pueden ser muy tiles para ayudar al programador a mejorar la velocidad de ejecucin del
programa.
A veces el compilador utilizar incluso la salida del perfilador para mejorar de manera automtica el cdigo
objeto sin la intervencin del programador

FASES DEL COMPILADOR


El proceso de compilacin puede describirse como una secuencia de fases seriadas que comienzan con el
anlisis lexicogrfico y finalizan con la generacin de cdigo, con el manejo de tablas, mdulos de error y de
E/S que interactan con ms de una fase:

Anlisis
lexicogrfico
(rastreo)

Anlisis sintctico
(gramatical)

Manejo de tabla
Tabla de smbolos
Tabla de literales
Tabla de ciclos iterativos
Tabla de representacin
intermedia

Anlisis semntico

Optimizacin

Preparacin para
la generacin del
cdigo

Generacin del
cdigo
Manejo de
errores

E/S

Por ejemplo: muchos compiladores son controlados por el analizador gramatical (parsing) que significa que
el analizador sintctico recurre al analizador lexicogrfico, en vez de que el analizador lexicogrfico complete la
tarea antes de que comience el analizador sintctico.
Esquema:

Manejo de
Errores

Anlisis
lexicogrfico
(rastreo)

Anlisis
sintctico
(gramatical)
Anlisis
semntico

Manejo de tabla
Tabla de smbolos
Tabla de literales
Tabla de ciclos iterativos
Tabla de representacin intermedia
Preparacin para
a la generacin

Optimizacin

Generacin
del cdigo

E/S

EJEMPLO: Un problema simple de compilador

Compilador

Anlisis
lexicogrfico
(rastreo)

Anlisis sintctico
(gramatical)

?
Anlisis semntico

Optimizacin

X1= a + bb*12;
X2= a/2 + bb*12;

Preparacin para
la generacin del
cdigo

Generacin del
cdigo

Primera fase: Anlisis lexicogrfico


Anlisis
lexicogrfico
(rastreo)

Anlisis
sintctico
(gramatical)

Anlisis
semntico

Optimizacin

TOKENS
Manejo de tabla
Tabla de smbolos
Tabla de literales
Tabla de ciclos iterativos
Tabla de representacin
intermedia

Preparacin para
la generacin del
cdigo

Generacin del
cdigo
Manejo de
errores

E/S

El anlisis lexicogrfico, tambin conocido como rastreo o en ocasiones rastreo y filtrado o incluso menos
formalmente, lexicografa o reconocimiento de componentes lxicas (tokenizing), agrupa secuencias de
caracteres desde el programa fuente de entrada en unidades llamadas componentes lxicas o tokens.

Secuencia de caracteres

Secuencia de tokens

Tokens
Los tokens (componentes lxicas) son las unidades lxicas bsicas del mismo modo en que las palabras y los
signos de puntuacin son las unidades bsicas de una oracin en ingls.
Los tokens varan de lenguaje de lenguaje, e incluso de compilador en compilador para el mismo lenguaje.
La eleccin de los tokens es una de las tareas del diseador de compiladores.
Existen 3 unidades lxicas bsicas o tokens como secuencias especiales de caracteres, las cuales comprenden
las palabras de nuestro lenguaje. Un token es la unidad ms pequea de lenguaje que tiene significado.
En el anlisis lexicogrfico, la secuencia de caracteres se rastrea hasta que se encuentra una secuencia
permitida, luego se filtra para clasificarla por medio de un tipo como entero o palabra clave o identificador, etc.
Ejemplos:
La palabra clave:
La constante: 12
El identificador: X1
El operador < +
Puntuacin ( ;

SI

IF

Del ejemplo:

Los tokens son:

X1= a + bb*12;
X2= a/2 + bb*12;

X1 = a + bb * 12
Los tokens se describen en 2 partes: tipo o clase y un valor.
a[index] = 4 + 2
Este cdigo contiene 12 caracteres diferentes de un espacio en blanco pero slo 8 tokens:
a
[
index
]
=
4
+
2

identificador
corchete izquierdo
identificador
corchete derecho
asignacin
Nmero
signo ms
Nmero

identificador
Puntuacin
identificador
Puntuacin
Operador
Literales
Operador
Literales

ANALISIS SINTACTICO o GRAMATICAL (parsing)


Anlisis
lexicogrfico
(rastreo)

Anlisis
sintctico
(gramatical)

TOKENS

Anlisis
semntico

Optimizacin

ARBOL DE ANALISIS
GRAMATICAL

Manejo de tabla
Tabla de smbolos
Tabla de literales
Tabla de ciclos iterativos
Tabla de representacin
intermedia

Preparacin para
la generacin del
cdigo

Generacin del
cdigo
Manejo de
errores

E/S

El anlisis sintctico es ms complejo que el anlisis lexicogrfico. El anlisis sintctico o fase gramatical de un
compilador, agrupa los tokens en estructuras sintcticas en forma muy similar a como tenamos que
estructurar las oraciones (prim.)
bb * 12

consta de 3 tokens

bb * 12 se agrupa en la estructura: expresin

X1= a + bb * 12

consta de ? Tokens

..

se agrupa en sentencia de asignacin


que existe una expresin

En el proceso de encontrar la estructura sintctica, la fase de sintaxis tambin determina si la secuencia de


tokens es sintcticamente correcta, de acuerdo con la definicin del lenguaje.
Las estructura reconocida por el anlisis sintctico se describe en forma semejante a un rbol conocido como
rbol sintctico, rbol gramatical o rbol de estructura.
X1= a + bb*12;
X2= a/2 + bb*12;

ANALISIS SEMANTICO
Anlisis
lexicogrfico
(rastreo)

Anlisis
sintctico
(gramatical)

TOKENS

Anlisis
semntico

ARBOL DE ANALISIS
GRAMATICAL

Manejo de tabla
Tabla de smbolos
Tabla de literales
Tabla de ciclos iterativos
Tabla de representacin
intermedia

Optimizacin

RI
Manejo de
errores

Preparacin para
la generacin del
cdigo

Generacin del
cdigo

E/S

El anlisis semntico toma como entrada el rbol del anlisis gramatical, determinando el significado
(semntica) del programa mediante la creacin de tablas de smbolos, verificando cules de las variables
utilizadas han sido definidas.
2 tareas principales: Verificacin esttica / generacin de una representacin intermedia (RI)

Verificacin esttica
Completa el anlisis iniciado por el analizador gramatical y efecta actividades como la afirmacin de que una
variable con valor de carcter no haya sido asignada a una variable declarada con valor entero. Verificacin
de tipos.
Ejemplo: Es correcta la expresin a*b + c?
Rpta: ????
Otra verificacin esttica es la dimensin de un arreglo (o vector): en un arreglo declarado como bidimensional
no puede utilizarse con 3 ndices.
Ejemplo: es correcto lo siguiente:
int x=0;
for(int i=0;i<=10; i++) {
}

r += x*i;

Representacin Intermedia (RI)


El lenguaje intermedio o cdigo Intermedio (RI, LI o CI), es una forma alternativa para un rbol de anlisis
gramatical. A veces el analizador gramatical crear su representacin intermedia en forma directa y en
ocasiones el rbol de ste se convierte a la representacin.

X=X+1

SI (A < B) ENTONCES X=X+1


=

SI

<

+
X

=
B

+
X

EJERCICIO: Construir el rbol abstracto

X1= a + bb*12;
X2= a/2 + bb*12;

RESULTADO
- Las expresiones se unen en un punto. (;)
- La prioridad basada en los operadores segn las expresiones.
- Constantes (literales como operadores pueden estar en el mismo
Nivel, pero con diferente expresin.

OPTIMIZACION
Anlisis
lexicogrfico
(rastreo)

Anlisis
sintctico
(gramatical)

TOKENS

Anlisis
semntico

ARBOL DE ANALISIS
GRAMATICAL

Manejo de tabla
Tabla de smbolos
Tabla de literales
Tabla de ciclos iterativos
Tabla de representacin
intermedia

Optimizacin

Preparacin para
la generacin del
cdigo

RI AlteradaGeneracin del

RI

cdigo

Manejo de
errores

E/S

La fase de optimizacin cambia la representacin intermedia de modo que la fase final de generacin de
cdigo producir cdigo que se ejecutar ms rpido u ocupar menos espacio (o ambas cosas).

Tipos de Optimizacin:
- Optimizaciones locales que realizan dentro de una sentencia o grupos de sentencia
- Optimizaciones de ciclos iterativos que se realizan dentro de los ciclos.
- Optimizaciones globales que son efectuadas sobre todo un programa o procedimiento
- Optimizaciones de mirilla (aquellas que se realizan despus de que el cdigo es seleccionado atisbando
por una pequea secuencia de cdigo)

Propagacin constante (Optimizacin local)


X=3; . A = B + X;

En ensamblador es:

.
=
X

=
3

+
B

Mueve #3, X;
Mueve la constante 3 a X.
.
.
Acarreo de memoria
.
Suma X,B,A;
Suma X a B y se almacena en A
Reemplazo de contenido a 3

Eliminacin de sub-expresiones comunes (Op. Local)


A = B * C; D = B * C;
Suponga que un algoritmo ha determinado que la segunda sentencia se ejecuta siempre si la primera est
presente y que no se ha hecho ningn cambio a B y C entre las 2 sentencias.
Un algoritmo para eliminacin de sub-expresiones comunes debe cambiar a:

T = B * C;

A = T;

D = T;

Aunque el cdigo resultante requiere ms espacio, se ejecutar ms


rpidamente debido a puede copiar informacin de forma ms rpida que
multiplicar la expresin.

EJERCICIO
X1= a + bb*12;
X2= a/2 + bb*12;
EL RI mejorado?

Optimizacin

PREPARACION PARA LA GENERACION DE CODIGO


Anlisis
lexicogrfico
(rastreo)

Anlisis
sintctico
(gramatical)

Manejo de tabla
Tabla de smbolos
Tabla de literales
Tabla de ciclos iterativos
Tabla de representacin
intermedia

Anlisis
semntico

Optimizacin

Preparacin para
la generacin del
cdigo

Generacin del
cdigo
Manejo de
errores

Asignacin
de
memoria y
registros

E/S

Cuando se ejecuta un programa, los valores para sus variables y expresiones se almacenan en la memoria y los
registros.
El compilador decide muchas de las cuestiones acerca de dnde residirn estos valores. 2 de las cuestiones en
la preparacin de la generacin del cdigo son, entonces, la asignacin de memoria y la asignacin de
registros.

Asignacin de memoria / registros (P. Gen. de cdigo)


La asignacin y el mantenimiento de espacio en memoria para conversar los valores de las variables y
expresiones se conoce como asignacin de memoria.
Uno de los dilemas en la asignacin de memoria es si la memoria debe ser asignada en forma esttica, esto es,
fijada en tiempo de compilacin o si el almacenamiento puede estar en una pila cuyo tamao cambia a medida
que se ejecuta el programa.
Los registros se utilizan para conversar los valores de las variables y expresiones. Los programas se ejecutan
ms rpido cuando las operaciones se efectan sobre datos en registros que s estn en la memoria.
Por tanto el compilador tratar de conversar los valores que son accesados con mayor frecuencia en registros.
Determinar cules valores conservar en registros es una tarea tediosa.

EJEMPLO
Memoria de pila

Preparacin para
la generacin del
cdigo

Tope
de Pila

a a
bb
Direccion de X1
Direccion de X2

Registros
Registro 1

bb*12

Registro 2

a, a/2

Registro S

Tope de la pila

Generacin de cdigo
La generacin de cdigo significa la traduccin de la representacin intermedia a lenguaje ensamblador,
despus de optimizacin y asignaciones de memoria / registros.
En la generacin de cdigo la seleccin de secuencias de instrucciones ingeniosas. Aunque las secuencias de
cdigo misteriosas pero eficientes deberan ser documentadas, obtener cdigo legible no es el objetivo de la
generacin de cdigo.

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