Está en la página 1de 2

FLEX

Historia

Flex es una alternativa de software libre a la lex. Se utiliza con frecuencia con el generador de
analizadores sintcticos Bison. A diferencia de Bison, Flex no es parte del proyecto GNU. Flex fue
escrito en C por Vern Paxson alrededor de 1987. l estaba traduciendo un generador Ratfor, el cual
haba sido dirigido por Jef Poskanzer.
Existe un escner lxico similar para C ++ es flex++, que se incluye como parte del paquete de flex.

Caractersticas

Flex es una herramienta para generar analizadores lxicos. Un analizador lxico es un programa que
reconoce patrones lxicos en el texto. El programa flex lee los ficheros de entrada dados, o la
entrada estndar si no se dan los nombres de archivo, para una descripcin de un analizador a
generar. La descripcin es en forma de pares de expresiones regulares y cdigo C, denominadas
reglas. Flex genera como salida un fichero fuente C, lex.yy.c por defecto, lo que define una rutina
yylex (). Este archivo puede ser compilado y vinculado con la biblioteca de tiempo de ejecucin de
la flexin para producir un ejecutable. Cuando se ejecuta el archivo ejecutable, este analiza su
entrada para las ocurrencias de las expresiones regulares. Siempre que encuentra uno, ejecuta el
cdigo C correspondiente.

Ventajas

Ofrece dos maneras distintas de generar analizadores para usar con C++. Una de ellas es
simplemente compilar un analizador generado por flex usando un compilador de C++ en lugar de
un compilador de C.
Se puede utilizar para generar un analizador como una clase de C++, utilizando la opcin -+
Una alternativa de software libre a la lex.

Desventajas

Algunos patrones de contexto posterior pueden no ser correctamente emparejados y generar


mensajes de aviso ("contexto posterior peligroso"). Estos son patrones donde el final de la primera
parte de la regla coincide con el comienzo de la segunda parte, como "zx * / xy *".
Para algunas reglas de contexto posterior, partes que estn hechas de longitud fija no se reconocen
como tales, lo que lleva a la prdida de rendimiento mencionada anteriormente.
La combinacin de contexto posterior con el especial '|' accin puede producir que el contexto
posterior fijo se convirti en el contexto posterior variable ms caro.
El uso de `unput () 'invalida yytext y yyleng, a menos que el`% array' se ha utilizado directiva o la
opcin `-l '.
Concordancia de patrones de NUL es sustancialmente ms lento que el de otros caracteres.

El ajuste dinmico del buffer de entrada es lento, ya que conlleva el re anlisis de todo el texto
hasta el momento por el (generalmente enorme) token actual.
Debido al tanto de buffers de entrada y lecturas por adelantado, no puede entremezclar llamadas
a <stdio.h> rutinas, tales como, por ejemplo, `getchar () ', con flex reglas y esperar que funcione.
Llame a `input () 'en su lugar.
Las flex algoritmos internos necesitan documentacin.
Incompatibilidades con lex y POSIX.

Aplicaciones

Adems de para construir compiladores e intrpretes, los analizadores lxicos se pueden emplear
para muchos programas convencionales. Los ejemplos ms claros son aquellos programas que
tienen algn tipo de entrada de texto donde hay un formato razonablemente libre en cuanto a
espacios y comentarios. Un analizador lxico simplifica notablemente la interfaz y si se dispone de
un generador automtico, el problema se resuelve en pocas lneas de cdigo.

Ejemplo

La estructura general es la siguiente:


Seccin de declaraciones
%%
Seccin de reglas
%%
Seccin de cdigo en C
int num_lineas = 0, nm_de_caracteres = 0;
%%
\ N ++ num_lineas; ++ nm_de_caracteres;
. ++ nm_de_caracteres;
%%
main ()
{
yylex ();
printf ("# de lneas =% d, # de chars =% d \ n",
num_lineas, nm_de_caracteres);
}

Referencias

Paxson V. (1995). Flex, version 2.5 A fast scanner generator. Recuperado el 15 de febrero del 2015
de: http://dinosaur.compilertools.net/flex/index.html
Universitat Jaume. (2008). Procesadores de lenguaje. Analizador lxico [PDF file]. Recuperado el
15 de febrero del 2015, de: http://ocw.uji.es/material/5195/raw

También podría gustarte