Vous êtes sur la page 1sur 15

2014

INVESTIGACIN COMPILADORES
RAMIREZ OCHOA EDGAR RAFAEL
PROFRA: GRISELDA SOCORRO GONZLEZ GUZAR GRUPO: 2891

Contenido
Introduccin ....................................................................................................................... 2 Desarrollo .......................................................................................................................... 6 Clasificacin de Compiladores ....................................................................................... 7 Funciones de un compilador .......................................................................................... 8 Anlisis Lxico ............................................................................................................ 8 Anlisis Sintctico ....................................................................................................... 9 Anlisis Semntico ................................................................................................... 10 Generacin de Cdigo Intermedio ............................................................................ 10 Optimacin de Cdigo .............................................................................................. 11 Administrador de la tabla de smbolos ...................................................................... 11 Deteccin e informacin de errores .......................................................................... 12 Generacin de Cdigo y Programa Objeto ............................................................... 13 Importancia de los compiladores .............................................................................. 13 Conclusiones ................................................................................................................... 14

Introduccin
El siguiente documento tendr como objetivo el mostrar informacin acerca de uno de los programas ms importantes en la etapa de desarrollo de un sistema el compilador desde una perspectiva simple y clara para la lectura de un estudiante de la Lic. En Informtica con el fin entender sus races, su funcionamiento y la importancia en el desarrollo de software Antes de empezar podremos definir algunos sucesos histricos que permitieron la creacin de los compiladores y que estn muy asociados a el inicio de las computadoras y los lenguajes de programacin. Podemos empezar en 1946 cuando se desarroll el primer ordenador digital los cuales en un principio, ejecutaban instrucciones consistentes en cdigos numricos que sealaban a los circuitos de la mquina los estados correspondientes a cada operacin que se quera realizar. Esta expresin mediante cdigos numricos se llam Lenguaje Mquina, interpretado por un secuenciador cableado o por un microprograma. Pero esta forma de dictarle instrucciones mediante los cdigos numricos a las mquinas era muy tediosa y se requera mucho tiempo. Es por eso que pronto los primeros usuarios de estos ordenadores descubrieron la ventaja de escribir sus programas mediante claves ms fciles de recordar que esos cdigos numricos; al final, todas esas claves juntas se traducan manualmente a Lenguaje Mquina, siendo estas claves constituyen los llamados lenguajes ensambladores, que se generalizaron en cuanto se dio el paso decisivo de hacer que las propias mquinas realizaran el proceso mecnico de la traduccin. A este trabajo se le llamo ensamblar el programa. Dada su correspondencia estrecha con las operaciones elementales de las mquinas, las instrucciones de los lenguajes ensambladores obligan a programar cualquier funcin de una manera minuciosa e iterativa. De hecho, en cuanto menor es el nivel de expresin de un lenguaje de programacin, mayor rendimiento se obtiene en el uso de los recursos fsicos (hardware) de una computadora. A pesar de estos avances, el lenguaje ensamblador segua siendo el de una mquina, pero ms fcil de manejar. Los trabajos de investigacin se orientaron entonces hacia la creacin de un lenguaje que expresara las distintas acciones a realizar de una manera lo ms sencilla posible para el hombre. As, en 1950, John Backus dirigi una investigacin en I.B.M. en un lenguaje algebraico y 1954 se empez a desarrollar un lenguaje que permita escribir frmulas matemticas de manera traducible por un ordenador. Obtuvo el nombre de FORTRAN (Formula Translating System). Fue

el primer lenguaje considerado de alto nivel. Se introdujo en 1957 para el uso de la computadora IBM modelo 704 y permita una programacin ms cmoda y breve que lo existente hasta ese momento, lo que supona un considerable ahorro de trabajo. Surgi as por primera vez el concepto de un traductor, como un programa que traduca un lenguaje a otro lenguaje. Con el caso particular de que en caso de que el lenguaje a traducir es un lenguaje de alto nivel y el lenguaje traducido de bajo nivel, se emplea el trmino compilador. La tarea de realizar un compilador en FORTRAN no fue fcil y su primer compilador de tard 18 aos-persona en realizarse y era muy sencillo, el desarrollo del compilador estaba muy influenciado por la mquina objeto en la que iba a ser implementado por lo que paralelamente al desarrollo de FORTRAN en Amrica, en Europa surgi una corriente ms universitaria, que pretenda que la definicin de un lenguaje fuese independiente de la mquina y en donde los algoritmos se pudieran expresar de forma ms simple. Esta corriente estuvo muy influida por los trabajos sobre gramticas de contexto libre publicados por Chomsky dentro de su estudio de lenguajes naturales, por lo que con estas ideas surgi un grupo europeo encabezado por el profesor F.L.Bauer (de la Universidad de Munich) que defini un lenguaje de usos mltiples independiente de una realizacin concreta sobre una mquina. Pidieron colaboracin a la asociacin americana A.C.M. (Association for Computing Machinery) y se form un comit en el que particip J. Backus que colaboraba en esta investigacin. De esa unin surgi un informe definiendo un International Algebraic Language (I.A.L.), publicado en Zurich en 1958 Y posteriormente este lenguaje se llam ALGOL 58 (Algoritmic Language). En 1969, el lenguaje fue revisado y llev a una nueva versin que se llam ALGOL 60. La versin actual es ALGOL 68, un lenguaje modular estructurado en bloques. Es en ALGOL cuando aparecen por primera vez muchos de los conceptos de los nuevos lenguajes algortmicos: Definicin de la sintaxis en notacin BNF (Backus-Naur Form). Formato libre. Declaracin explcita de tipo para todos los identificadores. Estructuras iterativas ms generales. Recursividad. Paso de parmetros por valor y por nombre. Estructura de bloques, lo que determina la visibilidad de los identificadores. Junto a este desarrollo en los lenguajes, tambin se iba avanzando en la tcnica de compilacin. En 1958, Strong y otros proponan una solucin al problema de

que un compilador fuera utilizable por varias mquinas objeto. Para ello, se divida por primera vez el compilador en dos fases, el "front end" y el "back end". La primera fase (front end) sera la encargada de analizar el programa fuente y la segunda fase (back end) sera la encargada de generar cdigo para la mquina objeto. El puente de unin entre las dos fases era un lenguaje intermedio que se design con el nombre de UNCOL (Universal Computer Oriented Language). Para que un compilador fuera utilizable por varias mquinas bastaba nicamente modificar su back end. Aunque se hicieron varios intentos para definir el UNCOL, el proyecto se ha quedado simplemente en un ejercicio terico. Ya en 1959 Rabin y Scott proponen el empleo de autmatas deterministas y no deterministas para el reconocimiento lexicogrfico de los lenguajes. Rpidamente se aprecia que la construccin de analizadores lxicos a partir de expresiones regulares es muy til en la implementacin de los compiladores. En 1968, Johnson apunta diversas soluciones y en 1975, con la aparicin de LEX surge el concepto de un generador automtico de analizadores lxicos a partir de expresiones regulares, basado en el sistema operativo UNIX. Con la aparicin de la notacin BNF - desarrollada en primer lugar por Backus en 1960 cuando trabajaba en un borrador del ALGOL 60, modificada en 1963 por Naur y formalizada por Knuth en 1964 - se tiene una gua para el desarrollo del anlisis sintctico. En los primeros lenguajes (FORTRAN y ALGOL 60) los tipos posibles de los datos eran muy simples, y la comprobacin de tipos era muy sencilla. No se permita la coercin de tipos, pues sta era una cuestin difcil y era ms fcil no permitirlo. Algo que cambio con la aparicin del ALGOL 68 ya que se permitan que las expresiones de tipo fueran construidas sistemticamente, y haciendo que surgiera la equivalencia de tipos por nombre y estructural. El manejo de la memoria como una implementacin tipo pila se us por primera vez en 1958 en el primer proyecto de LISP. La inclusin en el ALGOL 60 de procedimientos recursivos potenci el uso de la pila como una forma cmoda de manejo de la memoria y Dijkstra introdujo posteriormente el uso del display para acceso a variables no locales en un lenguaje de bloques. Tambin se desarrollaron estrategias para mejorar las rutinas de entrada y de salida de un procedimiento. As mismo, y ya desde los aos 60, se estudi el paso de parmetros a un procedimiento por nombre, valor y variable.

La tcnica de la optimizacin apareci desde el desarrollo del primer compilador de FORTRAN ya durante el desarrollo del mismo se tena el miedo de que el programa resultante de la compilacin fuera ms lento que si se hubiera escrito a mano. Por lo que para evitar esto, se introdujeron algunas optimizaciones en el clculo de los ndices dentro de un bucle. Pronto se sistematizan y se recoge la divisin de optimizaciones independientes de la mquina y dependientes de la mquina. Entre las primeras estn la propagacin de valores, el arreglo de expresiones, la eliminacin de redundancias, etc. Entre las segundas se podra encontrar la localizacin de registros, el uso de instrucciones propias de la mquina y el reordenamiento de cdigo. A partir de 1970 comienza el estudio sistemtico de las tcnicas del anlisis de flujo de datos. Su repercusin ha sido enorme en las tcnicas de optimizacin global de un programa. En la actualidad, el proceso de la compilacin ya est muy asentado. Un compilador es una herramienta bien conocida, dividida en diversas fases. Algunas de estas fases se pueden generar automticamente (analizador lxico y sintctico) y otras requieren una mayor atencin por parte del escritor de compiladores (las partes de traduccin y generacin de cdigo). De todas formas, y en contra de lo que quiz pueda pensarse, todava se estn llevando a cabo varias vas de investigacin en este fascinante campo de la compilacin. Por una parte, se estn mejorando las diversas herramientas disponibles. Tambin la aparicin de nuevas generaciones de lenguajes -ya se habla de la quinta generacin, como de un lenguaje cercano al de los humanos ha provocado la revisin y optimizacin de cada una de las fases del compilador. El ltimo lenguaje de programacin de amplia aceptacin que se ha diseado, el lenguaje Java, establece que el compilador no genera cdigo para una mquina determinada sino para una virtual, el Java Virtual Machine (JVM), que posteriormente ser ejecutado por un intrprete, normalmente incluido en un navegador de Internet. El gran objetivo de esta exigencia es conseguir la mxima portabilidad de los programas escritos y compilados en Java, pues es nicamente la segunda fase del proceso la que depende de la mquina concreta en la que se ejecuta el intrprete. Ahora que ya conocemos de manera muy breve la historia del desarrollo de los compiladores, pasaremos a mencionar el funcionamiento de los compiladores y la importancia dentro del desarrollo del software...

Desarrollo
Podremos empezar con la pregunta Qu es un compilador? El compilador es un programa que tiene una similitud muy grande a un traductor el cual tiene como una entrada texto escrito en un lenguaje (fuente) y da como salida otro texto en otro lenguaje denominado (objeto) en el caso del compilador es un proceso muy parecido teniendo como diferencia que la entrada fuente es un lenguaje de programacin de alto nivel y la salida objeto es un lenguaje de bajo nivel o mquina. En el caso de un intrprete el cual no genera un programa equivalente, sino que toma cada sentencia del programa fuente en un lenguaje de alto nivel y la traduce al cdigo equivalente y al mismo tiempo la ejecuta. Las ventajas de compilar frente a interpretar de manera breve pueden ser: Se compila una vez, se ejecuta n veces. En bucles, la compilacin genera cdigo equivalente al bucle, pero interpretndolo se traduce tantas veces una lnea como veces se repite el bucle. El compilador tiene una visin global del programa, por lo que la informacin de mensajes de error es ms detallada. Ventajas del intrprete frente al compilador: Un intrprete necesita menos memoria que un compilador. En principio eran ms abundantes dado que los ordenadores tenan poca memoria. Permiten una mayor interactividad con el cdigo en tiempo de desarrollo. Un compilador no es un programa que funciona de manera aislada, sino que necesita de otros programas para conseguir su objetivo: obtener un programa ejecutable a partir de un programa fuente en un lenguaje de alto nivel. Siendo algunos de estos programas el preprocesador, el linker, el depurador y el ensamblador. El preprocesador se ocupa (dependiendo del lenguaje) de incluir ficheros, expandir macros, eliminar comentarios, y otras tareas similares. El linker se encarga de construir el fichero ejecutable aadiendo al fichero objeto generado por el compilador las cabeceras necesarias y las funciones de librera utilizadas por el programa fuente. El depurador permite, si el compilador ha generado adecuadamente el programa objeto, seguir paso a paso la ejecucin de un programa. Finalmente, muchos compiladores, en vez de generar cdigo objeto,

generan un programa en lenguaje ensamblador que debe despus convertirse en un ejecutable mediante un programa ensamblador.

Clasificacin de Compiladores
El programa compilador traduce las instrucciones en un lenguaje de alto nivel a instrucciones que la computadora puede interpretar y ejecutar. Para cada lenguaje de programacin se requiere un compilador separado. El compilador traduce todo el programa antes de ejecutarlo. Los compiladores son, pues, programas de traduccin insertados en la memoria por el sistema operativo para convertir programas de cmputo en pulsaciones electrnicas ejecutables (lenguaje de mquina). Los compiladores pueden ser de: Una Sola Pasada: examina el cdigo fuente una vez, generando el cdigo o programa objeto. Pasadas Mltiples: requieren pasos intermedios para producir un cdigo en otro lenguaje, y una pasada final para producir y optimizar el cdigo producido durante los pasos anteriores. Optimacin: lee un cdigo fuente, lo analiza y descubre errores potenciales sin ejecutar el programa. Compiladores Incrementales: generan un cdigo objeto instruccin por instruccin (en vez de hacerlo para todo el programa) cuando el usuario teclea cada orden individual. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente. Ensamblador: el lenguaje fuente es lenguaje ensamblador y posee una estructura sencilla. Compilador cruzado: Se genera cdigo en lenguaje objeto para una mquina diferente de la que se est utilizando para compilar. Es perfectamente normal construir un compilador de Pascal que genere cdigo para MS-DOS y que el compilador funcione en Linux y se haya escrito en C++. Compilador con montador: compilador que compila distintos mdulos de forma independiente y despus es capaz de enlazarlos. Autocompilador: compilador que est escrito en el mismo lenguaje que va a compilar. Evidentemente, no se puede ejecutar la primera vez. Sirve para hacer ampliaciones al lenguaje, mejorar el cdigo generado, etc. Metacompilador: es sinnimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones del lenguaje para el que se desea obtener un compilador y genera como salida el compilador para ese lenguaje...

Descompilador: es un programa que acepta como entrada cdigo mquina y lo traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilacin.

Funciones de un compilador
Conceptualmente un compilador opera en fases. Cada una de las cuales transforma el programa fuente de una representacin en otra. En la prctica se pueden agrupar fases y las representaciones intermedias entre las fases agrupadas no necesitan ser construidas explcitamente

Anlisis Lxico En esta fase llamada tambin anlisis lexicogrfico, de rastreo, rastreo y filtrado, lexicologa o reconocimiento de componentes lxicos (tokenizing) se efecta la lectura real del programa fuente, el cual generalmente est en la forma de un flujo de caracteres. El rastreador recolecta secuencias denominadas componentes lxicos o Tokens. Se puede considerar como una interpretacin del programa fuente preparndolo para un tratamiento posterior con detalle. En esta etapa se ejecutan tres procesos Adaptar el cdigo fuente a un formato independiente de la forma en que se haya introducido en el sistema.

Eliminar informacin redundante o innecesaria, como espacios y comentarios. Tratar las palabras clave y los smbolos para convertirlos en una secuencia de unidades de lxico o smbolos clave, conocido como tokens.

En el anlisis lxico, la secuencia de caracteres se rastrea hasta encontrar una secuencia permitida; luego se filtra para clasificarla por medio de un tipo como entero, palabra reservada, identificador, etc. Cada token se compone de uno o ms caracteres que se renen en una unidad antes de que ocurra un procesamiento adicional. Los tokens se describen generalmente por su tipo y su valor: (Identificador, a) (Corchete izquierdo, [ ) El Analizador Lxico va a permitir saber si es un lenguaje de formato libre o no. Frecuentemente va unido al analizador sintctico en la misma pasada, funcionando entonces como una subrutina de este ltimo. Ya que es el que va leyendo los caracteres del programa, ignorar aquellos elementos innecesarios para la siguiente fase, como los tabuladores, comentarios, espacios en blanco. Anlisis Sintctico El analizador sintctico o fase gramatical tambin llamado parser, recibe como entrada los tokens que le pasa el Analizador Lxico (el analizador sintctico no maneja directamente caracteres) y comprueba si esos tokens van llegando en el orden correcto (orden permitido por el lenguaje) determinando la estructura del programa. La salida "terica" de la fase de anlisis sintctico sera un rbol sintctico. Por lo que sus funciones son: Aceptar lo que es vlido sintcticamente y rechazar lo que no lo es. Hacer explcito el orden jerrquico que tienen los operadores en el lenguaje de que se trate. Por ejemplo, la cadena A/B*C es interpretada como (A/B)*C en FORTRAN y como A/(B*C) en APL. Guiar el proceso de traduccin (traduccin dirigida por la sintaxis).

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; para ello emplea una gramtica, que es un conjunto de reglas que definen si un programa es aparentemente correcto. As como

los tokens pueden consistir de uno o ms caracteres, las categoras sintcticas pueden consistir de uno o ms tokens. Los resultados del anlisis sintctico por lo regular se representan como un rbol de anlisis gramatical. Anlisis Semntico La semntica de un programa es su significado por lo que en la fase de anlisis semntico se determina 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. De manera simple comprobar que el significado de lo que se va leyendo es vlido. La salida "terica" de la fase de anlisis semntico sera un rbol semntico. Consiste en un rbol sintctico en el que cada una de sus ramas ha adquirido el significado que debe tener. En el caso de los operadores polimrficos (un nico smbolo con varios significados), el anlisis semntico determina cul es el aplicable. Por ejemplo, consideremos la siguiente sentencia de asignacin: A:= B + C En Pascal, el signo "+" sirve para sumar enteros y reales, concatenar cadenas de caracteres y unir conjuntos. El anlisis semntico debe comprobar que B y C sean de un tipo comn o compatible y que se les pueda aplicar dicho operador. Si B y C son enteros o reales los sumar, si son cadenas las concatenar y si son conjuntos calcular su unin.

Generacin de Cdigo Intermedio


Despus de los anlisis sintctico y semntico, algunos compiladores generan una representacin intermedia explcita del programa fuente. Esta representacin es como un programa para una mquina abstracta y debe de tener dos propiedades importantes; debe ser fcil de producir y fcil de traducir al programa objeto. La representacin intermedia puede tener diversas formas. Existe una forma intermedia llamada "cdigo de tres direcciones", que es como el lenguaje ensamblador para una mquina en la que cada posicin de memoria puede actuar como un registro. El cdigo de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como mximo tres operandos. Esta representacin intermedia tiene varias propiedades:

Primera, cada instruccin de tres direcciones tiene a lo sumo un operador, adems de la asignacin. Por lo que cuando se generan esas instrucciones el compilador tiene que decidir el orden en que deben efectuarse, las operaciones. Segunda, el compilador debe generar un nombre temporal para guardar los valores calculados por cada instruccin. Tercera, algunas instrucciones de "tres direcciones" tienen menos de tres operadores.

Este cdigo puede conservarse como un arreglo de cadenas de texto, un archivo de texto temporal o bien una lista de estructuras ligadas. En los compiladores que realizan optimizaciones complejas se debe de poner particular atencin a la seleccin de representaciones que permitan una fcil reorganizacin

Optimacin de Cdigo
En esta fase se trata de mejorar el cdigo intermedio de modo que resulte un cdigo ms rpido al ejecutar. Estas tcnicas suelen llamarse incorrectamente tcnicas de optimizacin, puesto que casi nunca producen un cdigo objeto verdaderamente ptimo y slo mejoran su eficacia, por lo que deberan llamarse tcnicas de mejoramiento de cdigo. El compilador intenta mejorar el cdigo objeto obtenido por el generador de cdigo. Dichas mejoras producirn un cdigo que se ejecutar ms rpido u ocupar menos espacio, o ambas cosas, e incluyen la seleccin de modos de direccionamiento para mejorar el rendimiento, reemplazando las instrucciones lentas por otras rpidas, y eliminando las operaciones redundantes o innecesarias. Se pueden identificar cuatro tipos principales de optimizacin: Optimizacin local, que se hace dentro de una sentencia o grupo de sentencias. Optimizacin de ciclos que se realizan dentro de ciclos. Optimizacin global, que se efecta sobre todo un programa o procedimiento.

Optimizacin de mirilla, Administrador de la tabla de smbolos

Una funcin esencial de un compilador es registrar los identificadores utilizados en el programa fuente y reunir informacin sobre los distintos atributos de cada identificado ya que estos atributos pueden proporcionar informacin sobre la memoria asignada a un identificador, su tipo, su mbito (la parte del programa donde tiene validez) y, en el caso de nombres de procedimientos, cosas como el nmero y tipos de sus argumentos, el mtodo de pasar cada argumento (por ejemplo, por referencia) y el tipo que devuelve, si los hay. Una tabla de smbolos es una estructura de datos que contiene un registro por cada identificador, con los campos para los atributos del identificador. La estructura de datos permite encontrar rpidamente el registro de cada identificador y almacenar o consultar rpidamente datos en un registro Cuando el analizador lxico detecta un identificador en el programa fuente, el identificador se introduce en la tabla de smbolos. Sin embargo, normalmente los atributos de un identificador no se pueden determinar durante el anlisis lxico. Las fases restantes introducen informacin sobre los identificadores en la tabla de smbolos y despus la utilizan de varias formas. Por ejemplo, cuando se est haciendo el anlisis semntico y la generacin de cdigo intermedio, se necesita saber cules son los tipos de los identificadores, para poder comprobar si el programa fuente los usa de una forma vlida y as poder generar las operaciones apropiadas con ellos. El generador de cdigo, por lo general, introduce y utiliza informacin detallada sobre la memoria asignada a los identificadores

Deteccin e informacin de errores


Cada frase puede encontrar errores. Sin embargo, despus de detectar un error. Cada fase debe tratar de alguna forma ese error, para poder continuar la compilacin, permitiendo la deteccin de ms errores en el programa fuente. Un compilador que se detiene cuando encuentra el primer error, no resulta tan til como debiera. Las fases de anlisis sintctico y semntico por lo general manejan una gran proporcin de los errores detectables por el compilador. La fase lxica puede detectar errores donde los caracteres restantes de la entrada no forman ningn componente lxico del lenguaje. Los errores donde la cadena de componentes lxicos violan las reglas de estructura (sintaxis) del lenguaje 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 tengan significado para la operacin implicada.

Generacin de Cdigo y Programa Objeto


El generador de cdigo toma el cdigo intermedio o RI y genera el cdigo para la mquina objetivo. La mayora de los compiladores generan el cdigo objeto de manera directa y otros generan cdigo objeto que posteriormente es procesado por el ensamblador de cdigo. En esta fase de la compilacin las propiedades de la mquina objetivo se convierten en el factor principal. No slo es necesario emplear instrucciones que existan en la mquina objetivo, sino que las decisiones respecto a la representacin de los datos desempearn ahora tambin un papel principal, tal como cuntos bytes o palabras de memoria ocuparn las variables de tipos de datos enteros y de punto flotante. El punto principal en esta etapa es la seleccin de secuencias de instrucciones ingeniosas. Aunque las secuencias de instrucciones misteriosas pero eficientes deberan estar bien documentadas, obtener cdigo legible no es el objetivo principal de esta etapa. El cdigo resultante debe ejecutarse correcta y eficientemente.

Importancia de los compiladores


Los compiladores son una parte fundamental en el desarrollo de software y en los lenguajes de programacin ya que son el ncleo o motor que a simple vista no se ve en l se crean la mayora de las aplicaciones informticas y son los encargados de realizar todo el proceso de traduccin de un lenguaje de alto nivel a un lenguaje de bajo maquina solucionando as los procesos que necesitan el uso de tecnologas de la informacin para su automatizacin.

Conclusiones

En resumen los compiladores tienen un papel muy importante dentro del mbito de la informtica ya que han sido parte de la misma dentro de la evolucin de las computadoras y el diseo de los lenguajes de programacin siendo estos ltimos el punto de partida para la creacin de los compiladores. Personalmente creo que son una herramienta que aunque es dependiente del lenguaje de programacin para el cual funciona cuenta con una portabilidad, eficiencia y funcionamiento que actualmente es de mucha ayuda para la escritura de aplicativos, dndose en el uso en alguna IDE donde se cuenta con una capa de especializacin que ayuda al programador con la automatizacin de la escritura(identacin automtica, prediccin de cdigo etc) pero sin dejar de lado que siempre existe una etapa de compilacin dentro de este que proporciona la traduccin de lenguaje de alto nivel a mquina. Es por eso que estas herramientas hasta el da de hoy nunca dejaran de ser el primer paso para la resolucin de un problema de mediante desarrollo de software El contenido de este documento est estructurado en el desarrollo de la historia y el surgimiento de los compiladores junto con algunos lenguajes de programacin y posteriormente en el desarrollo se habla de manera muy general el funcionamiento de las diferentes etapas por las que trascurre el compilador para traducir de un lenguaje objeto ha traducido a mquina.