我想忽略整数的前导零 假设我有00034我想只接受43而忽略零。 我正在使用flex,我想返回一个整数43的令牌
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*
忽略单个零点。
有什么想法吗?
答案 0 :(得分:1)
为什么呢?您不会返回文本。您返回令牌INT
,并且还应将atoi(yyext)
存储到yylval
。 那是照顾前导零的东西。不是分析仪。你的规则应该是:
[0-9]+ { yylval.intValue = atoi(yytext); return INT; }