2010-06-27 2 views
0

Действительно ли bison и flex позволяют пользователю локализовать сообщения об ошибках? Например, я хотел бы перевести следующее сообщение: синтаксическая ошибка, неожиданное число, ожидающее $ end на другой язык и заменяющее NUMBER/$ end чем-то более понятным для человека.Есть ли способ локализовать сообщения об ошибках из bison/flex?

+1

@Carl, спасибо за предложение. Когда я попытался принять ответы несколько дней назад, я не смог, потому что получил сообщение, что мне нужно больше очков репутации, чтобы это сделать. (но теперь, к счастью, я смог принять ответы) – user360872

ответ

1

Используйте yyerror и YY_USER_ACTION для получения дополнительных данных.

void yyerror(const char *s) { 
    sprintf(dummmy, "%s line %d col %d word '%s'\n", s, myline, mycolumn, yytext); 
    print_error(dummmy); 

в ЛЕКС файле

#define YY_USER_ACTION \ 
    addme(yy_start, yytext); \ 
    mycolumn += yyleng;\ 
    if(*yytext == '\n') { myline++; mycolumn = 0; } else 0; \ 
Смежные вопросы