パーサールールa
が、これは動作しますが、そのルートとして本当トークンが含まれている場合:しかし
parse
: ^(PLUS a b) {System.out.println("line=" + $a.start.getLine());}
;
、a
はそのルートと虚数トークンがある場合:その後、
grammar T;
tokens {
IMAG;
}
a : SomeToken -> ^(IMAG SomeToken)
;
をトークンIMAG
には(明らかに)それに関連付けられた行番号はありません(実際は入力には実際にはありません)。このような場合は、手動でトークンを作成し、そのトークンに行番号を設定してASTのルートに挿入する必要があります。それは次のようになります。
grammar T;
tokens {
IMAG;
}
@parser::members {
private CommonToken token(String text, int type, int line) {
CommonToken t = new CommonToken(type, text);
t.setLine(line);
return t;
}
}
a : SomeToken -> ^({token("imag", IMAG, $SomeToken.getLine())} SomeToken)
;
そのように、ルートIMAG
はSomeToken
と同じ行番号を取得します。
ありがとうございます。私が見つけたチュートリアルのどれも、クラス参照を読むことは、学ぶときに厳しい命題ではありません。 – Baczek
@Baczekようこそ。 –