lex/flex yylineno一直为1的两种解决办法

lex/flex yylineno一直为1的两种解决办法

起因

在使用lex做词法分析的demo时,发现错误并不能准确地定位到行,比如一个语法错误发生在第三行,但yylineno显示为1;于是我又更改了文件,让错误出现在其它行,发现yylineno仍然显示1。

现象描述

其实这是一个类似flex自动设置的东西,即flex有能力管理yylineno,但因为这个开销可能比较大,然后并没有将更新yylineno设置为默认选项。针对此,可以有以下两种解决方式。

方法1

.l文件设计的时候,打开针对此选项的拓展,即添加%option yylineno,这样yylineno就会自动更新。如下图所示:
在这里插入图片描述

方法2

.l文件的头c代码部分引入yylineno变量,并在pattern为[\n]时,action将yylineno加一。因为在使用lex编译.l文件后产生的lex.yy.c文件内会管理yylineno变量,因此我们只需要在.l文件中使用extern关键字引入yylineno变量即可。如下图所示:
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值