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)