2016-04-14 4 views
0

Я хочу игнорировать ведущие нули целого числа позволяет сказать, что у меня есть 00034, я хочу принять только 43 и игнорировать нули. Я использую гибкий и я хочу, чтобы вернуть маркер для целого 43игнорировать ведущие нули и читать остальное с помощью анализатора flex

NUMBER [1-9][0-9]*|0 
ZEROS 00+ 

, а затем:

{ZEROS} { /*DO NOTHING*/ } 
{NUMBER} { return INT; } 

но есть проблема с тем, потому что, когда я пытаюсь 0032 я получаю правильный результат но когда я пытаюсь 032, он возвращает 0 как int и 32 как int.

, если я использую:

NUMBER [1-9][0-9]*|0 
ZEROS 00* 

Сингл ноль игнорируются.

любые мысли?

ответ

1

Почему? Вы не возвращаете текст. Вы возвращаете токен INT, и вы также должны хранить atoi(yyext) в yylval. Это, что позаботится о ведущих нулях. Не анализатор. Ваше правило должно быть:

[0-9]+ { yylval.intValue = atoi(yytext); return INT; } 
Смежные вопросы