Flex/Bison';yylex';:函数不接受3个参数
我有以下Lexer.l和Parser.y文件 莱克瑟Flex/Bison';yylex';:函数不接受3个参数,bison,flex-lexer,Bison,Flex Lexer,我有以下Lexer.l和Parser.y文件 莱克瑟 %{ #include "Parser.h" %} %option yylineno %option outfile="Lexer.cpp" header-file="Lexer.h" %option warn nodefault %option reentrant noyywrap never-interactive nounistd %option bison-bridge
%{
#include "Parser.h"
%}
%option yylineno
%option outfile="Lexer.cpp" header-file="Lexer.h"
%option warn nodefault
%option reentrant noyywrap never-interactive nounistd
%option bison-bridge
语法分析器
%{
#include "Parser.h"
#include "Lexer.h"
extern int yyerror(yyscan_t scanner, const char *msg)
{printf("\r\nError: %s", msg); return 1;}
%}
%code requires {
#ifndef YY_TYPEDEF_YY_SCANNER_T
#define YY_TYPEDEF_YY_SCANNER_T
typedef void* yyscan_t;
#endif
}
%output "Parser.cpp"
%defines "Parser.h"
%define api.pure
%pure-parser
%lex-param { yyscan_t scanner }
%parse-param {yyscan_t scanner }
一切正常
现在,我正在尝试获取令牌的列和行;当我使用@1.第一行时,我得到以下错误:
“yylex”:函数不接受3个参数
“yyerror”:函数不接受3个参数
对于这个错误,我查看了编译器对它的要求,并实现了它
但是,对于yylex,我不知道该回报什么。
我试着用2个参数的yylex实现来做一些类似的事情,但它似乎根本就不是yylex的实现
有什么想法吗?如果您使用
选项bison bridge
并且您的解析器有@
引用,您需要添加
%option bison-locations
到您的flex文件。(你可以用它代替野牛桥,但我认为两者都有会更整洁。)来自:
--野牛位置,%option野牛位置
- 指示flex使用GNU bison
%位置。这 表示将向
传递一个附加参数yylex
。 此选项意味着yylloc
%选项野牛桥
- 指示flex使用GNU bison