










Sig: yywrap()
Sup: Expresiones Regulares en Flex
Ant: Declaración de yytext
Err: Si hallas una errata ...
Declaración de yylex()
Por defecto la función yylex() que realiza el análisis léxico es
declarada como int yylex(). Es posible cambiar la declaración
por defecto utilizando la macro YY_DECL. En el siguiente ejemplo
la definición:
#define YY_DECL char *scanner(int *numcount, int *idcount)
hace que la rutina de análisis léxico pase a llamarse
scanner y tenga dos parametros de entrada, retornando
un valor de tipo char *.
$ cat decl.l
%{
#define YY_DECL char *scanner(int *numcount, int *idcount)
%}
num [0-9]+
id [a-z]+
%%
{num} {(*numcount)++;}
halt {return ((char *) strdup(yytext));}
{id} {(*idcount)++;}
%%
main() {
int a,b;
char *t;
a = 0; b = 0;
t = scanner(&a, &b);
printf("numcount = %d, idcount = %d, yytext = %s\n",a,b,t);
t = scanner(&a, &b);
printf("numcount = %d, idcount = %d, yytext = %s\n",a,b,t);
}
int yywrap() {
return 1;
}
La ejecución del programa anterior produce la siguiente salida:
$ decl
a b 1 2 3 halt
numcount = 3, idcount = 2, yytext = halt
e 4 5 f
numcount = 5, idcount = 4, yytext = (null)
$ decl
a b 1 2 3 halt
numcount = 3, idcount = 2, yytext = halt
e 4 f 5 halt
numcount = 5, idcount = 4, yytext = halt











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