2013-05-02 9 views
24

Mit der Java 7-Grammatik https://github.com/antlr/grammars-v4/blob/master/java7/Java7.g4 Ich möchte Methoden mit einem bestimmten Namen finden und dann nur diese Methode ausdrucken. Ich sehe, dass ich die methodDeclaration Regel verwenden kann, wenn ich zusammenpasse. So eine Unterklasse I Java7BaseListener und überschreiben diese Listener-Methode:Wie bekomme ich den Originaltext, der mit einer antlr4-Regel übereinstimmt?

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

Wie kann ich den ursprünglichen Text raus? ctx.getText() gibt mir eine Zeichenfolge mit all dem Leerraum entfernt. Ich möchte die Kommentare und Originalformatierung.

Antwort

32

ANTLRs CharStream Klasse hat eine Methode getText(Interval interval), die die ursprüngliche Quelle im Give-Bereich zurückgibt. Das Objekt Context verfügt über Methoden zum Abrufen von Anfang und Ende. Vorausgesetzt, dass Sie ein Feld in Ihrer Zuhörer namens input, die die CharStream analysiert hat wird, können Sie dies tun:

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

Wenn Sie keinen Zugang oder nicht wollen, um zu verfolgen, der 'CharStream', Verwenden Sie 'ctx.start.getInputStream()', um es abzurufen. – Peter

+0

CharStream input = ctx.start.getInputStream(); input.getText (Intervall); Gibt mir Laufzeitfehler .checkBoundsOffCount (String.java:3101) –

+0

Und wo es nicht fehlschlägt entfernt es noch Leerzeichen –