我正在尝试使用 flex 和 bison 创建过滤器,因为我想从复杂语言中获取某些语法元素。我的计划是使用 flex + bison 来识别语法,并转储出感兴趣元素的位置。(然后使用脚本根据转储的位置获取文本。)
我发现 flex 可以支持名为 bison-locations 的野牛功能,但它是如何工作的。我尝试了 flex 文档中的示例,似乎 yylloc 不是由 flex 自动设置的,我总是得到(1,0)-(1,0)
. flex 可以自动计算每个令牌的位置吗?如果没有,定义了哪些接口函数供我实现?有什么例子吗?
关于工具有更好的解决方案吗?
最好的问候,凯文
编辑:
现在yylex的界面变成了:
int yylex(YYSTYPE * yylval_param,YYLTYPE * yylloc_param );
野牛手册未指定词法分析器应如何实现以正确设置 yylloc_param。对我来说,很难手动跟踪每个令牌的列号。