La razón más común para querer transformar código fuente es crear un programa ejecutable.
[1] El equipo FORTRAN dirigido por John W. Backus de IBM está generalmente acreditado por haber presentado el primer compilador completo, en 1957.
[2] En 1960, un compilador FORTRAN extendido, ALTAC, estaba también disponible en el Philco 2000, por lo que es probable que un programa FORTRAN fuera compilado para ambas arquitecturas de computadores a mediados de los años 60.
[1] El compilador COBOL para el UNIVAC II fue probablemente el primero en ser escrito en un lenguaje de alto nivel, llamado FLOW-MATIC, por un equipo dirigido por Grace Hopper.
El Navy Electronics Laboratory International ALGOL Compiler o NELIAC fue un dialecto e implementación del compilador del lenguaje de programación ALGOL 58 desarrollado por el Naval Electronics Laboratory en 1958.
El primer compilador auto-alojado (excluyendo ensambladores) fue escrito para Lisp por Tim Hart y Mike Levin en el MIT en 1962.
[5] Esta técnica solo es posible cuando un intérprete ya existe para el propio lenguaje que va a ser compilado.
Los analizadores sintácticos pueden ser escritos a mano o generado por un compilador de computador.
Un analizador sintáctico LR es un analizador sintáctico que lee la entrada de izquierda a derecha (como aparecería si se mostrara visualmente) y produce una derivación por la derecha.
El término analizador sintáctico LR(k) es también usado, donde k se refiere al número de símbolos de entrada predichos ("look-ahead") sin consumir que son usados en las decisiones que toma el analizador.
[7] Korenjak (1969) fue el primero en demostrar que los analizadores sintácticos para los lenguajes de programación podían ser producidos usando estas técnicas.
[8] Frank DeRemer ideó las técnicas más prácticas SLR y LALR, publicadas en su tesis doctoral del MIT en 1969.
[9][10] Esto supuso un importante avance, porque los traductores LR(k), como los definió Donald Knuth, eran demasiado grandes para su implementación en los sistemas informáticos de los años 60 y 70.
La sintaxis de muchos lenguajes de programación son definidos por una gramática LALR(1), y por esta razón los analizadores sintácticos LALR son usados a menudo por compiladores para llevar a cabo el análisis sintáctico del código fuente.
Por esto, el analizador sintáctico es directamente codificado en el lenguaje anfitrión de forma parecida al recursivo descendente.
También es posible (en principio) editar a mano un analizador sintáctico recursivo ascendente, donde una implementación en forma de tabla es casi ilegible para el ser humano medio.
La recursión ascendente fue descrita por primera vez por Thomas Pennello en su artículo "Very fast LR parsing" en 1986.
Roberts[12] en 1988 así como en un artículo de Leermakers, Augusteijn y Kruseman Aretz[13] en 1992 en el diario Theoretical Computer Science.
[20] John Backus propuso "fórmulas meta-lingüísticas"[21] [22] para describir la sintaxis del nuevo lenguaje de programación IAL, conocido hoy en día como ALGOL 58 (1959).
[24][25][26][27] En los posteriores años TMG fue portado a muchos computadores centrales de UNIVAC e IBM.
PL/1 fue escogido como el lenguaje, pero un proveedor externo no podía proveer un compilador en funcionamiento.
Yacc es un generador de analizador sintáctico desarrollado por Stephen C. Johnson en AT&T para el sistema operativo Unix.
Los generadores de analizadores léxicos, tales como Lex o Flex están ampliamente disponibles.
Los compiladores cruzados son usados para desarrollo embebido, donde el ordenador objetivo tiene capacidades limitadas.
[34] Posteriores compiladores, como el compilador Fortran IV de IBM, priorizó más en los buenos diagnósticos y en ejecutarse más rápidamente, a costa de la optimización del código objeto.
[42] Allen desarrolló e implementó sus métodos como parte de compiladores para el IBM 7030 Stretch-Harvest y el experimental Advanced Computing System.
Ella llegó a establecer y liderar el proyecto PTRAN en la ejecución paralela automática de programas FORTRAN.
El código de reemplazo podría sustituir una tabla de consulta linear con una búsqueda binaria por ejemplo o a veces simplemente reemplazar una instrucción relativamente 'lenta' por una conocida más rápida que fuese funcionalmente equivalente en su contexto.
Cuando a un compilador se le pasa un programa incorrecto sintácticamente, un buen, claro mensaje de error es útil.
Presentaron el famoso artículo "Design and implementation of a diagnostic compiler for PL/1" publicado en las comunicaciones del ACM en marzo de 1973.