Professional Documents
Culture Documents
S
UNIDAD
COMPONENTES DE UN
COMPILADOR
Que es un Compilador?
Los compiladores son programas o herramientas encargadas de
compilar. Un compilador toma un texto (cdigo fuente) escrito en
un lenguaje de alto nivel y lo traduce a un lenguaje comprensible
por
las
computadoras
(cdigo
objeto).
Un programa informtico que traduce un programa escrito en un
lenguaje de programacin a otro lenguaje de programacin,
generando un programa equivalente que la mquina ser capaz
de interpretar. El segundo lenguaje es lenguaje de mquina, pero
tambin puede ser simplemente texto. Este proceso de
traduccin se conoce como compilacin. Un compilador es un
programa que permite traducir el cdigo fuente de un programa
en lenguaje de alto nivel
Tipos de Compiladores
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.
Caractersticas
Generalmente un compilador se divide en dos partes:
* Front End: parte que analiza el cdigo fuente, comprueba su validez,
genera el rbol de derivacin y rellena los valores de la tabla de smbolos.
Parte que suele ser independiente de la plataforma o sistema operativo para
el que funcionar.
* Back End: parte en donde se genera el cdigo mquina exclusivo para
una plataforma a partir de lo analizado en el front end.
Por lo general el resultado del back end no puede ser ejecutado
directamente, se necesita pasar por un proceso de enlazado (linker).
Compiladores de JAVA
El lenguaje de programacin Java , fue diseado por la
compaa Sun Microsystems Inc, con el propsito de crear
un
lenguaje
que
pudiera
funcionar
en
redes
computacionales heterogneas ( redes de computadoras
formadas por ms de un tipo de computadora, ya sean PC,
MAC's, estaciones de trabajo , etc.),y que fuera
independiente de la plataforma en la que se vaya a ejecutar.
Esto significa que un programa de Java puede ejecutarse
en cualquier mquina o plataforma.
Caractersticas de compiladores
de JAVA
Evitar errores de memoria
Imposibilitar acceso al SO
Evitar que caiga la mquina sobre la que
corre
Ausencia de punteros: Protege frente a
imitacin de objetos, violacin de
encapsulacin, acceso a reas protegidas
de memoria, ya que el programador no
podr referenciar posiciones de memoria
especficas no reservadas, a diferencia de lo
que se puede hacer en C y C++.
Compiladores de C#
Es un lenguaje de programacin orientado a
objetos desarrollado y estandarizado por
Microsoft como parte de su plataforma .NET .
Esta es una interfaz de programacin de
aplicaciones ( API ), mientras que C es un
lenguaje de programacin independiente
diseado para generar programas sobre dicha
plataforma
Tipos de Compiladores
Microsoft.NET framework SDK (siglas en ingls de
software development kit) es generalmente un conjunto de
herramientas de desarrollo de software que le permite al
programador crear aplicaciones para un sistema concreto,
por ejemplo ciertos paquetes de software, frameworks,
plataformas de hardware, computadoras, videoconsolas,
sistemas operativos, etc. incluye un compilador de C
Microsoft Visual Studio versin 2002, 2003, 2005, 2008 y
2010
Mono
.NET desarrollado por Novell . Como parte de esta
implementacin se incluye un compilador de C.
Delphi 2006, de Borland Software Corporation. dotGNU
Portable.NET , de la Free Software Foundation .
Caractersticas compiladores C
#
Un ncleo del lenguaje simple, con funcionalidades aadidas
importantes, como funciones matemticas y de manejo de archivos,
proporcionadas por bibliotecas .
Es un lenguaje muy flexible que permite programar con mltiples estilos.
Un sistema de tipos que impide operaciones sin sentido.
Usa un lenguaje de pre procesado , el preprocesador de C , para tareas
como definir macros e incluir mltiples archivos de cdigo fuente .
Acceso a memoria de bajo nivel mediante el uso de punteros .
Interrupciones al procesador con uniones .
Un conjunto reducido de palabras clave
Compiladores vs Interpretes
Cualquier lenguaje puede ser ejecutado tanto va intrprete o va
compilador, pero algunos lenguajes suelen asociarse ms a una va que a
la otra, y por esto son llamados "lenguajes interpretados" o "lenguajes
compilados" respectivamente.
Tambin existen intrpretes que incluyen cierta "compilacin" en el medio.
Son aquellos que compilan a un cdigo intermedio llamado bytecode, que
es ms eficiente de ejecutar que hacerlo directamente desde el cdigo
fuente.
En general, la principal desventaja de los intrpretes, es que cuando un
programa es interpretado, suele ejecutarse ms lento que si el mismo
programa estuviese compilado. Esto se debe a que el intrprete debe
analizar cada sentencia en el programa en cada ejecucin (un anlisis en
tiempo real). Tambin el acceso a variables es ms lento en un intrprete,
porque mapear los identificadores para almacenar las localizaciones debe
hacerse repetidas veces en tiempo real.
ANALISIS LEXICO
Un analizador lxico o analizador lexicogrfico (en
ingls scanner) es la primera fase de un compilador
consistente en un programa que recibe como entrada el
cdigo fuente de otro programa (secuencia de
caracteres) y produce una salida compuesta de tokens
(componentes lxicos) o smbolos. Estos tokens sirven
para una posterior etapa del proceso de traduccin,
siendo la entrada para el analizador sintctico (en ingls
parser).
Sin embargo, un analizador lxico tambin es la parte
del traductor que maneja la entrada del cdigo fuente, y
puesto que esta entrada a menudo involucra un
importante gasto de tiempo, el analizador lxico debe
funcionar de manera tan eficiente como sea posible.
GRAMTICA LXICA
La especificacin de un lenguaje de programacin a menudo incluye un
conjunto de reglas que definen el lxico. Estas reglas consisten comnmente
en expresiones regulares que indican el conjunto de posibles secuencias de
caracteres que definen un Token o lexema.
En algunos lenguajes de programacin es necesario establecer patrones
para caracteres especiales (como el espacio en blanco) que la gramtica
pueda reconocer sin que constituya un Token en s.
ANLISIS
Esta etapa est basada usualmente en una mquina de estados finitos. Esta
mquina contiene la informacin de las posibles secuencias de caracteres
que puede conformar cualquier Token que sea parte del lenguaje (las
instancias individuales de estas secuencias de caracteres son denominados
lexemas). Por ejemplo, un Token de naturaleza entero puede contener
cualquier secuencia de caracteres numricos.
ANALISIS SINTACTICO
El anlisis sintctico convierte el texto de entrada en otras
estructuras (comnmente rboles), que son ms tiles para el
posterior anlisis y capturan la jerarqua implcita de la entrada. Un
analizador lxico crea tokens de una secuencia de caracteres de
entrada y son estos tokens los que son procesados por el
analizador sintctico para construir la estructura de datos, por
ejemplo un rbol de anlisis o rboles de sintaxis abstracta.
El anlisis sintctico tambin es un estado inicial del anlisis de
frases de lenguaje natural. Los lenguajes habitualmente
reconocidos por los analizadores sintcticos son los lenguajes
libres de contexto.
Tipos generales
gramticas:
de
analizadores
sintcticos
para
ANALISIS SEMANTICO
Que es la semntica?
Se refiere a los aspectos del significado, sentido o interpretacin
del significado de un determinado elemento, smbolo, palabra,
expresin o representacin formal.
Anlisis semntico
Se trata de determinar el tipo de los resultados intermedios,
comprobar que los argumentos que tiene un operador
pertenecen al conjunto de los operadores posibles, y si son
compatibles entre s, etc. En definitiva, comprobar que el
significado de lo que se va leyendo es vlido.
Tabla de smbolos
Un compilador necesita guardar y usar la informacin de
los objetos que se va encontrando en el texto fuente, como
variables, etiquetas, declaraciones de tipos, etc.
Esta informacin se almacena en una estructura de datos
interna
conocida
como
tabla
de
smbolos.
El compilador debe desarrollar una serie de funciones
relativas a la manipulacin de esta tabla como insertar un
nuevo elemento en ella, consultar la informacin
relacionada con un smbolo, borrar un elemento, etc.
Como se tiene que acceder mucho a la tabla de smbolos
los accesos deben ser lo ms rpidos posible para que la
compilacin
sea
eficiente.
OPTIMIZACION DE CODIGO
Generacin de cdigo
Se realiza mientras se analiza el programa
Libre del contexto
Optimizacin
Se realiza despus de la generacin de cdigo de
todo el programa o de un elemento ejecutable del
programa (funcin, procedimiento, etc).
Dependiente del contexto
Se ejecuta todo
junto. Mientras
se analiza se
genera cdigo
Optimizacin
Objetivo
Obtener cdigo que se ejecuta ms eficientemente segn los
criterios
Tiempo de ejecucin (optimizacin temporal)
Espacio de memoria utilizado (optimizacin espacial)
Funcionamiento
Revisa el cdigo generado a varios niveles de abstraccin y
realiza las optimizaciones aplicables al nivel de abstraccin
Representaciones de cdigo intermedio de ms a menos
Abstractas
rbol sintctico abstracto: optimizar subexpresiones
redundantes, reduccin de frecuencia, etc.
Ensamblador/Cdigo mquina: convertir saltos
cortos,reordenar instrucciones
saltos
Optimizacin
Funcionamiento (continuacin)
Representaciones de cdigo para extraer informacin.
Condiciones que se han de cumplir
El cdigo optimizado se ha de comportar igual que el cdigo
de partida excepto por ser ms rpido o ocupar menos
espacio.
Hay que buscar transformaciones que no modifiquen el
comportamiento del cdigo segn el comportamiento
definido para el lenguaje de programacin. Ejemplo
Si no se ha definido el orden de evaluacin de los operandos
la siguiente optimizacin es vlida
B=2*A+(A=c*d);
Pasar a
A=c*d;
B=A*2;
BLOQUE BSICO
Un bloque bsico es un fragmento de cdigo que tiene una
nica entrada y salida, y cuyas instrucciones se ejecutan
secuencialmente. Implicaciones:
Si se ejecuta una instruccin del bloque se ejecutan todas
en un orden conocido en tiempo de compilacin.
La idea del bloque bsico es encontrar partes del programa
cuyo anlisis necesario para la optimizacin sea lo ms
simple posible.
MANEJO DE ERRORES
Errores Lxicos
Un error que produce un token errneo
Errores lxicos posibles
Un identificador, palabra reservada u operador mal escrito
(typo)
Errores Sintcticos
Un error de sintaxis se detecta cuando el analizador sintctico
espera un smbolo que no corresponde al que se acaba de
leer. Los analizadores sintcticos tienen la ventaja de que
pueden detectar errores sintcticos lo ms pronto posible, es
decir, se genera un mensaje de error en cuanto el smbolo
analizado no sigue la secuencia de los smbolos analizados
hasta ese momento.
Expresin aritmtica con parntesis no balanceados
Un punto y coma faltante
Errores Semnticos
Un error que necesita informacin sensitiva al contexto para ser
identificado
Ejemplos
Un operador aplicado a un tipo incompatible de operando
Accesar una variable no declarada
Errores Lgicos
Errores en el modelo de ejecucin
Ejemplos
Recursin infinita
Accesar un arreglo fuera de los lmites
Diferenciar un null