$ cat unput2.l %array %% [a-z] {unput(toupper(yytext[0]));} [A-Z] ECHO; %% $ flex unput2.l ; gcc lex.yy.c -lfl;a.out abcd ABCDUn 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)