为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
Why bison still using `int yylex(void)` and cannot find `int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param)`?
我正在尝试将位置信息添加到flex和bison中。但我的野牛仍在使用int yylex(void)
,找不到int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param)
。
这是我的lex文件Token.l
:
%option noyywrap nodefault yylineno 8bit
%option bison-locations bison-bridge
%{
#include ...
#include "Parser.tab.hpp"
#define T_SAVE_TOKEN yylval->literal = strndup(yytext, yyleng)
#define T_SAVE_TOKEN_X(p, q) yylval->literal = strndup(yytext+(p), yyleng-(p)-(q))
#define T_SAVE_NO_TOKEN yylval->literal = nullptr
#define T_TOKEN(t) (yylval->token = t)
#define YY_USER_ACTION
yylloc->first_line = yylloc->last_line;
yylloc->first_column = yylloc->last_column;
if (yylloc->last_line == yylineno) {
yylloc->last_column += yyleng;
} else {
yylloc->last_line = yylineno;
yylloc->last_column = yytext + yyleng - strrchr(yytext, 'n');
}
%}
%%
...
%%
...
这是我的野牛文件Parser.y
:
%locations
%code top {
#include ...
}
%code {
extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param);
}
/* different ways to access data */
%union {
char *literal;
int token;
}
这是我生成C++代码的shell命令:
flex -o Token.yy.cpp Token.l
bison -d -o Parser.tab.cpp --defines=Parser.tab.hpp Parser.y
这是我的错误信息:
Parser.tab.cpp:1674:16: error: no matching function for call to 'yylex'
yychar = yylex ();
^~~~~
/Users/rolin/workspace/github/coli/src/./Token.h:16:12: note: candidate function not viable: requires 2 arguments, but 0 were provided
extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param);
^
请帮帮我。
您似乎需要一个可重入的解析器。
为了让野牛支持这一点,你必须使用标志
%pure-parser
野牛宣言中的某个地方。然后用两个参数lval
和lloc
调用yylex()
函数。
相关文章:
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 使用未声明的标识符"yylex"和"yyin"?
- 'char (*RtlpNumberOf(T (&)[N]))[N]':无法从"char *"
- Arduino IDE 错误 - 无法找到数字文字运算符"运算符""f900ff"
- "inline"、"constexpr"或"noexcept"
- "非静态数据成员之前需要构造函数" - 我是否使用"boost::variant"
- 我必须安装"libbitcoin-server"才能包含"bitcoin.hpp"
- G++ flex 和 bison 'yylex' 未在此范围内声明
- 野牛没有使用正确的yylex参数
- “并非所有控制路径都返回一个值./&quot“控制可能达到非空隙功能的末端”.验证时循环时
- 如何输出a'&quot在不使用线端的情况下进行文件
- 删除“按任何键” ..&quot.从VS C 控制台应用程序
- 如何检测我何时向可变参数函数传递"std::string"而不是"c_str()"
- Bison试图在解析器上使用免费的yylex()函数C++
- 野牛:如何修复这个"参数太多而无法运行'int yylex()'错误?
- '<'''<'''&quot的模板类错误''令牌”
- 对"yylex"的未定义引用
- 是否可以在同一个C/ c++程序中使用两个或多个不同的yylex()函数?
- 对"yylex"的未定义引用和对"yyin"的未定义引用
- 错误消息:"jj"的名称查找已更改为ISO"for"范围,(如果您使用"