次のコードがあり、次のコマンドflex hello.lを実行すると、エラー "" hello.l "、line 31:prematureEOF"が表示されます。
%{
#include <stdlib.h>
#include "y.tab.h"
%}
%%
("hi"|"oi")"\n" {return HI; }
("tchau"|"bye")"\n" {return BYE;}
. {yyerror(); }
%%
int main(void)
{
yyparse();
return 0;
}
int yywrap(void)
{
return 0;
}
int yyerror(void)
{
printf("Error\n");
exit(1);
}
問題はあなたの%}
にあります-フレックスは非常に間隔に敏感です。その前のスペースを削除すると、すべてがうまくいくはずです。
また、yywrap関数が必要ない場合は、フレックスファイルに%option noyywrap
を貼り付けることができます。
これを変える:
%{
#include <stdlib.h>
#include "y.tab.h"
%}
これに:
%{
#include <stdlib.h>
#include "y.tab.h"
%}
それはフレックス2.5.35(mingw)で動作します