next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Las opciones interactive Sup: Expresiones Regulares en Flex Ant: Declaraciones pointer y array Err: Si hallas una errata ...

Las Macros YY_USER_ACTION, yy_act e YY_NUM_RULES

La macro YY_USER_ACTION permite ejecutar una acción inmediatamente después del ``emparejamiento'' y antes de la ejecución de la acción asociada. cuando se la invoca, la variable yy_act contiene el número de la regla que ha emparejado (las reglas se numeran a partir de uno). La macro YY_NUM_RULES contiene el número de reglas, incluyendo la regla por defecto.

El siguiente programa aprovecha dichas macros para mostrar las frecuencias de uso de las reglas.

$ cat user_action.l
%array
%{
#include <string.h>
 
int ctrl[YY_NUM_RULES];
#undef YY_USER_ACTION
#define YY_USER_ACTION { ++ctrl[yy_act]; }
%}
number [0-9]+
id   [a-zA-Z_]+[a-zA-Z0-9_]*
whites [ \t\n]+
%%
{id}
{number}
{whites}
.
%%
 
int yywrap() {
  int i;
 
  for(i=1;i<YY_NUM_RULES;i++)
    printf("Rule %d: %d occurrences\n",i,ctrl[i]);
}
                                                  
$ flex user_action.l ; gcc lex.yy.c -lfl ; a.out
a=b+2*(c-4)
Rule 1: 3 occurrences
Rule 2: 2 occurrences
Rule 3: 1 occurrences
Rule 4: 6 occurrences


next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Las opciones interactive Sup: Expresiones Regulares en Flex Ant: Declaraciones pointer y array Err: Si hallas una errata ...
Casiano Rodríguez León
2012-05-22