2013-05-02 2 views
24

Java 7 문법 사용 https://github.com/antlr/grammars-v4/blob/master/java7/Java7.g4 특정 이름의 메소드를 찾고 해당 메소드를 인쇄하고 싶습니다. 일치 할 때 methodDeclaration 규칙을 사용할 수 있습니다. 그래서 Java7BaseListener를 서브 클래스 화해,이 청취자 방법 오버라이드 (override) : 나는 원래 텍스트를 얻는 방법antlr4 규칙과 일치하는 원본 텍스트를 얻으려면 어떻게해야합니까?

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

를? ctx.getText()은 나에게 모든 공백이 제거 된 문자열을 제공합니다. 나는 코멘트와 원래 형식을 원한다.

답변

32

ANTLR의 CharStream 클래스에는 주어진 범위의 원본 소스를 반환하는 getText(Interval interval) 메서드가 있습니다. Context 개체에는 시작과 끝을 가져 오는 메서드가 있습니다. 당신이 CharStream 구문 분석되고있다 input라는 청취자의 필드를 가정하면,이 작업을 수행 할 수 있습니다

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

+0

CharStream 입력 = ctx.start.getInputStream(); input.getText (interval); 런타임 오류가 발생합니다 .checkBoundsOffCount (String.java:3101) –

+0

그리고 오류가 발생하지 않으면 공백이 제거됩니다. –

관련 문제