2016-09-15 4 views
0

私はantlr4で新しいです...私はantlr4の各トークンの行と列の数を取得するためにたくさん検索します...私はフレックスとバイソンでよくknewoleadgeを持っており、私はフレックスとバイソン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に私が書く:

私は構造体を定義bison.yに

:... flexとbisonに私は簡単なコードで行と列の数を取得しました

int lineNo = 1; 
int colNo = 1; 
"while"     { 

           yylval.r.myLineNo= lineNo; 
           yylval.r.myColno = colNo; 
           colNo += strlen(yytext); 
           return T_WHILE ;   
          } 

このように私は数字とflexとbison ... NOTEとlumn:私は印刷に私自身のタイプエラーチェックのための数と列の行が必要

のでantlr4

+0

['Token'インタフェース](http://www.antlr.org/api/Java/org/antlr/v4/runtime/Token.html)には、必要なすべてのメソッドがあります:' getLine() 'と'getCharPositionInLine()' –

+0

ok ...このインタフェースの使い方のサンプルを教えていただけますか?@Lucas Trzesniewski – Micle

+1

いいえ、私はあなたにANTLRの基本を教えませんが、このサイトは*このためではありません。 [ドキュメントを読む](https://github.com/antlr/antlr4/blob/master/doc/index.md)、使用法は*かなり*明白でなければなりません。 –

答えて

0
に各トークンの行と列の数を取得するために私を助けることができます

error listenerを使用して、構文エラーを通知します。原則は非常に簡単です。独自の子孫を作成し、reportError()関数をオーバーライドします。リスナークラスを設置するには、parser.addErrorListener()と呼んでください。

+0

thanks @Mike Lischke – Micle

+0

私の答えがあなたを助けたら、左側のチェックマークをクリックして受け入れてください。あなたが価値があると感じたら、アップヴォートすることもできます。 「感謝」だけのコメントを投稿しないでください。 –

関連する問題