Flex

Revisión del 11:13 20 oct 2011 de Idania.edu.unoris.hlg (discusión | contribuciones) (Página creada con '{{Ficha Software |nombre=GNU Flex |familia= |imagen=Gnu_flex.png |tamaño= |descripción= |imagen2= |tamaño2= |descripción2= |creador=Jef Poskanzer. |desarrollador=Vern Paxson...')
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
GNU Flex
Información sobre la plantilla
260px
CreadorJef Poskanzer.
DesarrolladorVern Paxson
Versiones2.5

Flex. Es un generador de analizadores léxicos, una herramienta creada para generar escáneres. Desarrollado por Vern Paxson a partir de la versión original de Jef Poskanzer con la ayuda de Van Jacobson.En la actualidad está integrada a la herramienta Bison para en conjunto ser utilizados en la construcción de potentes compiladores.

Funcionamiento

Flex recibe un fichero de entrada o varios con extensión .l, con la descripción del escáner que se desea generar.La descripción se encuentra en forma de parejas de expresiones regulares y código en C, denominadas reglas.La salida de Flex es un fichero en C cuyo nombre por defecto es `lex.yy.c' en el que se define una rutina `yylex ()',el mismo se compila y enlaza con la librería “-lfl” para producir un ejecutable, que al ser ejecutado analizará la entrada en busca de casos de las expresiones regulares y ejecutará el código en C correspondiente.

Formato del fichero de entrada de Flex

El fichero de entrada de Flex, es un archivo de extensión .l, o .ll si se trabaja en C++, el mismo está compuesto por tres secciones, separadas por una línea donde aparece únicamente un símbolo‘%%' en esta: Definiciones %% Reglas %% Código de usuario

Sección de definiciones

La sección de definiciones contiene declaraciones de definiciones de nombres sencillos para simplificar la especificación del escáner, y declaraciones de condiciones de arranque.Las definiciones de nombre tienen la forma:

nombre definición

El nombre será una palabra que comience con una letra o un guión bajo y puede contener letras y dígitos.La definición comienza en el primer carácter que sigue al nombre siempre que este no sea un espacio en blanco y continúa a todo lo largo de la línea.

Sección de Reglas

La sección de reglas en la entrada de Flex contiene una serie de reglas de la forma: patrón acción Donde el patrón debe estar sin sangrar y la acción debe comenzar en la misma línea. Los patrones en la entrada se escriben utilizando un conjunto extendido de expresiones regulares.

Sección Código de Usuario

Esta sección se utiliza para rutinas de complemento que llaman al escáner o son llamadas por este. La presencia de esta sección es opcional; si se omite, el segundo %% en el fichero de entrada se podría omitir también. Esta sección se copia literalmente a `lex.yy.c'.

Un ejemplo
%{
#include <stdlib.h>
%}
DIGITO          [0-9]                                       /*Reconoce dígitos*/
NUMEROD   [-+]? {DIGITO}+\. {DIGITO}+    /*Reconoce números reales*/
NUMEROE   [-+]? {DIGITO}+                       /*Reconoce números enteros*/
%%
{NUMEROE}              {yylval.d_type=atof (yytext); return (NUMEROD) ;} 
{NUMEROE}              {yylval.d_type=atof (yytext); return (NUMEROE) ;} 
%%
Main
{
  yylex ();
}

Opciones

Flex brinda un conjunto de opciones que facilitan su uso, las más utilizadas. Opción Descripción -Pprefijo Cambia el prefijo ‘yy' usado por defecto por Flex para todas las variables visibles globalmente y nombres de funciones para que sea el nuevo prefijo. -+ Especifica que quiere que Flex genere un analizador como una clase de C++ -v Especifica que Flex debería escribir en stderr un sumario de estadísticas respecto al analizador que genera -p Genera un informe de rendimiento en stderr.

Fuente

  • Artículo Manual de Flex 2.5 Disponible en la Web "es.tldp.org" Consultado:20 de octubre del 2011