如何从lex / yacc获取更多解析错误信息?

时间:2015-01-14 12:45:42

标签: c++ c yacc lex

如何从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。

1 个答案:

答案 0 :(得分:0)

official bison manual显示如何使用yyerror来改进错误消息时,{{3}}中描述了大部分内容。

特别是,它建议您在Bison声明部分中使用%define parse.error verbose来获取增强的错误消息。