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 回答