如何在 yacc/lex 项目中自定义我的错误消息以显示问题的行和类型?
How can I customize my error message in yacc/lex project to display the line and type of problem?
我是编程新手,但我有一个 yacc/lex 项目,并且在详细编写错误消息(错误的行和类型)方面有些困难。请提供任何有关小示例的帮助。
问不好的问题得到正确但没有信息的答案
void yyerror(const char *s);
extern int line_num;
void yyerror(const char *s)
{
std::cerr << "PARSING ERROR: " << line_num << " " << s << std::endl;
exit(1);
}
将以下内容添加到您的 flex 扫描仪定义中,以使扫描仪跟踪行号:
%option yylineno
(参见 the flex manual。)
然后将以下声明添加到您的 bison 语法中:
%define parse.error verbose
%define parse.lac full
(参见 bison 手册中关于 error reporting and LAC (lookahead correction) 的章节。
最后,使用行号信息的yyerror
定义。至少,类似于:
void yyerror(const char* msg) {
fprintf(stderr, "At line %d: %s\n", yylineno, msg);
}
我是编程新手,但我有一个 yacc/lex 项目,并且在详细编写错误消息(错误的行和类型)方面有些困难。请提供任何有关小示例的帮助。
问不好的问题得到正确但没有信息的答案
void yyerror(const char *s);
extern int line_num;
void yyerror(const char *s)
{
std::cerr << "PARSING ERROR: " << line_num << " " << s << std::endl;
exit(1);
}
将以下内容添加到您的 flex 扫描仪定义中,以使扫描仪跟踪行号:
%option yylineno
(参见 the flex manual。)
然后将以下声明添加到您的 bison 语法中:
%define parse.error verbose
%define parse.lac full
(参见 bison 手册中关于 error reporting and LAC (lookahead correction) 的章节。
最后,使用行号信息的yyerror
定义。至少,类似于:
void yyerror(const char* msg) {
fprintf(stderr, "At line %d: %s\n", yylineno, msg);
}