微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

flex-lexer – Flex yylineno设置为1

我正在为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 { }

原文地址:https://www.jb51.cc/flex/174210.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐