%{ #define set_estado(x) BEGIN(_stack[_i]=x) #define push_to_stack(x) _stack[++_i]=YY_START; set_estado(x) #define pop_back set_estado(_stack[--_i]) #define MAX 10 int _stack[MAX]; int _i=0; int cont_idmat=1; %} NUMINT [0-9]+ BLANK [ \t\n] TEXTOMAT [\\\{\}\(\)\[\]&;=a-zA-Z0-9:\-\.,_+\^\n \t]+ %Start e1 e2 e3 e4 e5 %% set_estado(e1); \ {printf("", cont_idmat++); push_to_stack(e2);} {TEXTOMAT}\<\/matematica\> {; printf(""); pop_back;} %%