You are on page 1of 22

TEMA: CONCEPTOS FUNDAMENTALES

INTEGRANTES:
ROCIO JIMENEZ
LIZ SOSA


Ingeniera en Informtica
Los compiladores son programas de computadora que traducen de un
lenguaje a otro. Un compilador toma como su entrada un programa
escrito en lenguaje fuente y produce un programa equivalente escrito en
lenguaje objeto.
Generalmente al lenguaje fuente se le asocia como lenguaje de alto
nivel, mientras al lenguaje objeto se le conoce como cdigo objeto
(cdigo de maquina) escrito especficamente para una maquina objeto. A
lo largo del proceso de traduccin el compilador debe informar la
presencia de errores en el lenguaje fuente.
Disear y desarrollar un compilador, no es tarea fcil, y quizs pocos
profesionales de la computacin se vean involucrados en esta tarea.
No obstante, los compiladores se utilizan en casi todas las formas de la
computacin y cualquiera involucrado en esta rea debera conocer la
organizacin y el funcionamiento bsico de un compilador.

Utilizacin de un compilador
En las primeras pocas de la informtica, el software de los
compiladores era considerado como uno de los ms complejos
existentes.
Los primeros compiladores se realizaron programndolos
directamente en lenguaje mquina o en ensamblador. Una vez
que se dispone de un compilador, se pueden escribir nuevas
versiones del compilador (u otros compiladores distintos) en el
lenguaje que compila ese compilador.
Actualmente existen herramientas que facilitan la tarea de
escribir compiladores intrpretes informticos. Estas
herramientas permiten generar el esqueleto del analizador
sintctico a partir de una definicin formal del lenguaje de
partida, especificada normalmente mediante una gramtica
formal y barata, dejando nicamente al programador del
compilador la tarea de programar las acciones semnticas
asociadas.

Anlisis: Se trata de la comprobacin de la correccin del
programa fuente, e incluye las fases correspondientes al
Anlisis lxico (que consiste en la descomposicin del
programa fuente en componentes lxicos), Anlisis
sintctico (agrupacin de los componentes lxicos en frases
gramaticales ) y Anlisis semntico (comprobacin de la
validez semntica de las sentencias aceptadas en la fase de
Anlisis Sintctico).
Para poder realizar esta interpretacin es necesario contar
con sistemas de traduccin que son conocidos bajo los
nombres de Compiladores, Intrpretes o Ensambladores,
entre otros sistemas de traduccin, que son los encargados
de llevar estos lenguajes hacia un Sistema Binario de ceros y
unos.
Se traduce las instrucciones en un lenguaje de alto nivel a
instrucciones que la computadora puede interpretar y ejecutar.
Muchas herramientas de software que manipulan programas
fuente realizan primero algn tipo de anlisis.

Algunos ejemplos de tales herramientas son:
o Editores de estructuras: un editor de estructuras toma como
entrada una secuencia de rdenes para construir un programa
fuente.
El editor de estructuras no slo realiza las funciones de creacin y
modificacin de textos de un editor de textos ordinario, sino que
tambin analiza el texto del programa imponiendo al programa
fuente una estructura jerrquica apropiada.
o Verificadores estticos: Un verificador esttico lee un
programa, lo analiza e intenta descubrir errores
potenciales sin ejecutar el programa.
La parte del anlisis es similar a la que se encuentra en los
compiladores de optimacin. As un verificador esttico
puede detectar si hay partes de un programa que nunca se
podrn ejecutar o si cierta variable se usa antes de ser
definida.
o Intrpretes: En lugar de producir un programa objeto
como resultado de una traduccin, un intrprete realiza
las operaciones que implica el programa fuente.
Para una proposicin de asignacin, por ejemplo, un
intrprete podra construir un rbol, y despus efectuar las
operaciones de los nodos conforme as "recorre" el rbol.

Las fases de un compilador son:
Anlisis Lxico: Esta fase se encarga de verificar si
todas las cadenas pertenecen o no al lenguaje. Es decir
realiza un anlisis smbolo por smbolo indicando el
tokens por cada uno de los elementos reconocidos o el
error en caso de no reconocer. Este anlisis no logra
detectar muchos errores por su caracterstica.
Ejemplo:
Total=valor*5
Luego del anlisis lxico:
Id = id * nm.
Anlisis Sintctico: En esta fase se analiza la estructura de las
expresiones en base a gramticas. Aqu ya se puede determinar
una estructura por ejemplo una expresin matemtica mal
formada. El anlisis que se realiza es jerrquico es decir en
base a rboles de derivacin que se obtienen de las mismas
gramticas.
Ejemplo: position:=initial + rate*60

Anlisis Semntico: Este anlisis es ms difcil de
formalizar, determina el tipo de los resultados
intermedios, comprobar que los argumentos que tienen
un operador pertenecen al conjunto de operadores
posible, y si son compatibles entre s.

Generacin de Cdigo Intermedio: El cdigo intermedio es
una representacin en base a elementos de 3 y 4 direcciones.
Lo que nos permite llegar a la fase de optimizacin de cdigo.
a=b+c
1: + b c T1
2: = a T1
Optimizacin de Cdigo: Consiste en realizar una mejora en
el cdigo intermedio, para reducir el nmero de lneas y hacer
que la ejecucin sea ms rpida
a=b+c
1: + b c a
Generacin de Cdigo: Llegamos a la generacin de cdigo
ensamblador o cdigo mquina del procesador que nos
interese por ejemplo:
a:=b+c
LOAD B
ADD C
STORE A

Un compilador opera en fases, de las cuales transforma el
programa fuente de una representacin en otra. Dentro de
las tres primeras fases, que forman la mayor parte de
anlisis de un compilador se analiza la administracin, el
manejo de errores y la fase de anlisis.
Administracin de tabla de smbolos: es la funcin
esencial de un compilador registrando los identificadores
utilizados en el programa fuente y reunir informacin sobre
los distintos atributos de cada identificador. Estos atributos
pueden proporcionar informacin sobre la memoria asignada
a un identificador.
Deteccin e informacin de errores: en cada una de las
fases se puede encontrar errores, sin embargo, despus de
detectar el error, se debe tratar de alguna forma ese error,
para poder continuar con la compilacin.
Las fases de anlisis sintctico y semntico por lo general
manejan una gran proporcin de los errores detectables por
el compilador. La fase lxica detecta los errores donde los
caracteres restantes de la entrada no forman ningn
componente lxico del lenguaje.
Los errores donde la cadena de componentes lxicos viola
las reglas de estructura del lenguaje que son determinados
por la fase del anlisis sintctico. Durante el anlisis
semntico el compilador intenta detectar construcciones
que tengan la estructura sintctica correcta, pero que no
tenga significado para la operacin implicada.
La fase de anlisis: conforme avanza la traduccin, la
representacin interna del programa fuente que tiene el
compilador se modifica.
Compiladores cruzados: generan cdigo para un sistema
distinto del que estn funcionando.
Compiladores optimizadores: realizan cambios en el cdigo
para mejorar su eficiencia, pero manteniendo la
funcionalidad del programa original.
Compiladores de una sola pasada: generan el cdigo
mquina a partir de una nica lectura del cdigo fuente.
Compiladores de varias pasadas: necesitan leer el cdigo
fuente varias veces antes de poder producir el cdigo
mquina.
Compiladores JIT (Just In Time): forman parte de un
intrprete y compilan partes del cdigo segn se necesitan.

Se muestran algunas herramientas disponibles que pueden
utilizarse para la realizacin del proyecto de compiladores.
Todas las herramientas aqu expuestas funcionan bajo Windows.
BISON
COCO/R
FLEX
LEX
SDGLL1
TS 2006
TS
TS-OO
YACC
Se han creado algunas herramientas generales para el
diseo automtico de componentes especficos de
compilador.
Estas herramientas utilizan lenguajes especializados para
especificar e implantar el componente, y pueden utilizar
algoritmos bastante complejos.
Las herramientas ms efectivas son las que ocultan los
detalles del algoritmo de generacin y producen
componentes que se pueden integrar con facilidad al resto
del compilador.
La siguiente es una lista de algunas herramientas
tiles para la construccin de compiladores:
Generadores de analizadores sintcticos: Estos
generadores producen analizadores sintcticos,
normalmente a partir de una entrada fundamentada en
una gramtica independiente del contexto.
En los primeros compiladores, el anlisis sintctico
consuma no solo gran parte del tiempo de ejecucin del
compilador, sino gran parte del esfuerzo intelectual de
escribirlo. Esta fase se considera ahora una de las ms
fciles de aplicar.
Muchos de los generadores de analizadores sintcticos
utilizan poderosos algoritmos de anlisis sintctico, y son
demasiado complejos para realizarlos manualmente.
Generadores de analizadores lxicos: Estas
herramientas generan automticamente analizadores
lxicos, por lo general a partir de una especificacin
basada en expresiones regulares. La organizacin bsica
del analizador lxico resultante es en realidad un
autmata finito. Una herramienta muy utilizada en la
especificacin de analizadores lxicos para varios
lenguajes es el compilador LEX.
Dispositivos de traduccin dirigida por la sintaxis:
Estos producen grupos de rutinas que recorren el rbol
de anlisis sintctico, generando cdigo intermedio. La
idea bsica es que se asocian una o ms traducciones
con cada nodo del rbol de anlisis sintctico, y cada
traduccin se define partiendo de traducciones en sus
nodos vecinos en el rbol.

Generadores automticos de cdigo: Tales
herramientas toman un conjunto de reglas que definen
la traduccin de cada operacin del lenguaje intermedio
al lenguaje de mquina para la maquina objeto. Las
reglas deben incluir suficiente detalle para poder
manejar los distintos mtodos de acceso posibles a los
datos; por ejemplo, las variables pueden estar en
registros, en una posicin fija (esttica) de memoria o
pueden tener asignada una posicin en una pila. La
tcnica fundamental es la de concordancia de
plantillas.
Dispositivos para anlisis de flujo de datos: Mucha de
la informacin necesaria para hacer una buena
optimacin de cdigo implica hacer un anlisis de
flujo de datos, que consiste en la recoleccin de
informacin sobre la forma en que se transmiten los
valores de una parte de un programa a cada una de las
otras partes.
Las distintas tareas de esta naturaleza se pueden efectuar
esencialmente con la misma rutina, en la que el usuario
proporciona los detalles relativos a la relacin que hay
entre las proposiciones en cdigo intermedio y la
informacin que se est recolectando.
Este trabajo servir en el momento de la creacin de un
compilador, ya que en l se detallan todas y cada una de
las partes que involucran a este. Podemos decir que
existen distintos tipos de compiladores. En los aos 50 se
tardaron hasta 18 aos trabajando en un compilador, sin
embargo ahora podemos construir en un mximo de tiempo
de 6 meses un compilador ya que ahora tenemos todas las
herramientas para agilizar la construccin.

You might also like