次の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の外部)を使用しましたが、完全に機能しているようです。
ありがとう