next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: input() Sup: Expresiones Regulares en Flex Ant: yywrap() Err: Si hallas una errata ...

unput()

La función unput(c) coloca el carácter c en el flujo de entrada, de manera que será el primer carácter leído en próxima ocasión.
$ cat unput2.l
%array
%%
[a-z] {unput(toupper(yytext[0]));}
[A-Z] ECHO;
%%
$ flex unput2.l ; gcc lex.yy.c -lfl;a.out
abcd
ABCD
Un problema importante con unput es que, cuando se utiliza la opción %pointer, las llamadas a unput destruyen los contenidos de yytext. Es por eso que, en el siguiente ejemplo se hace una copia de yytext. La otra alternativa es, por supuesto, usar la opción %array.
$ cat unput.l
%%
[0-9]+ {
  int i;
  char *yycopy = (char *) strdup(yytext);
 
  unput(')');
  for(i=strlen(yycopy)-1; i>=0; --i)
    unput(yycopy[i]);
  unput('(');
  free(yycopy);
}
\([0-9]+\) printf("Num inside parenthesis: %s\n",yytext);
.|\n
$ flex unput.l ; gcc lex.yy.c -lfl ; a.out
32
Num inside parenthesis: (32)
(43)
Num inside parenthesis: (43)


next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: input() Sup: Expresiones Regulares en Flex Ant: yywrap() Err: Si hallas una errata ...
Casiano Rodríguez León
2013-03-05