2016-04-14 36 views
0

我想忽略整数的前导零 可以说我有00034我只接受43并忽略零。 我使用Flex和我想返回一个标记整数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; }