HISTORIA DE LOS COMPILADORES
Por lo general códigos numéricos a un secuenciador cableado representando diferentes estados en cada operación, constituían el lenguaje máquina por los años 40, paralelamente a la construcción de los primeros ordenadores digitales.
El hombre se vio frente al problema de minimizar la engorrosa tarea de evitar los códigos numéricos por algún método un tanto mas humano. Se descubrieron claves más fáciles de recordar que los códigos numéricos, traduciéndolas manualmente a lenguaje máquina.
Estas claves constituían el llamado lenguaje ensamblador, quien se generaliza al automatizarse los procesos de traducción.
En la búsqueda de un traductor investigaron hombres como Jhon Backups para IBM, desarrollando un lenguaje de formulas algebraicas. A posteriori se desarrollo un lenguaje (FORTRAN) que permitía escribir formulas matemáticas, fue el primer lenguaje de alto nivel. Se lo consideró el primer traductor (compilador) ya que traducía las formulas matemáticas escritas en lenguaje de alto nivel a lenguaje maquina o lenguaje de bajo nivel. Era un lenguaje específicamente dirigido al hardware que se empleaba.
En Europa en forma paralela surgió una corriente un poco más generalizada, orientada al desarrollo de un lenguaje independiente del hardware, con algoritmos sencillos. Se basaban en las gramáticas libres de contexto publicadas por Chomsky. F. Bauer de la Universidad de Munich, dirigió investigaciones que desarrollaron un lenguaje de usos múltiples sin importar el hardware. Backups trabajó con ellos y en conjunto obtuvieron el ALGOL 58 (1958). Fue un lenguaje modular estructurado en bloques, del cual se realizaron varias mejoras y en él aparecen como:
Formato Libre
Declaración explicita para los identificadores
Estructuras iterativas
Recursividad
Pasaje de parámetros
Definición de sintaxis en notación BNF
Estructuras de bloques
En 1958 Strong y su grupo de investigación propusieron la división de un compilador en dos fases (front end y back end) lo que permitió fuera utilizado en distintos hardware.
El front end se encargaba de realizar los análisis del programa fuente y el back end de generar el código para la maquina objeto. Un lenguaje intermedio llamado UNCOL actuaba de puente entre las dos fases. Y modificando solo el back end se lograba la portabilidad a otra maquina objeto. Esto quedó como base teórica.
A fines de los 50 Rabin y Scott proponen implementar autómatas deterministas y no deterministas en el análisis lexicográfico de los programas fuentes.
Sheridan en el 59, describe un método de parsing de FORTRAN introduciendo paréntesis a los operandos para analizar las expresiones. Luego Floyd introduce técnicas de precedencia de operadores y funciones de precedencia.. El parsing descendente recursivo se utilizó en el 61 y en el 68 se definen las gramáticas LL y los parsers predictivos.
En el año 68 Johnson a partir de expresiones regulares construye analizadores léxicos. En definitiva Chomsky y sus trabajos fueron la base de los métodos de análisis léxico y sintáctico. En los 70 surgen los métodos SLR y LALR de parser LR quedando su implementación en los generadores automáticos de parsers. Johnson crea el generador de analizadores sintácticos para funcionar en UNIX.
ESTRUCTURA DE UN COMPILADOR
Un compilador es un traductor capaz de, a partir de un imput (programa escrito en un lenguaje) generar un output (programa objeto) en lenguaje ensamblador.
Un interprete es un software capaz de tomar una a una sentencias de un programa fuente, la traduce y la ejecuta.
Etapas a nivel lógico del proceso de compilación:
Podrían estar entremezcladas o una dentro de otra. Se agrupan en dos partes el front end o procesos de análisis y back end o procesos de generación y optimización de código objeto. Y se comunican a través de la representación intermedia generada por el front end, quien puede estar constituida por un árbol sintáctico abstracto o bien un programa en un lenguaje intermedio. El front end por lo general suele ser independiente de la maquina objeto para la que va a generar el código. El back end depende siempre de la maquina objeto, no así del lenguaje fuente.
El front end incorpora a sus técnicas conceptos vertidos por el lingüista Noar Chomsky tales como gramáticas
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario