2016-09-15 132 views
0

我是新的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),這個用法應該是*很明顯。 –

回答

0
每個令牌的行和列的數量

使用error listener可獲得有關語法錯誤的通知。原則很簡單。創建您自己的後代並覆蓋reportError()函數。爲了把你的聽衆班放在電話parser.addErrorListener()

+0

謝謝@Mike Lischke – Micle

+0

如果我的答案幫助你,然後點擊左邊的複選標記接受它。如果你覺得這是值得你也可以upvote。不要張貼「謝謝」 - 僅限評論。 –

相關問題