Computadoras
Teoría de Autómatas y lenguajes formales Federico Simmross Wattenberg (fedesim@infor.uva.es) Universidad de Valladolid
Una vez visto cómo las expresionesregulares pueden ser muy útiles a la hora de reconocer patrones en un fichero de texto, y de utilizarlas para desencadenar ciertas acciones en respuesta, vamos a estudiar una herramienta que permitecrear programas autónomos que analizan léxicamente la entrada y la procesan a nuestro antojo: el generador de analizadores léxicos lex. Lex genera código fuente en C, a partir de una serie deespecificaciones escritas en lenguaje Lex. El código C generado contiene una función llamada yylex(), que localiza cadenas en la entrada (lexemas) que se ajusten a uno de los patrones léxicos especificados enel código fuente Lex, realizando entonces las acciones asociadas a dicho patrón. yylex() puede llevar a cabo cualquier tipo de acciones ante un determinado patrón y, en particular, puede comportarsecomo un analizador léxico.
1. Funcionamiento de lex
Al contrario que sed y awk, lex no es un analizador sino un generador de analizadores. Esto permite incluir de manera cómoda un analizador amedida en cualquier programa:
Programa fuente en Lex (.l) Podemos
Compilador de Lex (lex, flex)
lex.yy.c
lex.yy.c
Compilador de C gcc –l gcc -lfl
a.out
Fichero de entrada
a.outAcciones
2. El lenguaje Lex
2.1. Esquema general Un programa fuente de Lex tiene el siguiente aspecto:
%% %%
•
De estas tres secciones, sólo la segunda es obligatoria, y cualquierade ellas puede estar vacía. Esto quiere decir que el mínimo programa en lex es: %%
•
La sección de declaraciones incluye declaraciones de variables, constantes y definiciones regulares, queconstituyen una manera cómoda de utilizar expresiones regulares largas en la sección de reglas; por ejemplo: letra [A-Za-z]
•
La sección de reglas especifica los patrones a reconocer y las...
Regístrate para leer el documento completo.