web-dev-qa-db-ja.com

フレックスファイルの早期eofエラー

次のコードがあり、次のコマンド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);
}
13
Waseem

問題はあなたの%}にあります-フレックスは非常に間隔に敏感です。その前のスペースを削除すると、すべてがうまくいくはずです。

また、yywrap関数が必要ない場合は、フレックスファイルに%option noyywrapを貼り付けることができます。

25
barrucadu

これを変える:

%{

  #include <stdlib.h>
  #include "y.tab.h"

  %}

これに:

%{

  #include <stdlib.h>
  #include "y.tab.h"

%}

それはフレックス2.5.35(mingw)で動作します

6
INS