我在我的Bison文件中定义了yyerror():
parser.y
...
%code {
void yyerror(YYLTYPE* yyllocp, yyscan_t unused, const char** errorReturn, const char* msg);
}
...
void yyerror(YYLTYPE* yyllocp, yyscan_t unused, const char** errorReturn, const char* msg) {
...
}如果可能的话,我想用自定义消息在我的flex文件中调用它:
flex.l
%option reentrant bison-bridge bison-locations
...
"]" return TOKEN(TCLOSEINDEX);
. {yyerror("Unknown token");}
%%我如何才能做到这一点?
发布于 2021-04-28 03:32:37
如果您将yyerror的声明放在%code provides块中,而不是默认的%code块中,它将被复制到生成的头文件中,这将使其定义可用于您的扫描器实现。(您需要provides而不是requires,因为声明依赖于YYLTYPE的声明。)
当然,您需要使用它所需的所有参数来调用它。
https://stackoverflow.com/questions/67289055
复制相似问题