忽略前导零并使用 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; }
我想忽略整数的前导零 假设我有 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; }