如何解决如何从 flex 调用 yyerror()?
我在 Bison 文件中定义了 yyerror()
:
解析器.y
...
%code {
void yyerror(YYLTYPE* yyllocp,yyscan_t unused,const char** errorReturn,const char* msg);
}
...
void yyerror(YYLTYPE* yyllocp,const char* msg) {
...
}
如果可能的话,我想在我的 flex 文件中使用自定义消息调用它:
flex.l
%option reentrant bison-bridge bison-locations
...
"]" return TOKEN(TCLOSEINDEX);
. {yyerror("UnkNown token");}
%%
我怎样才能做到这一点?
解决方法
如果您将 yyerror
的声明放在 %code provides
块而不是默认的 %code
块中,它将被复制到生成的头文件中,这将使其定义可用于您的扫描仪实现。 (您需要 provides
而不是 requires
,因为声明依赖于 YYLTYPE
的声明。)
当然,您需要使用其所有必需的参数来调用它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。