Dr.*_*eon 2 c++ yacc lex bison flex-lexer
好的,所以我想我的问题是不言而喻的。
我目前正在Bison中构建一个解析器,并且我想使错误报告更好一些。
目前,我已设置%define parse.error verbose(实际上会发出类似的消息syntax error, unexpected ***********************, expecting ********************。
我只想在错误消息中添加一些更多信息,例如行号(在输入/文件/等位置)
我目前yyerror(没什么...不寻常...大声笑):
void yyerror(const char *str)
{
fprintf(stderr,"\x1B[35mInterpreter : \x1B[37m%s\n",str);
}
Run Code Online (Sandbox Code Playgroud)
聚苯乙烯
%locations指令,该指令很可能与我需要的指令非常接近-但是,我仍然没有找到完整的工作示例,并且不确定如何使用该指令。因此,这里有一个逐步解决方案:
%locations指令添加到语法文件中(在%}第一个之间%%)#include "mygrammar.tab.h"顶部包含解析器的包含文件(例如)%option yylineno选项添加到lexer文件中(在%}第一个之间%%)现在,在我们的yyerror函数中(应该在我们的lexer文件中),我们可以自由使用此... yylineno (=正在处理的文件中的当前行):
void yyerror(const char *str)
{
fprintf(stderr,"Error | Line: %d\n%s\n",yylineno,str);
}
Run Code Online (Sandbox Code Playgroud)
是的 就那么简单!:-)
| 归档时间: |
|
| 查看次数: |
3683 次 |
| 最近记录: |