忽略前导零并使用 flex 分析器读取其余部分

ignore leading zeros and read the rest with flex analyzer

我想忽略整数的前导零 假设我有 00034 我只想接受 43 并忽略零。 我正在使用 flex,我想 return 整数 43

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

然后:

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

但是这些有一个问题,因为当我尝试 0032 时,我得到了正确的结果,但是当我尝试 032 时,它 returns 0 作为一个 int,32 作为一个 int。

如果我使用:

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

忽略单个零。

有什么想法吗?

为什么?你不 return 文本。您 return 令牌 INT,您还应该将 atoi(yyext) 存储到 yylval 中。 那是负责前导零的。不是分析仪。您的规则应该是:

[0-9]+ { yylval.intValue = atoi(yytext); return INT; }