2013-05-02 5 views
24

Używanie Java 7 gramatyki https://github.com/antlr/grammars-v4/blob/master/java7/Java7.g4 Chcę znaleźć metody o określonej nazwie, a następnie wydrukować tę metodę. Widzę, że mogę korzystać z reguły methodDeclaration, gdy pasuję. Więc podklasy Java7BaseListener i zastąpić tę metodę słuchacza:Jak uzyskać oryginalny tekst zgodny z regułą antlr4?

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

Jak mogę dostać oryginalny tekst na zewnątrz? ctx.getText() daje mi ciąg znaków z usuniętymi białymi znakami. Chcę komentarze i oryginalne formatowanie.

Odpowiedz

32

Klasa ANTLR CharStream ma metodę getText(Interval interval), która zwróci oryginalne źródło w zakresie dawania. Obiekt Context ma metody pozwalające uzyskać początek i koniec. Zakładając, że masz pole w swoim słuchacza nazwie input który ma CharStream przetwarzane, można to zrobić:

int a = ctx.start.getStartIndex(); 
    int b = ctx.stop.getStopIndex(); 
    Interval interval = new Interval(a,b); 
    input.getText(interval); 
+13

Jeśli nie masz dostępu do lub nie chcą śledzić 'CharStream', użyj 'ctx.start.getInputStream()', aby go odzyskać. – Peter

+0

CharStream input = ctx.start.getInputStream(); input.getText (interval); Daje mi błędy runtime .checkBoundsOffCount (String.java:3101) –

+0

A tam, gdzie się nie zawiedzie, nadal usuwa białe znaki –