LA CIENCIA DE CONSTRUIR UN COMPILADOR
El diseo de compiladores est lleno de bellos ejemplos, en donde se resuelven
problemas complicados del mundo real mediante la abstraccin de la esencia del
problema en forma matemtica.
stos sirven como excelentes ilustraciones de cmo pueden usarse las
abstracciones para resolver problemas: se toma un problema, se formula una
abstraccin matemtica que capture las caractersticas clave y se resuelve
utilizando tcnicas matemticas. La formulacin del problema debe tener bases y
una slida comprensin de las caractersticas de los programas de computadora, y
la solucin debe validarse y refinarse en forma emprica.
Un compilador debe aceptar todos los programas fuente conforme a la
especificacin del lenguaje; el conjunto de programas fuente es infinito y cualquier
programa puede ser muy largo, posiblemente formado por millones de lneas de
cdigo. Cualquier transformacin que realice el compilador mientras traduce un
programa fuente debe preservar el significado del programa que se est
compilando. Por ende, los escritores de compiladores tienen influencia no slo sobre
los compiladores que crean, sino en todos los programas que compilan sus
compiladores.
Esta capacidad hace que la escritura de compiladores sea en especial gratificante;
no obstante, tambin hace que el desarrollo de los compiladores se a todo un reto.
Modelado en el diseo e implementacin de compiladores
El estudio de los compiladores es principalmente un estudio de la forma en que
diseamos los modelos matemticos apropiados y elegimos los algoritmos
correctos, a l tiempo que logramos equilibrar la necesidad de una generalidad y
poder con la simpleza y la eficiencia.
Algunos de los modelos ms bsicos son las mquinas de estados finitos y las
expresiones regulares. Estos modelos son tiles para describir las unidades de
lxico de los programas (palabras clave, identificadores y dems) y para describir
los algoritmos que utiliza el compilador para reconocer esas unidades. Adems,
entre los modelos esenciales se encuentran las gramticas libres de con texto, que
se utilizan para describir la estructura sintctica de los lenguajes de programacin,
como el anidamiento de los parntesis o las instrucciones de control. De manera
similar, los rboles son un modelo importante para representar la estructura de los
programas y su traduccin a cdigo objeto.
La ciencia de la optimizacin de cdigo
El trmino optimizacin en el diseo de compiladores se refiere a los intentos que
realiza un compilador por producir cdigo que sea ms eficiente que el cdigo obvio.
Por lo tanto, optimizacin es un trmino equivocado, ya que no hay forma e n que
se pueda garantizar que el cdigo producido por un compilador sea tan rpido o
ms rpido que cualquier otro cdigo que realice la misma tarea.