Publicidad

sábado, 27 de septiembre de 2008

LEX

Hola estimados compañeros en esta ocasión encontré información que considero muy importante por lo cual espero con agrado sus comentarios acerca del mismo.

Uso de Lex para la generación automática de un analizador léxico


Lex es un programa que toma como entrada un archivo de texto que contiene expresiones regulares, junto con las acciones que se tomarán cuando se iguale cada expresión, posteriormente este programa produce un archivo de salida que contiene código fuente en lenguaje c y esté a su vez provee un procedimiento llamado yylex controlado por la tabla de un DFA (autómata finito determinístico) –correspondiente a las expresiones regulares del archivo tomado como entrada– el procedimiento yyLex funciona de forma similar a otro procedimiento en lenguaje c llamado getToken, este procedimiento da como salida el siguiente token desde la entrada y también calculara atributos adicionales como el valor de la cadena del token; volviendo con el funcionamiento de Lex es importante saber que lo que se obtiene como salida es un archivo ya sea lex.yy.c o lexyy.c, se compila y liga a un programa principal para obtener un programa ejecutable.

Existe una gran variedad de distribuciones (versiones) de Lex pero una de las más populares es “Flex” (Fast Lex ), forma parte del paquete compilador Gnu que produce la free software Foundation (Fundación de software gratuito) por lo cual, es posible encontrarlo gratuitamente en diversos sitios Web y se dice que fue escrito originalmente por
Eric Schmidt y Mike Lesk.


Algunas convenciones de Lex para expresiones regulares

1) Lex permite la correspondencia de caracteres simples o cadenas de caracteres en secuencia.
2) Lex permite que los metacaracteres se igualen como caracteres reales encerrándolos entre comillas.
3) Las comillas también se pueden escribir en torno de caracteres que no son metacaracteres, siempre y cuando no tengan efecto alguno.
4) Lex interpreta los metacaracteres *,+, (,), y de la manera habitual.
5) Lex utiliza los signos de interrogación como un meta carácter para indicar una parte opcional.
6) La convención de Lex para clases de caracteres (conjuntos de caracteres) es escribirlas entré corchetes “[ ]”.


Estructura de un archivo de Lex


La estructura de un archivo de Lex se divide en tres secciones, separadas por líneas que contienen solamente dos símbolos "%", como sigue:

Definition section (Sección de declaraciones)%%Rules section (Sección de reglas)%%C code section (Sección de código).

· La definition section (Sección de declaraciones) es el lugar para 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 cualquier número natural), se puede definir en esta sección el "atajo": numeros [0-9]*, así, en la sección de código pondríamos el patrón {numeros} {acción_en_C;}. Con esto se clarifica la escritura del código en lex.

· La rules section (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 que es asociable a un patrón dado, ejecuta el código asociado de C. Ésta es la base de del funcionamiento de lex.

· La C code section (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 archivo separado y enlazarlo en tiempo de compilación.

Eso es todo compañeros, si este tema es de su interés pueden investigar más en la biblioteca de la USBI, el libro se llama: diseño de compiladores y el autor es kenneth C. Louden editorial Thomson, y también esta el sitio: http://www.infor.uva.es/~mluisa/talf/docs/aula/A3-A6.pdf

2 comentarios:

jimmy dijo...
Este comentario ha sido eliminado por el autor.
jimmy dijo...

perdon por eliminar mi comentario que realize primero, es que me habia equivocado.
Bueno compañero este tema me resulto interesante puesto que es lo que se va a ver en las clases y pues con ello va uno conociendo mas de los temas visto o por ver...
bueno...