Herramientas de software: Lex/Flex
Introducción
¡Hola amable estudiante!
Me siento muy feliz de encontrarte en esta segunda sesión, ya verás que lo que aprendas de ella será muy benéfico para tu formación académica, es por ello que te invito a conocerla.
En esta sesión veremos cómo se usan las herramientas de desarrollo de compiladores llamadas Lex y flex, así como también las razones que propiciaron su desarrollo y su historia.
Dada la complejidad de los compiladores, el diseño de compiladores debe apoyarse en el uso de herramientas como son los compiladores de compiladores. Estos son en realidad herramientas de generación de código para diseñar analizadores léxicos y sintácticos. Las ventajas de usar esas herramientas son: ayudan a reducir el tiempo, el costo de desarrollo y el número de errores o bugs.
Las herramientas Lex y flex son importantes para el desarrollo de analizadores léxicos en los compiladores y en aplicaciones de procesamiento de texto. Por lo tanto, el dominio de estas herramientas permite a los ingenieros de software desarrollar también otras aplicaciones tales como procesadores de texto. Por ejemplo, las herramientas Lex y flex también se pueden utilizar para implementar herramientas tales como los preprocesadores, formateadores de código.
El código del analizador léxico generado por las herramientas Lex y flex se puede integrar con el código generado por otras herramientas tales como Yacc y Bison.
El análisis léxico se basa en el concepto de expresión regular que fue propuesto originalmente para describir lenguajes regulares. El conocimiento sobre las expresiones regulares también puede aplicarse en otras aplicaciones como los editores de texto, editores de código y en la búsqueda y modificación de texto. El conocimiento sobre las expresiones regulares tiene también aplicación en el área de teoría de los lenguajes.
¡Empecemos con mucho ánimo!
Desarrollo del tema
Conclusión
Un compilador es muy complejo y grande (puede tener más de un millón de líneas de código), y su desarrollo puede ser muy pesado, costoso y propenso a errores o bugs. Por lo tanto, el diseño de compiladores debe apoyarse en el uso de herramientas como son los compiladores de compiladores. Lex y flex son dos herramientas que pueden generar automáticamente un analizador léxico.
El formato para especificar el analizador léxico consta de tres secciones: sección de definiciones, sección de reglas y sección de código de usuario.
La sección de definiciones puede incluir código en C que sea necesario para el análisis léxico entre los símbolos %{ y %}. Además, puede incluir definiciones de patrones para usarse en las reglas y también puede incluir directivas de Lex/flex.
La sección de reglas contiene las reglas para la detección de tokens. Cada regla consta de un patrón (expresión regular) y una acción (Código en C). Una acción puede incluir instrucciones return para retornar el token detectado y que éste sea recibido por analizador sintáctico. Las acciones pueden omitirse, por ejemplo, cuando se detectan comentarios o espacios en blanco que no constituyen ningún token.
La sección de código de usuario puede incluir código en C que sea necesario para el análisis léxico. Cuando se está implementando una aplicación independiente, esta sección debe incluir una función main. La función main debe de encargarse de abrir el archivo de entrada, inicializar la variable yyin y llamar a la función yylex().
Has llegado al final de la segunda clase. ¡Vas muy bien, te felicito! Recuerda hacer y mandar la tarea correspondiente a esta lección. Sigue avanzando como hasta ahora, te encuentro en la siguiente clase, hasta luego.