2013-05-02 45 views
24

使用Java 7語法https://github.com/antlr/grammars-v4/blob/master/java7/Java7.g4我想查找具有特定名稱的方法,然後僅打印出該方法。我發現我可以在匹配時使用methodDeclaration規則。於是我繼承Java7BaseListener和覆蓋這個監聽方法:如何獲取antlr4規則匹配的原始文本?

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

如何獲取原文了? ctx.getText()給我一個所有空白字符串的字符串。我想要評論和原始格式。

回答

32

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); 
+13

如果您沒有訪問或不希望保留'CharStream'的軌道,使用'ctx.start.getInputStream()'來檢索它。 – Peter 2014-07-03 16:23:12

+0

CharStream input = ctx.start.getInputStream(); input.getText(interval); 給我運行時錯誤.checkBoundsOffCount(String.java:3101) – 2018-02-02 02:30:50

+0

而且它沒有失敗它仍然刪除空白 – 2018-02-02 02:32:52