我怎样才能获得antlr4中每个标记的行数和列数?

时间:2016-09-15 18:14:30

标签: java antlr4

我是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中每个标记的行数和列数

1 个答案:

答案 0 :(得分:0)

使用error listener获取有关语法错误的通知。原理很简单。创建自己的后代并覆盖reportError()函数。为了使你的听众课程到位,请致电parser.addErrorListener()