我正在尝试使用flex和bison创建一个过滤器,因为我想从一种复杂的语言中获取某些语法元素。我的计划是使用flex + bison来识别语法,并输出感兴趣的元素的位置。(然后使用脚本根据转储位置获取文本。)
我发现flex可以支持bison-locations的功能,但它如何工作还不是很清楚。我尝试了flex文档中的示例,似乎yylloc没有被flex自动设置,我总是得到(1,0)-(1,0)
。flex能否自动计算每个标记的位置? 如果不能,有哪些接口函数是定义给我实现的? 有没有示例可供参考?
对于工具,有没有更好的解决方案?
最好的祝愿, Kevin
编辑:
现在yylex的接口已经变成:
int yylex(YYSTYPE * yylval_param,YYLTYPE * yylloc_param );
bison 手册没有指定词法分析器应该如何实现以正确设置 yylloc_param。对我来说,手动跟踪每个标记的列号很困难。
yyget_lineno(scanner)
而不是仅仅使用yylineno
。 - barfuin