Anda di halaman 1dari 6

Qu es un traductor?

En grandes rasgos, un traductor es el que convierte un programa de computadora


escrito en un lenguaje de programacin a otro lenguaje de programacin.

Un traductor divide su labor en dos etapas: una que analiza la entrada y genera
estructuras intermedias y otra que sintetiza la salida a partir de dichas estructuras.
El esquema de un traductor se identifica en dos etapas:


En la etapa de anlisis bsicamente analiza el programa de origen para determinar
si cumple las restricciones semnticas, sintcticas y lexicogrficas impuestas por el
programa fuente.
Esta etapa de anlisis consta de las siguientes fases:
Anlisis lexicogrfico. Divide el programa fuente en los componentes bsicos
del lenguaje a compilar. Cada componente bsico es una subsecuencia de
caracteres del programa fuente.
Anlisis sintctico. Comprueba que la estructura de los componentes bsicos
sea correcta segn las reglas que maneje el lenguaje a compilar.
Anlisis semntico. Comprueba que el programa fuente respeta las normas
del lenguaje que se compila: chequeo de tipos, rangos de valores, existencias
de variables, etc.

En la etapa de sntesis se genera el cdigo objeto correspondiente en el idioma de
destino a partir de las estructuras generadas por la etapa de anlisis.
Esta etapa de sntesis consta de las siguientes fases:
Generacin de cdigo intermedio. Genera un cdigo independiente de la
mquina muy parecido al ensamblador.
Generacin del cdigo mquina. Crea un bloque de cdigo mquina
ejecutable, as como los bloques necesarios destinados a contener los datos.
Fase de optimizacin. Se realiza sobre el cdigo intermedio, sobre el cdigo
mquina o ambos. Puede ser aislada de las dos anteriores o integrada con
ellas.

Qu es un compilador?
Un compilador es un programa especial que procesa declaraciones escritas en un
lenguaje de programacin en particular y los convierte en lenguaje que la mquina
sea capaz de interpretar.


El proceso completo de compilacin se ilustra como:


Preprocesador. Realiza generalmente las operaciones sobre el archivo(s) fuente
antes de la compilacin. Las operaciones tpicas de preprocesamiento incluyen:
a) La expansin de macros (notaciones cortar para construcciones mas largas).
Por ejemplo en C,
#define foo(x,y) (3*x+y*(2+x))
Define un macro foo, que cuando es usado despus en el programa, es
expandido por el preprocesador. Por ejemplo, a= foo(a,b) convirtindose
a=(3*a+b*(2+a))
b) Insercin nombrando archivo. Por ejemplo en C
#include header.h
es remplazado por el contenido del archivo header.h

Enlazadores. Un enlazador combina cdigo objeto producido de compiladores y
ensambladores de muchos programas, como tambin las funciones de biblioteca
estndar y recursos proporcionados por el sistema operativo. Esto implica la
resolucin de referencias en cada objeto presentando a las variables y
procedimientos externos declarados en otros archivos.

Cargadores. Compiladores, ensambladores y enlazadores usualmente producen
cdigo que hace referencia en memoria con relacin aun punto de partida
indeterminado que puede estar en cualquier parte de memoria. Un cargador calcula
direcciones absolutas para estas locaciones de memoria y modifica el cdigo usado
para estas direcciones.


Cualquier compilador debe realizar dos tareas principales: anlisis del programa a
compilar y sntesis de un programa en lenguaje mquina. Un compilador es un
programa complejo en el que no es fcil distinguir claramente unas partes de otras.
Sin embargo, se ha conseguido establecer una divisin lgica del compilador en
fases, lo que permite formalizar y estudiar por separado cada una de ellas. En la
prctica, estas fases no siempre se ejecutan secuencialmente sino que lo hacen
simultneamente, pudiendo ser unas fases tratadas como subrutinas de otras. En
cada una de las fases se utiliza un administrador de la tabla de smbolos y un
manejador de errores. En la siguiente imagen se ilustran las fases de un compilador.



Anlisis lxico. El analizador lxico, tambin conocido como scanner, lee los
caracteres del programa fuente, uno a uno, desde el chero de entrada y va
formando grupos de caracteres con alguna relacin entre s (tokens).Donde:

Tokens son nombres simblicos para las entidades que conforman el texto
del programa.
Un patrn es una regla que especfica cundo una secuencia de caracteres a
partir de la entrada constituye una muestra.
Un lexema es una secuencia de caracteres a partir de la entrada que coincida
con un patrn.

Cada token es tratado como una nica entidad, constituyendo la entrada de la
siguiente fase del compilador. Existen diferentes tipos de tokens y a cada uno se le
puede asociar un tipo y, en algunos casos, un valor. Los tokens se pueden agrupar en
dos categoras:

Cadenas especcas, como las palabras reservadas (if, while, ...), signos de
puntuacin(.,,,=, ...), operadores aritmticos (+,*, ...) y lgicos (AND, OR, ...),
etc. Habitualmente, las cadenas especcas no tienen asociado ningn valor,
slo su tipo.
Cadenas no especcas, como los identicadores o las constantes numricas
o de texto. Las cadenas no especicas siempre tienen tipo y valor. Por
ejemplo, si dato es el nombre de una variable, el tipo del token ser
identicador y su valor ser dato.

Frecuentemente el analizador lxico funciona como una subrutina del analizador
sintctico. Para el diseo del analizador lxico se utilizan los Autmatas Finitos.


Analizador sintctico. El analizador sintctico, tambin llamado parser, recibe
como entrada los tokens que genera el analizador lxico y comprueba si estos
tokens van llegando en el orden correcto. Siempre que no se hayan producido
errores, la salida terica de esta fase del compilador ser un rbol sintctico. Si el
programa es in- correcto se generarn los mensajes de error correspondientes. Para
el diseo de los analizadores sintcticos se utilizan los Autmatas de Pila.

Analizador semntico. El analizador semntico trata de determinar si el
signicado de las diferentes instrucciones del programa es vlido. Para conseguirlo
tendr que calcular y analizar informacin asociada a las sentencias del programa,
por ejemplo, deber determinar el tipo de los resultados intermedios de la
expresiones, comprobar que los argumentos de un operador pertenecen al conjunto
de los operandos posibles, comprobar que los operandos son compatibles entre s,
etc. La salida terica de esta fase ser un rbol semntico. Este es una ampliacin de
un rbol sintctico en el que cada rama del rbol ha adquirido, adems, el
signicado que debe tener el fragmento de programa que representa. Esta fase del
anlisis es ms difcil de formalizar que las dos anteriores y se utilizaran para ello
las gramticas atribuidas.


Generador de cdigo intermedio. Despus de la etapa de anlisis de le
compilador, se suele generar una representacin intermedia explcita del programa
fuetne. Dicha representacin se considera como un programa para una mquina
abstracta.
Cualquier representacin debe tener dos propiedades importantes; debe ser fcil de
generar y fcil de traducir al cdigo mquina destino

Generacin del cdigo mquina. Crea un bloque de cdigo mquina ejecutable, as
como los bloques necesarios destinados a contener los datos. En esta fase
consideramos:
La gestin de memoria.
Asignacin de registro.
Mquina especfica de optimizacin.

Fase de optimizacin. La mayora de los compiladores suelen tener una fase de
optimizacin de cdigo intermedio (independiente de los lenguajes fuente y objeto),
y una fase de optimizacin de cdigo objeto (no aplicable a otras mquinas).

Se realiza sobre el cdigo intermedio, sobre el cdigo mquina o ambos. Puede ser
aislada de las dos anteriores o integrada con ellas. Existen muchas maneras en las
que el cdigo puede ser optimizado, las mas comunes son:
Remover identificadores redundantes.
Remover secciones inalcanzables de cdigo.
La identificacin de subexpresiones comunes .
Despliegue de bucles.

Manejo de errores. En todas las fases se pueden encontrar errores, sin embargo en
el perodo de anlisis se encuentran con ms frecuencia. En la deteccin de un error
el compilador debe:
Reportar el error de una manera til.
Corregir el error, s es posible.
Continuar el proceso, s este fuera posible.
Dentro de los tipos de errores se encuentran los errores de sintctica y semntica:
Los errores de sintctica son errores en el programa de texto; pueden ser
lxicos gramaticales:
o Un error lxico es un error en un lexema, por ejemplo escribir tehn
en vez de then.
o Un error gramatical es una violacin a las reglas gramaticales del
lenguaje, por ejemplo: If x=5 y=4 (hara falta el then).
Los errores semnticos son errores sobre el sentido de una construccin del
programa; ya sean errores de tipo, errores lgicos o errores de tiempo de
ejecucin:
o Un error de tipo ocurre cuando se aplica un operador a un argumento
del tipo incorrecto.
o Un error lgico se produce cuando se ejecuta un programa mal
concebido, por ejemplo: while x=y do donde x e y inicialmente
tienen el mismo valor y el cuerpo del ciclo no cambia el valor de x
y.
o Un error en tiempo de ejecucin se produce solo cuando se ejecuta el
programa.

Tabla de smbolos El compilador necesita gestionar la informacin de los
elementos que se va encontrando en el programa fuente: variables, tipos, funciones,
clases, etc. Esta informacin se almacena en una estructura de datos interna
conocida como tabla de smbolos. Para que la compilacin sea enciente la tabla debe
ser diseada cuidadosamente de manera que contenga toda la informacin que el
compilador necesita. Adems, hay que prestar especial atencin a la velocidad de
acceso a la informacin con objeto de no ralentizar el proceso.

http://www.win.tue.nl/~mvdbrand/courses/GLT/0910/papers/notes.pdf

http://ing-radjchv-pmz-estl.blogspot.mx/2009/09/14-traductor-y-su-
estructura.html

http://www.scifac.ru.ac.za/compilers/cha02g.htm

http://books.google.com.mx/books?id=F3lWLs1iTAMC&pg=PA12&dq=estructura+
de+un+traductor&hl=es&sa=X&ei=Lw0SVPDPCebmiwK2xIHgDA&ved=0CBoQ6AEw
AA#v=onepage&q&f=false

http://www.diku.dk/~torbenm/Basics/basics_lulu2.pdf

http://es.slideshare.net/perlallamas/estructura-de-un-compilador-2

Anda mungkin juga menyukai