如何从lex / yacc获取更多解析错误信息?
目前在我正在使用的lex文件中:
int yyerror(const char *msg)
{
fprintf(stderr, "Parse error: %s\n", msg);
return 0;
}
但是当我运行我的程序时,yyerror会输出一条空白消息。我尝试将yylineno和yytext添加到yyerror但这会导致编译错误。我尝试添加"%error-verbose"到yacc文件和 "%选项debug"到lex文件,但这些对消息没有任何影响。
但我确实注意到yyparse输出了一个括号:' {'从我试图解析的文件中,我不知道这个的重要性。
我正在使用win_flex和win_bison。
答案 0 :(得分:0)
当official bison manual显示如何使用yyerror
来改进错误消息时,{{3}}中描述了大部分内容。
特别是,它建议您在Bison声明部分中使用%define parse.error verbose
来获取增强的错误消息。