如何为yylex添加额外的参数(在bison / flex中)?
发布时间:2020-12-15 01:44:24 所属栏目:百科 来源:网络整理
导读:我正在尝试使用flex和bison创建一个可重入的解析器. 我想添加一个参数来保存一些状态,但我没有将它添加到yylex(). 下面是示例,它不会被编译,只显示生成的代码. 傻子 %option reentrant%option bison-bridge%option header-file="foo.tab.h"%{#include "foo.t
我正在尝试使用flex和bison创建一个可重入的解析器.
我想添加一个参数来保存一些状态,但我没有将它添加到yylex(). 下面是示例,它不会被编译,只显示生成的代码. 傻子 %option reentrant %option bison-bridge %option header-file="foo.tab.h" %{ #include "foo.tab.h" %} %% "{" { return "{"; } ")" { return '}'; } %% foo.y %define api.pure full %define parse.error verbose %parse-param {void *scanner} %parse-param {int *pint} %lex-param {void *scanner} %lex-param {int *pint} %token '(' ')' %% foo : '(' | ')' ; %% 运行: bison -d -b foo foo.y flex foo.l gcc -E lex.yy.c | less 我们可以看到int yylex(YYSTYPE * yylval_param,yyscan_t yyscanner){…}所以品脱了.但我想我已经在foo.y指定了它.那么我需要做些什么让yylex接受品脱? 环境:使用Bison-3.0.4和Flex 2.5.39稳定Gentoo Linux 解决方法
%lex-param说野牛用额外的参数调用yylex,但没有说任何东西要弯曲.
可以通过在foo.l文件的定义部分中定义YY_DECL宏来更改yylex()函数的默认定义.为了只将int * pint作为参数,它看起来像这样: #define YY_DECL int yylex(int * pint) 如果还需要yylval_param和yyscanner,那么: #define YY_DECL int yylex(YYSTYPE * yylval_param,yyscan_t yyscanner,int * pint) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |