Manual de lex

Páginas: 14 (3423 palabras) Publicado: 1 de diciembre de 2010
Una Herramienta para el Análisis Léxico: Lex
Alejandro Viloria Lanero ( aviloria@infor.uva.es ) Teoría de Autómatas y Lenguajes Formales Universidad de Valladolid

Como hemos ido viendo, el shell de los sistemas UNIX/Linux nos ofrece varias herramientas para el tratamiento masivo de la información contenida en ficheros de texto, que nos permiten hacer búsquedas, reemplazos y múltiplesprocesamientos de más alto nivel a un nivel de ‘campo’ dentro de la ‘línea’. Todas ellas se apoyaban en las expresiones regulares para llevar a cabo su cometido, y permitían encadenar su salida a modo de tubería con otras herramientas, para que de esta forma se aumentase su potencia de procesamiento. Pero a menudo todo esto no es suficiente. En ocasiones se requiere poder realizar acciones de más altonivel o bien mucho más complejas en cada ocurrencia de una expresión regular. Lex va a permitirnos definir nuestras propias acciones en un lenguaje mucho más común: C.

Introducción
Lex es una herramienta de los sistemas UNIX/Linux que nos va a permitir generar código C que luego podremos compilar y enlazar con nuestro programa. La principal característica de Lex es que nos va a permitir asociaracciones descritas en C, a la localización de las Expresiones Regulares que le hayamos definido. Para ello Lex se apoya en una plantilla que recibe como parámetro, y que deberemos diseñar con cuidado. Internamente Lex va a actuar como un autómata que localizará las expresiones regulares que le describamos, y una vez reconocida la cadena representada por dicha expresión regular, ejecutará el códigoasociado a esa regla. Externamente podemos ver a Lex como una caja negra con la siguiente estructura:
plantilla.l Lex yy.lex.c a.out (fich. Ejecutable)

Compilador + Enlazador (cc)

Otros módulos de nuestro programa

En las siguientes secciones veremos todo lo correspondiente a la descripción de la plantilla, y el proceso de compilación.

La plantilla de Lex
La plantilla en la que Lexse va a apoyar para generar el código C, y donde nosotros deberemos describir toda la funcionalidad requerida, va a ser un fichero de texto plano con una estructura bien definida, donde iremos describiendo las expresiones regulares y las acciones asociadas a ella. La estructura de la plantilla es la siguiente:
Declaraciones %% Reglas %% Procedimientos de Usuario

Se compone de tres secciones conestructuras distintas y claramente delimitadas por una línea en la que lo único que aparece es el carácter doble %. Las secciones de ‘Declaraciones’ y la de ‘Procedimientos de Usuario’ son opcionales, mientras que la de ‘Reglas’ es obligatoria (aunque se encuentre vacía), con lo que tenemos que la plantilla más pequeña que podemos definir es:
%%

Esta plantilla, introducida en Lex, generaríaun programa C donde el contenido de la entrada estándar sería copiado en la salida estándar por la aplicación de las reglas y acciones por defecto. El formato de cada una de las secciones lo discutiremos en los apartados siguientes. Lex va a actuar como un pre-procesador que va a trasformar las definiciones de esta plantilla en un fichero de código C.

La Sección de Declaraciones
En la secciónde Declaraciones podemos encontrarnos con 3 tipos de declaraciones bien diferenciados: - Un bloque donde le indicaremos al pre-procesador que lo que estamos definiendo queremos que aparezca ‘tal cual’ en el fichero C generado. Es un bloque de copia delimitado por las secuencias ‘%{‘ y ‘%}’ donde podemos indicar la inclusión de los ficheros de cabecera necesarios, o la declaración de variablesglobales, o declaraciones procedimientos descritos en la sección de Procedimientos de Usuario:
%{ /* Este bloque aparecerá tal cual en el fichero yy.lex.c */ #include #include #define VALUE 33

int nl, np, nw %}

-

Un bloque de definición de ‘alias’, donde ‘pondremos nombre’ a algunas de las expresiones regulares utilizadas. En este bloque, aparecerá AL COMIENZO DE LA LÍNEA el nombre con...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • lexo
  • Lexar
  • lexa
  • Lex
  • Lex
  • Lexo
  • Dura lex, sed lex
  • lex dura lex

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS