Sistemas

Solo disponible en BuenasTareas
  • Páginas : 8 (1970 palabras )
  • Descarga(s) : 7
  • Publicado : 14 de junio de 2010
Leer documento completo
Vista previa del texto
Herramientas Bison y Flex.
Flex:

Flex es una herramienta para generar escáneres: programas que reconocen patrones léxicos en un texto. flex lee los ficheros de entrada dados, o la entrada estándar si no se le ha indicado ningún nombre de fichero, con la descripción de un escáner a generar. La descripción se encuentra en forma de parejas de expresiones regulares y código C, denominadasreglas. flex genera como salida un fichero fuente en C, `lex.yy.c', que define una rutina `yylex()'. Este fichero se compila y se enlaza con la librería `-lfl' para producir un ejecutable. Cuando se arranca el fichero ejecutable, este analiza su entrada en busca de casos de las expresiones regulares. Siempre que encuentra uno, ejecuta el código C correspondiente.
Flex permite generar analizadoresléxicos. A partir de un conjunto de expresiones regulares, Flex busca concordancias en un fichero de entrada y ejecuta acciones asociadas a estas expresiones.
Los ficheros de entrada de Flex (normalmente con la extensión .l) siguen el siguiente esquema:

%%
patrón1 {acción1}
patrón2 {acción2}
...

donde:
patrón: expresión regular
acción: código C con las acciones a ejecutar cuando seencuentre concordancia del patrón con el texto de entrada Flex recorre la entrada hasta que encuentra una concordancia y ejecuta el código asociado. El texto que no concuerda con ningún patrón lo copia tal cual a la salida. Por ejemplo:

%%
a*b {printf(“X”);};
re ;

El ejecutable correspondiente transforma el texto:

abre la puertaab
en
X la puertX

pues ha escrito X cada vezque ha encontrado ab o aab y nada cuando ha encontrado re.
Flex lee los ficheros de entrada dados, o la entrada estándar si no se le ha indicado ningún nombre de fichero, con la descripción de un escáner a generar. La descripción se encuentra en forma de parejas de expresiones regulares y código C, denominadas reglas. Flex genera como salida un fichero fuente en C, ‘lex.yy.c’, que define unafunción ‘yylex()’. Este fichero se compila y se enlaza con la librería de Flex para producir un ejecutable. Cuando se arranca el fichero ejecutable, este analiza su entrada en busca de casos de las expresiones regulares. Siempre que encuentra uno, ejecuta el código C correspondiente.
El fichero de entrada de Flex está compuesto de tres secciones, separadas por una línea donde aparece únicamente un‘%%’ en esta:
definiciones
%%
reglas
%%
código de usuario

La sección de definiciones contiene declaraciones de definiciones de nombres sencillas para simplificar la especificación del escáner, y declaraciones de condiciones de arranque, que se explicarán en una sección posterior. Las definiciones de nombre tienen la forma:

nombre definición

El "nombre" es una palabra que comienzacon una letra o un subrayado (‘_’) seguido por cero o más letras, dígitos, ‘_’, o ‘-’ (guión). La definición se considera que comienza en el primer carácter que no sea un espacio en blanco siguiendo al nombre y continuando hasta el final de la línea. Posteriormente se puede hacer referencia a la definición utilizando "{nombre}", que se expandirá a "(definición)". Por ejemplo,
DIGITO [0-9]
ID[a-z][a-z0-9]*

Define "DIGITO" como una expresión regular que empareja un dígito sencillo, e "ID" como una expresión regular que empareja una letra seguida por cero o más letras o dígitos. Una referencia posterior a

{DIGITO}+"."{DIGITO}*

es idéntica a

([0-9])+"."([0-9])*

y empareja uno o más dígitos seguido por un ‘.’ seguido por cero o más dígitos.
La sección de reglas en laentrada 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.
Finalmente, la sección de código de usuario simplemente se copia a ‘lex.yy.c’ literalmente. 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...
tracking img