我是antlr4的新手......我搜索了很多来获取antlr4中每个标记的行数和列数...我在flex和bison上有一个很好的knewoleadge我用flex和php做了一个完整的php编译器bison ...在flex和bison中我通过一个简单的代码得到了行和列的数量:
在bison.y我定义struct:
struct R{
int i;
float f;
char c;
char* str;
int myLineNo;
int myColno;
}r;
namespace_name_parts: // rule
T_STRING {
$<Expre>$=new var_dec($<r.str>1,$<r.myLineNo>1,$<r.myColno>1);
};
并在flex.l中写道:
int lineNo = 1;
int colNo = 1;
"while" {
yylval.r.myLineNo= lineNo;
yylval.r.myColno = colNo;
colNo += strlen(yytext);
return T_WHILE ;
}
这样我可以通过flex和bison获得数字和列的行... 注意:我需要数字和列的行来打印我自己的类型检查错误
这样可以帮助我获取antlr4中每个标记的行数和列数
答案 0 :(得分:0)
使用error listener获取有关语法错误的通知。原理很简单。创建自己的后代并覆盖reportError()
函数。为了使你的听众课程到位,请致电parser.addErrorListener()
。