Sei sulla pagina 1di 14

Introduccin a Compiladores e Intrpretes

Contenido
Traductores
Definiciones
Ventajas y desventajas de compiladores
Ventajas y desventajas de Interpretes
Etapas del proceso de compilacin
Traductor:
Un Traductor es un programa que toma como entrada un texto escrito en un
lenguaje y da como salida otro texto en un lenguaje diferente.


Tipos de Traductores
Traductor
Traductor de Idioma
Compilador
Interprete
Preprocesador
Interprete de Comandos
Ensamblador
MacroEnsamblador
Conversor de Cdigo
AutoCompilador
MetaCompilador
Descompilador
Autmata
Gramtica
Ligador


Ensamblador:
Es un lenguaje de bajo nivel, donde cada sentencia del lenguaje fuente se traduce
a una instruccin en cdigo mquina.

Compilador:
Es un traductor que convierte un texto escrito en un lenguaje de alto nivel a un
lenguaje de bajo nivel (cdigo objeto o mquina).




Podemos decir que es el tipo de traductor ms conocido. Se trata de un programa
que traduce cdigo fuente escrito en un lenguaje de alto nivel (Pascal) en cdigo
mquina (no siempre). Son ms rpidos que los intrpretes pero presentan mayor
dificultad a la hora de detectar errores. Un compilador es un programa que lee el
cdigo escrito en un lenguaje (lenguaje origen), y lo traduce o traduce en un
programa equivalente escrito en otro lenguaje (lenguaje objetivo). Como una
parte fundamental de este proceso de traduccin, el compilador le hace notar al
usuario la presencia de errores en el cdigo fuente del programa.

Etapas del proceso de compilacin:
1. Edicin. Esta fase consiste en escribir el programa empleando algn
lenguaje y un editor. Como resultado nos dar el cdigo fuente de nuestro
programa.
2. Compilacin. En esta fase se traduce el cdigo fuente obtenido en la fase
anterior a cdigo mquina. Si no se produce ningn error se obtiene el cdigo
objeto.
En caso de errores el compilador los mostrara para ayudarnos a corregirlos
y se procedera a su compilacin de nuevo, una vez corregidos.
3. Linkado. Esta fase consiste en unir el archivo generado en la fase dos con
determinadas rutinas internas del lenguaje, obteniendo el programa
ejecutable.
Existen dos tipos de linkados:
o Linkado esttico: Los binarios de las libreras se aaden a nuestros
binarios compilados generando el archivo ejecutable.
o Linkado dinmico: no se aaden las libreras a nuestro binario sino
que har que se carguen en memoria las libreras que en ese
momento se necesiten.
Una vez traducido, compilado y linkado el archivo est listo para su ejecucin donde
tambin podrn surgir problemas y fallos, para los cuales tendramos que volver a
realizar todo el proceso anteriormente citado, de modo que puedan ser
corregidos. Por este motivo es importante realizar numerosas pruebas en tiempo de
ejecucin antes de presentar el programa al cliente.


Partes de un compilador
Normalmente los compiladores estn divididos en dos partes:
Front End: es la parte que analiza el cdigo fuente, comprueba su validez,
genera el rbol de derivacin y rellena los valores de la tabla de smbolos.
Esta parte suele ser independiente de la plataforma o sistema para el cual se
vaya a compilar.
Back End: es la parte que genera el cdigo mquina, especfico de una
plataforma, a partir de los resultados de la fase de anlisis, realizada por
el Front End.
Esta divisin permite que el mismo Back End se utilice para generar el cdigo
mquina de varios lenguajes de programacin distintos y que el mismo Front
End que sirve para analizar el cdigo fuente de un lenguaje de
programacin concreto sirva para la generacin de cdigo mquina en varias
plataformas distintas.
El cdigo que genera el Back End normalmente no se puede ejecutar
directamente, sino que necesita ser enlazado por un programa enlazador (linker).
Tipos de compiladores
Esta taxonoma de los tipos de compiladores no es excluyente, por lo que puede
haber compiladores que se adscriban a varias categoras:
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 (J ust In Time): forman parte de un intrprete y compilan
partes del cdigo segn se necesitan.


Fases de un Compilador
Cada fase lleva a cabo una tarea sobre el programa fuente. Las primeras tres fases
suelen agruparse en una sola fase llamada fase de anlisis y las ltimas tres en una
llamada fase de sntesis.
Las fases de un compilador son:

La etapa de anlisis (front end o etapa inicial) agrupa aquellas fases que dependen
principalmente del lenguaje fuente, y comprende:

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 token
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. Esto comprende
expresiones regulares y AFN, diseo de un generador de analizadores lxicos,
autmatas finitos determinsticos, autmatas finitos no determinsticos.
Ejemplo:
total=valor*5
Luego del anlisis lxico:
id = id * num

Esta fase se encarga de verificar si una cadena de entrada del cdigo fuente
pertenece o no al lenguaje, es decir se realiza
un anlisis smbolo a smbolo indicando el tken para cada una de las cadenas
reconocidas o un error en caso de no reconocer la cadena.



Por ejemplo, en en anlisis lxico los caracteres de las siguientes proposiciones de
asignacin

Anlisis Sintctico: En esta fase se analiza la estructura de las expresiones en
base a gramticas. Aqu ya se puede determinar si 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 dificil 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.

La etapa de sntesis (back end o etapa final) agrupa aquellas fases que dependen
principalmente de la mquina objetivo, y comprende:
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

Cmo saber si estamos ante un compilador:
Cuando el lenguaje fuente est en un lenguaje de programacin de alto nivel y el
objeto generado sea de bajo nivel (ensamblador o cdigo de maquina).

Ventajas de los Compiladores:
Produce un cdigo optimizado.
La ejecucin del programa objeto es mucho ms rpida que si se interpreta
el programa fuente.
El compilador tiene una visin global del programa, por lo que la informacin
de mensajes de error es ms detallada.
Se debe ejecutar muchas veces el cdigo fuente para ver los cambios en el
resultado.
Mayor consumo de memoria.

Intrprete:
Un intrprete es un programa que analiza y ejecuta simultneamente el programa
fuente, es decir no producen un cdigo objeto, siendo su ejecucin simultnea a la
del programa fuente.

No genera cdigo objeto, analiza y ejecuta directamente cada proposicin del
cdigo fuente.

Un intrprete es como un compilador, solo que la salida es una ejecucin. El
programa de entrada se reconoce y ejecuta a la vez. No se produce un resultado
fsico (cdigo mquina) sino lgico (una ejecucin).


Ventajas de los Interpretes
Su principal ventaja es que permiten una fcil depuracin. Permiten una
mayor interactividad con el cdigo en tiempo de desarrollo.
En algunos lenguajes (Smalltalk, Prolog, LISP) est permitido y es frecuente
aadir cdigo segn se ejecuta otro cdigo, y esta caracterstica solamente
es posible implementarla en un intrprete.
Puede ser interrumpido con facilidad.
Puede ser rpidamente modificado y ejecutado nuevamente.
Un Intrprete necesita menos memoria que un compilador.
Facilita la bsqueda de errores.
En algunos lenguajes est permitido aadir cdigo segn se ejecuta otro
cdigo.
Menor consumo de memoria.
Lentitud de ejecucin, ya que al ejecutar a la vez que se traduce no puede
aplicarse un alto grado de optimizacin.
Cada instruccin debe ser traducida a cdigo mquina tantas veces como
sea ejecutada
Durante la ejecucin, el intrprete debe residir en memoria ya que no genera
cdigo objeto.

Software Utilizado para Construccion de Compiladores


Software de uso General para Interpretacin o Generacin de Cdigo.
Microsoft Assembler_6.11
C estndar y C++
Dev C++
Free Pascal
Java
Visual C++ de Visual Studio 2010
Autmatas y Gramticas
JFlap
Thoth
Chalchalero
SDGLL1 Sistema Detector de Gramticas LL(1).
Anlisis Lxico
COCO/R C/C++
Flex
Lex
Jlex
Anlisis Sintctico
Bison Generador de Analizadores Sintcticos Ascendentes tipo YACC.
YACC Generador de Analizadores Sintcticos Ascendentes LR(1).

Anlisis Semntico y Tablas de Smbolos
TS 2006
TS
TS-OO
Generacin de Cdigo Intermedio y Final
ENS 2001 (Entorno Consola Windows) Lenguaje ensamblador basado en el
estndar IEEE 694.
W-ENS 2001 (Entorno grfico Windows) Lenguaje ensamblador basado en
el estndar IEEE 694.
L-ENS 2001 (Linux) Lenguaje ensamblador basado en el estndar IEEE 694.
ASS 1.3 (Linux) Lenguaje ensamblador sencillo.
TASM
TLINK
GCC. GNU Compiler Colection

Prcticas de Lenguajes de Alto Nivel
Prctica 1
Objetivos: Practicar la compilacin y depuracin de un programa sencillo.
Prctica: Disear un programa sencillo para hacer una estadstica de las letras de
cadenas de texto introducidas por teclado. El programa deber repetir en un lazo lo
siguiente:
Pedir un string de hasta 50 caracteres
Mostrar el nmero de vocales
Mostrar el nmero de consonantes
Preguntar si se desea continuar o finalizar (en este ltimo caso, abandonar el
programa).
Nota: Recordar que el carcter nmero i de un string S se obtiene con: S(i)
Realizacin: Disear el programa, y luego escribirlo en visual y compilarlo. Una vez
finalizado, probar el programa con el depurador, y mostrar el programa al profesor.
Aspectos que deben probarse con el depurador son:
Pararse al comienzo del programa
Mostrar valores de las variables
Ejecutar paso a paso
Poner algn punto de ruptura y ejecutar
Etc.
Entregar: Un listado del programa (suficientemente comentado).

Potrebbero piacerti anche