前: Multiple Scanners, 上: Useful Code
行数をカウントしたいのであれば、 ファイルの先頭のオプションのCコード・セクションに変数を定義して、 改行をチェックします。 スタート状態の中でも改行をチェックするのを忘れないようにしてください。 さもないと、 行数のカウントはうまくいきません。 例えば、 以下のようにします。
%{
int linenumber = 0;
%}
%x COMMENT STRING
%%
"/*" BEGIN(COMMENT);
<COMMENT>\n line_number += 1;
<COMMENT>[^\n]*
<COMMENT>"*/" BEGIN(INITIAL);
\" BEGIN(STRING)
<STRING>\\\n line_number += 1;
<STRING>[^\n\\\"]*
<STRING>\" BEGIN(INITIAL);
\n line_number += 1;
yyinとyyoutをリダイレクトすることによって、
スキャナを
(したがってBisonによるパーサをも)
ソケットにアタッチすることができます。
これは、
fdopen()を呼び出すことによって行います。
例えば、
以下のようになります。
yyin = fdopen(connection, "r");
yyout = fdopen(connection, "w");
ここでconnectionは、
確立されたソケット・コネクションのファイル・ディスクリプタです。