如何获取antlr4中每个令牌的行数和列数?

问题描述:

我是新的antlr4 ...我搜索了很多,以获得每个令牌的行数和列数antlr4 ...我有一个良好knewoleadge flex和野牛,我做了一个完整的编译器为PHP与flex和野牛......在flex和野牛我是通过简单的代码获得的行和列的数量:在bison.y如何获取antlr4中每个令牌的行数和列数?

我定义的结构:

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 ;   
          } 

这样我可以得到数字和公司的行lumn Flex和野牛... 注:我需要的数量和列的打印我自己的类型检查错误的行

这样可以帮助我得到antlr4

+0

['Token'接口](http://www.antlr.org/api/Java/org/antlr/v4/runtime/Token.html)有你需要的所有方法:'getLine()'和'getCharPositionInLine()'。 –

+0

好的...可以给我示例如何使用这个接口吗?@Lucas Trzesniewski – Micle

+1

不,我不会教你ANTLR的基础知识,本网站*不是*为此。 [阅读文档](https://github.com/antlr/antlr4/blob/master/doc/index.md),这个用法应该是*很明显。 –

每个令牌的行和列的数量

使用error listener可获得有关语法错误的通知。原则很简单。创建您自己的后代并覆盖reportError()函数。为了把你的听众班放在电话parser.addErrorListener()

+0

谢谢@Mike Lischke – Micle

+0

如果我的答案帮助你,然后点击左边的复选标记接受它。如果你觉得这是值得你也可以upvote。不要张贴“谢谢” - 仅限评论。 –