我正在使用以下 lex 文件将数字转换为标记。但是,该程序无法正确解析浮点数。为了调试,我添加了 printf 语句,它们表明 strtof 函数无法正确解析数字。因此,给我输入 4.2 给我输出 0。
%{
#include <stdlib.h>
void yyerror(char *);
#include "y.tab.h"
char *p = NULL;
%}
%%
[0-9]+\.[0-9]+ {
printf("%s", yytext);
yylval = strtof(yytext, &p);
printf("%f has been read\n", yylval);
return FLOAT;
}
[0-9]+ { yylval = atoi(yytext);
printf("%d (int) has been read\n", yylval);
return INTEGER;
}
[-+*/\n] { printf("%s has been read", yytext);
return *yytext;
}
[ \t] ; /* skip whitespace */
. {
printf("Invalid character %s", yytext);
yyerror("invalid character");
}
%%
int yywrap(void) {
return 1;
}
任何想法上面代码中的问题在哪里?我使用了具有相同输入的 strtof 函数(在 lex 之外),它似乎工作得很好。
谢谢