0
//program for displaying words and lines
%{
    int w=0,ch=0;
%}
%%
[^ \t\n.:;,]+ {w++;ch+=yyleng;}
[ \t\n.:;,]+  {ch++;}
%%
main()
{
    printf("Enter the data \n");
    yylex();
    printf("No of words: %d \nNo of characters: %d\n",w,ch);
}
4

1 に答える 1

0

(f)lexによって生成されたyylex関数は、returnステートメントを含むルールに遭遇するか、yyterminate()が呼び出されるまで戻りません。(デフォルトのEOFルールはyyterminateを呼び出します。)

プログラムは期待どおりの動作をします。ファイルの終わりまで入力を消費し、その後yylex()が返され、最終的な要約が出力されます。

ちなみに、単語の区切り文字は正しくカウントされていません。+2番目のパターンから繰り返し演算子を削除するか、そのアクションを次のように変更します。ch += yyleng;

行の終わりに実際にレポートを発行する場合は、2番目のパターンから削除し、アクションが次のようなルールを\n追加します。\n{ return; }

于 2012-10-16T22:53:01.163 に答える