 
 
 
 
 
 
 
 
 
 










 
 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