0

私はnetbeans7とANTLR4でエディターを書いて
います.g4ファイルに行があります

Label       : {(getCharPositionInLine()==0)}? ID; 

これは静的ファイルではうまく機能しますが、編集中に getCharPositionInLine() が他の場所で 0 を返すことがよくあります。
レクサーで実際の位置を取得するにはどうすればよいですか?

テキストエディタを編集しているときに、すべてのテキストがレクサーに送信されたのではなく、変更されただけであり、このフラグメントではレクサーが機能していることに気付きました。どう変えたらいいのかわからない。

この問題で例を作成しました
https://github.com/daimor/SimpleANTLR

4

1 に答える 1

1

入力ストリームがファイルの先頭から始まるストリームを表していない場合は、ストリームが実際に始まる行/列でレクサーを初期化する必要があります。

lexer.getInterpreter().setLine(actualLine);
lexer.getInterpreter().setCharPositionInLine(actualCharPositionInLine);

これを行わないと、レクサーは常に入力ストリームがファイルの先頭から始まると想定します。

于 2013-07-01T22:26:57.083 に答える