我正在为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); ...
解决方法
当我尝试这个时,事实证明我必须有一个规则,实际上匹配yylineno的换行符进行更新.使用以下规则它是有效的,没有它yylineno永远不会改变:
\n { }