Bison通常会使用yyerror函数来打印错误消息,包括指向文本中导致语法错误的字符的指针。可以通过自定义yyerror函数来打印这些字符并使用其他信息来提供更详细的诊断。
以下示例为自定义yyerror函数,会打印出错误位置和导致错误的字符:
void yyerror(const char *msg) {
fprintf(stderr, "Syntax error near '%s' at line %d\n", yytext, yylineno);
exit(1);
}
在Bison语法文件中,需要引用yytext和yylineno变量。yytext包含导致错误的字符的指针,yylineno包含当前行号。使用这个自定义的yyerror函数将产生类似于这样的错误消息:
Syntax error near ',' at line 10
其中,逗号是导致错误的字符。