Bison 如何从flex调用yyerror()?
我在我的Bison文件中定义了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) { ... } 如
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]将>编码到解析器,并让它将坏字符作为语法错误处理。