next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: La Opción outfile Sup: Expresiones Regulares en Flex Ant: Final de Fichero Err: Si hallas una errata ...

Uso de Dos Analizadores

La opción -Pprefix de flex cambia el prefijo por defecto yy para todas las variables globales y funciones. Por ejemplo -Pfoo cambia el nombre de yytext footext. También cambia el nombre del fichero de salida de lex.yy.c a lex.foo.c. Sigue la lista de identificadores afectados:
 
yy_create_buffer
yy_delete_buffer
yy_flex_debug
yy_init_buffer
yy_flush_buffer
yy_load_buffer_state
yy_switch_to_buffer
yyin
yyleng
yylex
yylineno
yyout
yyrestart
yytext
yywrap
Desde dentro del analizador léxico puedes referirte a las variables globales y funciones por cualquiera de los nombres, pero externamente tienen el nombre cambiado. Esta opción nos permite enlazar diferentes programas flex en un mismo ejecutable.

Sigue un ejemplo de uso de dos analizadores léxicos dentro del mismo programa:

$ cat one.l
%%
one {printf("1\n"); return 1;}
.   {printf("First analyzer: %s\n",yytext);}
%%
 
int onewrap(void) {
  return 1;
}
 
$ cat two.l
%%
two {printf("2\n"); return 2;}
.   {printf("Second analyzer: %s\n",yytext);}
%%
int twowrap(void) {
  return 1;
}
$ cat onetwo.c
main() {
  onelex();
  twolex();
}
Como hemos mencionado, la compilación flex se debe realizar con el opción -P, que cambia el prefijo por defecto yy de las funciones y variables accesibles por el usuario. El mismo efecto puede conseguirse utilizando la opción prefix, escribiendo %option prefix="one" y %option prefix="two" en los respectivos programas one.l y two.l.
$ flex -Pone one.l
$ flex -Ptwo two.l
$ ls -ltr | tail -2
-rw-rw----   1 pl       casiano     36537 Nov  7 09:52 lex.one.c
-rw-rw----   1 pl       casiano     36524 Nov  7 09:52 lex.two.c
$ gcc onetwo.c lex.one.c lex.two.c
$ a.out
two
First analyzer: t
First analyzer: w
First analyzer: o
 
one
1
one
Second analyzer: o
Second analyzer: n
Second analyzer: e
 
two
2
$


next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: La Opción outfile Sup: Expresiones Regulares en Flex Ant: Final de Fichero Err: Si hallas una errata ...
Casiano Rodríguez León
2012-05-22