9

tcpdump ログ用の単純なパーサーを作成しています。適切な行番号を取得できない理由を教えてください。

%{
char str[80];
%}
%option yylineno

...
%%

^{HOURS}:{MINUTES}:{MINUTES} if(input()=='.') { strcpy(str, yytext);  BEGIN(A); } else {printf("Wrong hour %d", yylineno); }
<A>({NDPS}|{DPS})\.({NDPS}|{DPS})\.({NDPS}|{DPS})|\.{NDPS} printf("Wrong IP!, %d", yylineno);
<A>[ ]{DPS}\.{DPS}\.{DPS}\.{DPS} strcat(str, " from "); strcat(str, yytext+1); BEGIN(B);
...
4

1 に答える 1

18

これを試してみたところ、yylineno を更新するには改行に実際に一致するルールが必要であることがわかりました。次のルールを使用すると機能し、それがなければ yylineno は変更されませんでした:

\n { }
于 2012-11-11T11:42:52.313 に答える