Bison 如何从flex调用yyerror()?

Bison 如何从flex调用yyerror()?,bison,yacc,lex,Bison,Yacc,Lex,我在我的Bison文件中定义了yyerror(): 语法分析器 ... %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) { ... } 如

我在我的Bison文件中定义了
yyerror()

语法分析器

...
%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");}

%%


如何实现这一点?

如果将
yyerror
声明放在
%code提供的
块而不是默认的
%code
块中,它将被复制到生成的头文件中,从而使其定义可供扫描仪实现使用。(您需要
提供
而不是
要求
,因为声明取决于
YYLTYPE
的声明)


当然,您需要使用所有必需的参数调用它。

再次感谢rici“唤起”和“调用”的意思不一样。最好
返回yytext[0]编码到解析器,并让它将坏字符作为语法错误处理。