Una Breve Historia de Los Compiladores

7
Una breve historia de los compiladores: En 1946,se desarrolla la primer computadora digital (lenguaje de máquina) 1950, John ac!us dirige una in"estigaci#n en $% en un lengu alge&raico' 1954, se comien a a desarrollar *+ +-.' 195/, *+ +-. se utili a en la $% modelo /04' urge el concepto traductor' El primer compilador de *+ +-. tard# 1 a2os3persona en reali arse' *+ +-. era dependiente de la máquina' aralelamente al desarrollo de *+ +-. en -m rica, en Europa surge una corriente que pretende que los lenguajes uesen independientes de la máquina, esta corriente esta&a in luida por los tra&ajos so&re 78 d homs!:' urge un grupo Europeo enca&e ado por '8' auer, en la que particip# -% : John ac!us' ;e este grupo surge un in orme que de in 8enguaje -lge&raico $nternacional, pu&licado en <urich en 195 ' 1969, aparece -lgol 60' Junto con los lenguajestam&i n la t cnica de los compiladores a"an a195 , trong : otros proponen una soluci#n al pro&lema de que un compilador uera porta&le, : esta era di"idir al compilador en dos ases = ront end> (anali a el programa uente) : =&ac! end> c#digo o&jeto para la máquina o&jeto)' El puente de uni#n era un lenguaje intermedio denominado ?. *8 (no uncion#)' 1959, +a&in : cott proponen el empleo de - ; : - . para e reconocimiento le@icográ ico de los lenguajes' -parece . (ac!us31960, .aur3196A, Bnuth31964) como una guCa para el desarrollo del análisis sintáctico' 1959, heridan descri&e un m todo de parsing de *+ +-. para introducir par ntesis en una e@presi#n' En los 60Ds se desarrollan di"ersos m todos de parsers ascendentes : descendentes' lo:d más adelante introduce la t cnica de precedencia de operadores : uso de unciones de precedencia'

description

compiladores

Transcript of Una Breve Historia de Los Compiladores

Una breve historia de los compiladores: En 1946, se desarrolla la primer computadora digital (lenguaje de mquina) 1950, John Backus dirige una investigacin en IBM en un lenguaje algebraico. 1954, se comienza a desarrollar FORTRAN. 1957, FORTRAN se utiliza en la IBM modelo 704. Surge el concepto traductor. El primer compilador de FORTRAN tard 18 aos-persona en realizarse. FORTRAN era dependiente de la mquina. Paralelamente al desarrollo de FORTRAN en Amrica, en Europa surge una corriente que pretende que los lenguajes fuesen independientes de la mquina, esta corriente estaba influida por los trabajos sobre GLC de Chomsky. Surge un grupo Europeo encabezado por F.L. Bauer, en la que particip ACM y John Backus. De este grupo surge un informe que define un Lenguaje Algebraico Internacional, publicado en Zurich en 1958. 1969, aparece Algol 60. Junto con los lenguajes tambin la tcnica de los compiladores avanza1958, Strong y otros proponen una solucin al problema de que un compilador fuera portable, y esta era dividir al compilador en dos fases front end (analiza el programa fuente) y back end (genera cdigo objeto para la mquina objeto). El puente de unin era un lenguaje intermedio denominado UNCOL (no funcion). 1959, Rabin y Scott proponen el empleo de AFD y AFN para el reconocimiento lexicogrfico de los lenguajes. Aparece BNF (Backus-1960, Naur-1963, Knuth-1964) como una gua para el desarrollo del anlisis sintctico. 1959, Sheridan describe un mtodo de parsing de FORTRAN para introducir parntesis en una expresin. En los 60s se desarrollan diversos mtodos de parsers ascendentes y descendentes. Floyd ms adelante introduce la tcnica de precedencia de operadores y uso de funciones de precedencia. 1961, se usa por primera vez un parsing descendente recursivo. En los 60s se estudia el paso de parmetros por nombre, valor y referencia y se incluyen los procedimientos recursivos para Algol 60. Se desarrolla la localizacin dinmica de datos. 1968, se estudia y definen las GLC, los parsers predictivos y la eliminacin de recursividad izquierda. 1975, aparece LEX generador automtico de analizadores lxicos a partir de expresiones regulares bajo UNIX. A mitad de los 70s Johnson crea YACC para UNIX (generador de analizadores sintcticos). Ahora un compilador de divide en varias etapas. El ltimo lenguaje de programacin de amplia aceptacin es JAVA (es interpretado).

Conceptos Bsicos.Traductor: Cualquier programa que toma como entrada un texto escrito en un lenguaje llamado fuente y da como salida un programa equivalente en otro lenguaje, el lenguaje objeto.

Si el lenguaje fuente de un lenguaje de programacin de alto nivel y el objeto un lenguaje de bajo nivel (ensamblador o cdigo de mquina), al traductor se le denomina compilador.Ensamblador: Es un programa traductor cuyo lenguaje fuente es el lenguaje ensamblador.Intrprete: Es un programa que no genera un programa equivalente, sino que toma una sentencia del programa fuente en un lenguaje de alto nivel y la traduce al cdigo equivalente y al mismo tiempo lo ejecuta.En un principio debido a la escasez de memoria se utilizaban ms los intrpretes, ahora se usan ms los compiladores (a excepcin de JAVA).Ventajas de compilar contra a interpretar Se compila una vez, se ejecuta n veces. En ciclos, la compilacin genera cdigo equivalente, interpretndolo se traduce tantas veces una lnea como veces se repite el ciclo. El compilador tiene una visin global del programa.Ventajas del intrprete contra el compilador Un intrprete necesita menos memoria que un compilador. Permiten una mayor interactividad con el cdigo en tiempo de desarrollo.Programas que el compilador necesita para obtener un programa ejecutable: Preprocesador. Ligador. Cargador. Depurador. Ensamblador.Tipos de compiladores De una pasada. De mltiples pasadas. De carga y ejecucin. De depuracin. De optimizacin. Ensamblador. Compilador cruzado. Compilador con montador. Autocompilador. Metacompilador. Descompilado.Estructura de un compiladorUn compilador es un programa, en el que pueden distinguirse dos subprogramas o fases principales: una fase de anlisis, en la cual se lee el programa fuente y se estudia la estructura y el significado del mismo; y otra fase de sntesis, en la que se genera el programa objeto.En un compilador pueden distinguirse, adems, algunas estructuras de datos comunes, la ms importante de las cuales es la tabla de smbolos, junto con las funciones de administracin de sta y de los dems elementos del compilador, y de una serie de rutinas auxiliares para deteccin de errores.Las funciones de estos mdulos son las siguientes:Analizador de lxico: Las principales funciones que realiza son: Identificar los smbolos llmese identificadores o palabras reservadas. Eliminar los espacios en blanco, caracteres de fin de lnea, tabuladores etc... Eliminar los comentarios que acompaan al programa fuente. Crear unos smbolos intermedios llamados tokens. Avisar de los errores que detecte. Token: es carcter con un significado colectivo que tiene dos partes: lexema (la cadena que representa al token) y gramema (significado o descripcin del token).Ejemplo: A partir de la sentencia en PASCAL siguientenuevo := viejo + RAZON * 2genera un cdigo simplificado para el anlisis sintctico posterior, por ejemplo: Nota: Cada elemento encerrado entre representa un nico token. Las abreviaturas id y ent significan identificador y entero, respectivamente.Analizador de sintaxis: Comprueba que las sentencias que componen el texto fuente son correctas en el lenguaje, creando una representacin interna que corresponde a la sentencia analizada. De esta manera se garantiza que slo sern procesadas las sentencias que pertenezcan al lenguaje fuente. Durante el anlisis sintctico, as como en las dems etapas, se van mostrando los errores que se encuentran.Ejemplo: El esquema de la sentencia anterior corresponde al de una sentencia de asignacin del lenguaje Pascal. Estas sentencias son de la forma: y la parte que se denomina es de la forma: o bien o bien Anlisis semntico: Se ocupa de analizar si la sentencia tiene algn significado. Se pueden encontrar sentencias que son sintcticamente correctas pero que no se pueden ejecutar porque carecen de sentido. En general, el anlisis semntico se hace a la par que el anlisis sintctico introduciendo en ste unas rutinas semnticas.Ejemplo: En la sentencia que se ha analizado existe una variable entera. Sin embargo, las operaciones se realizan entre identificadores reales, por lo que hay dos alternativas: o emitir un mensaje de error "Discordancia de tipos", o realizar una conversin automtica al tipo superior, mediante una funcin auxiliar inttoreal.Generador de cdigo intermedio: El cdigo intermedio es un cdigo abstracto independiente de la mquina para la que se generar el cdigo objeto. El cdigo intermedio ha de cumplir dos requisitos importantes: ser fcil de producir a partir del anlisis sintctico, y ser fcil de traducir al lenguaje objeto. Esta fase puede no existir si se genera directamente cdigo mquina, pero suele ser conveniente emplearla.Optimizador de cdigo: A partir de todo lo anterior crea un nuevo cdigo ms compacto y eficiente, eliminando por ejemplo sentencias que no se ejecutan nunca, simplificando expresiones aritmticas, etc... La profundidad con que se realiza esta optimizacin vara mucho de unos compiladores a otros. En el peor de los casos esta fase se suprime.Generador de cdigo: A partir de los anlisis anteriores y de las tablas que estos anlisis van creando durante su ejecucin produce un cdigo o lenguaje objeto que es directamente ejecutable por la mquina. Es la fase final del compilador. Las instrucciones del cdigo intermedio se traducen una a una en cdigo mquina reubicable.Nota: Cada instruccin de cdigo intermedio puede dar lugar a ms de una de cdigo mquina.La tabla de smbolos: Es el medio de almacenamiento de toda la informacin referente a las variables y objetos en general del programa que se est compilando.Ejemplo: Hemos visto que en ciertos momentos del proceso de compilacin debemos hacer uso de cierta informacin referente a los identificadores o los nmeros que aparecen en nuestra sentencia, como son su tipo, su posicin de almacenamiento en memoria, etc... Esta informacin es la que se almacena en la tabla de smbolos.Rutinas de errores: Estn incluidas en cada uno de los procesos de compilacin (anlisis de lxico, sintctico y semntico), y se encargan de informar de los errores que encuentran en texto fuente.Ejemplo: El analizador semntico podra emitir un error (o al menos un aviso) cuando detectase una diferencia en los tipos de una operacin.Los compiladores:Antes Una computadora no tena memoria suficiente. Se tuvo que dividir al compilador en fases. Cada fase lea un archivo y produca otro.Actualmente Se tiene memoria suficiente. El tamao del archivo ejecutable es relativamente pequeo. Se han reducido el nmero de pasadas y el nmero de archivos que se tienen que leer y escribir.Las fases de un compilador se agrupan en dos partes o etapas:Anlisis lxico (lineal)Anlisis sintctico (jerrquico)Anlisis semntico .Optimizacin de cdigoGeneracin de cdigo objeto.Generacin de cdigo intermedio

Back end (Sntesis)

Front end (Anlisis)

Front end Dependiente del lenguaje fuente. Independiente de la mquina objeto para la que se va a generar cdigo.Back end Independiente del lenguaje objeto. Dependiente del lenguaje objeto.