25 de abril de 2008

AZ 23: Lenguajes de programación en UNIX. Parte 2/5: Lex.

El Lex es una herramienta de software que permite resolver una amplia variedad de problemas como el procesamiento de textos, deciframiento de código, escritura de compiladores y otros tantos. En el área del procesamiento de textos se pueden hacer chequeos de ortografía; en el deciframiento de código, podemos traducir ciertos patrones de caracteres por otros. Y en el área de la escritura de ocmpiladores se puede determinar qué marcas o tokens están dentro del programa a compilar. El común denominador de todas estas tareas es el de reconocer diferentes cadenas de caracteres que satisfacen ciertas características. En el caso de la escitura de compiladores, el desarrollo de la habilidadpara resolver el problema requiere de la implementción de un analizador léxico en dicho compilador.

No es esencial el uso de Lex para manejar problemas de esta naturaleza pues podríamos escribir programas en otros lenguajes estándares como el C. De hecho lo que Lex hace es producir tales programas de C. Lex es considerado por algunos como un generador de programas. Lex ofrece una manera más fácil y veloz para crear programas que se encarguen de las tareas antes mencionadas. Su debilidad es que frecuentemente se producen programas más grandes de lo necesario que dan por resultado ejecuciones más lentas de lo que podrían ser. En cierto sentido esta desventaja puede resultar de poca importancia al compararla con el potencial que Lex ofrece.

Para entender el funcionamiento de Lex observamos el diagrama de la figura 1. Comencemos por el código en Lex, también conocido como especificación Lex, que el programador escribe.

El código en Lex consiste de una lista de reglas que especificansecuencias de caracteres (expresiones) a buscar en un texto y las acciones a tomar cuando se halla dicha expresión. El código se lee y se traduce por el generador de programas en un código en C que a su vez, debe ser compilado para que genere el programa ejecutable que hace el análisis léxico. Cabe mencionar que este procedimiento no es automático. Finalmente el programa ejecutable producido por todo este proceso toma como entrada cualquier archivo fuente para dar como resultado la salida deseada, ya sea un texto modificado o una lista de marcas o tokens.

Así mismo, Lex puede emplearse para recavar información estadística sobre algunas características de la entrada tales como contéo de caracteres, número de ocurrencias de una palabra, tamaño de algunas palabras y así por el estilo. En futuras ocaciones veremos más a detalle el cómoe scribir código en Lex; cómo traducir código fuente en Lex; cómo compilar, ligar y ejecutar el analizador léxico en C; y finalmente cómo ejecutar dicho analizador léxico. Estos temas no entran en este artículo debido a su complejidad.


Artículo original