3

次のコードをflexで実行すると、エラーとして最後の行で時期尚早のEOFが発生します。定義部分を削除してもエラーは発生しませんが、なぜそうなのですか?

%{
     #include <stdio.h>
       int x = 0;
}%

%%
"a"  {x=x+1; printf("id %d",x); }
%%

int yywrap(void)
{
    return 0;
}

int main(void)
{
int x = 0;
    yylex();
    return 0;
}
4

2 に答える 2

10

コードの3行目に問題があります。}%ではなく%}にする必要があります

これを試して :

%{
x = 0;
%}

%%
[a]  {x++; printf("id %d",x); }
%%

int main(void)
{
    yylex();
    return 0;
}

何をしようとしているのかわかりませんが、入力ファイルで検出されたすべてのIDを出力する実際の例は次のようになります。

%{
x = 0;
%}

%%
[a]  {x++; printf("id %d ",x); }
%%

int main(int argc,char * argv[])
{
  yyin = fopen(argv[1],"r");
  yylex();
  fclose(yyin);
  return 0;
}
于 2013-03-08T19:29:24.497 に答える
0

0ではなくyywrapからtrue(1)を返したいとします。

フレックスマニュアルから:

スキャナーは、からファイルの終わりの表示を受信すると、機能YY_INPUTをチェックしyywrap()ます。false(ゼロ)を返す場合、関数が先に進んで別の入力ファイルを指すようにyywrap()設定されていると見なされ、スキャンが続行されます。yyintrue(ゼロ以外)を返す場合、スキャナーは終了し、呼び出し元に0を返します。

于 2012-09-22T15:04:32.563 に答える