lex & yacc obtêm a posição atual

No lex & yacc, existe uma macro chamada YY_INPUT que pode ser redefinida, por exemplo, dessa maneira

#define YY_INPUT(buf,result,maxlen) do { \
 const int n = gzread(gz_yyin, buf, maxlen); \                                                                              
 if (n < 0) { \
       int errNumber = 0; \
       reportError( gzerror(gz_yyin, &errNumber)); } \
     \
     result = n > 0 ? n : YY_NULL; \
  } while (0)

Eu tenho alguma regra gramatical que chamou a macro YYACCEPT. Se depois do YYACCEPT eu chamei gztell (ou ftell), obtive um número errado, porque o analisador já leu alguns dados desnecessários.

Então, como posso obter a posição atual se tiver alguma regra chamada YYACCEPT (uma solução ruim será ler caractere por caractere)

(Eu já fiz algo parecido com isto:

#define YY_USER_ACTION do { \
        current_position += yyleng; \
} while (0)   

mas parece que não está funcionando)

questionAnswers(1)

yourAnswerToTheQuestion