










Sig: input()
Sup: Expresiones Regulares en Flex
Ant: yywrap()
Err: Si hallas una errata ...
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)











Sig: input()
Sup: Expresiones Regulares en Flex
Ant: yywrap()
Err: Si hallas una errata ...
Casiano Rodríguez León
2012-05-22