Java 7文法 https://github.com/antlr/grammars-v4/blob/master/Java7/Java7.g4 を使用してメソッドを見つけたい特定の名前を付けて、そのメソッドを出力します。一致したときにmethodDeclaration
ルールを使用できることがわかります。そこで、_Java7BaseListener
_をサブクラス化し、このリスナーメソッドをオーバーライドします。
_@Override public void enterMethodDeclaration(Java7Parser.MethodDeclarationContext ctx) { }
_
元のテキストを取り出すにはどうすればよいですか? ctx.getText()
は、すべての空白を取り除いた文字列を表示します。コメントとオリジナルのフォーマットが欲しいです。
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);
デモ:
SqlBaseParser.QueryContext queryContext = context.query();
int a = queryContext.start.getStartIndex();
int b = queryContext.stop.getStopIndex();
Interval interval = new Interval(a,b);
String viewSql = context.start.getInputStream().getText(interval);