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