Я использую следующий файл 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) с тем же вводом, и, похоже, она отлично работает.
Спасибо