Flex yylineno设置为1

时间:2012-11-09 23:41:30

标签: flex-lexer

我正在为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);
...

1 个答案:

答案 0 :(得分:14)

当我尝试这个时,事实证明我必须有一个规则,实际上匹配yylineno的换行符才能更新。使用以下规则它是有效的,没有它,yylineno永远不会改变:

\n { }