Lex y flex

Solo disponible en BuenasTareas
  • Páginas : 11 (2545 palabras )
  • Descarga(s) : 0
  • Publicado : 24 de octubre de 2010
Leer documento completo
Vista previa del texto
LEX
Lex es un programa para generar analizadores léxicos (en inglés scanners o lexers). Lex se utiliza comúnmente con el programa yacc que se utiliza para generar análisis sintáctico. Lex, escrito originalmente por Eric Schmidt y Mike Lesk, es el analizador léxico estándar en los sistemas Unix, y se incluye en el estándar de POSIX. Lex toma como entrada una especificación de analizador léxico ydevuelve como salida el código fuente implementando el analizador léxico en C.
Aunque tradicionalmente se trata de software propietario, existen versiones libres de lex basadas en el código original de AT&T en sistemas como OpenSolaris y Plan 9 de los laboratorios Bell. Otra versión popular de software libre de lex es Flex.
Estructura de un archivo de lex
La estructura de un archivo de lexes intencionadamente similar a la de un archivo del yacc; los archivos se dividen en tres secciones, separadas por líneas que contienen solamente dos símbolos "%", como sigue:
Sección de declaraciones
%%
Sección de reglas
%%
Sección de código en C

* La sección de declaraciones es el lugarpara definir macros y para importar los archivos de cabecera escritos en C. También es posible escribir cualquier código de C aquí, que será copiado en el archivo fuente generado. Este código en C debe ir entre los símbolos %{ %}.
También se pueden incluir "atajos" para definir patrones de la Sección de Reglas, por ejemplo en vez del patrón [0-9]* (cero o más dígitos que reconocerían cualquiernúmero natural), se puede definir en esta sección el "atajo":  números [0-9]*, así, en la sección de código pondríamos el patrón {números} {acción_en_C;}. Con esto se clarifica la escritura del código en lex.
* La sección de reglas es la sección más importante; asocia patrones a sentencias de C. Los patrones son simplemente expresiones regulares. Cuando el lexer encuentra un texto en la entrada quees asociable a un patrón dado, ejecuta el código asociado de C. Ésta es la base de del funcionamiento de lex.
* La sección de código C contiene sentencias en C y funciones que serán copiadas en el archivo fuente generado. Estas sentencias contienen generalmente el código llamado por las reglas en la sección de las reglas. En programas grandes es más conveniente poner este código en un archivoseparado y enlazarlo en tiempo de compilació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 asociar acciones descritas en C, a la localización de las Expresiones Regulares que le hayamos definido. Para ello
Lex se apoya en unaplantilla 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ódigo asociado a esa regla.
Externamente podemos ver a Lex como una caja negra con la siguiente estructura:

La Sección deDeclaraciones

En la sección de 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 ladeclaración de variables globales, o declaraciones procedimientos descritos en la sección de
Procedimientos de Usuario:

%{
/* Este bloque aparecerá tal cual en el fichero yy.lex.c */
#include <stdio.h>
#include <stdlib.h>
#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...
tracking img