行数をカウントしたいのであれば、 ファイルの先頭のオプションの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
は、
確立されたソケット・コネクションのファイル・ディスクリプタです。