42

Java 7 文法を使用してhttps://github.com/antlr/grammars-v4/blob/master/java7/Java7.g4特定の名前のメソッドを見つけて、そのメソッドを出力したいだけです。methodDeclaration一致するとルールを使用できることがわかりました。そこでJava7BaseListener、このリスナー メソッドをサブクラス化してオーバーライドします。

@Override public void enterMethodDeclaration(Java7Parser.MethodDeclarationContext ctx) { }

元のテキストを取得するにはどうすればよいですか? ctx.getText()すべての空白が取り除かれた文字列が得られます。コメントと元のフォーマットが欲しいです。

4

3 に答える 3

55

ANTLR のCharStreamクラスには、指定getText(Interval interval)された範囲で元のソースを返すメソッドがあります。Contextオブジェクトには、開始と終了を取得するメソッドがあります。input解析される CharStream を持つ、呼び出されたリスナーにフィールドがあると仮定すると、これを行うことができます。

    int a = ctx.start.getStartIndex();
    int b = ctx.stop.getStopIndex();
    Interval interval = new Interval(a,b);
    input.getText(interval);
于 2013-05-02T16:37:07.357 に答える