2013-05-02 31 views
24

Sử dụng ngữ pháp Java 7 https://github.com/antlr/grammars-v4/blob/master/java7/Java7.g4 Tôi muốn tìm các phương thức có tên cụ thể và sau đó chỉ cần in ra phương thức đó. Tôi thấy rằng tôi có thể sử dụng quy tắc methodDeclaration khi tôi khớp. Vì vậy, tôi phân lớp Java7BaseListener và ghi đè phương pháp nghe này:Làm cách nào để nhận được văn bản gốc mà quy tắc antlr4 khớp với?

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

Làm cách nào để lấy văn bản gốc? ctx.getText() cho tôi một chuỗi với tất cả khoảng trắng bị tước đi. Tôi muốn nhận xét và định dạng gốc.

Trả lời

32

ANTLR CharStream lớp học có phương thức getText(Interval interval) sẽ trả về nguồn ban đầu trong phạm vi cung cấp. Đối tượng Context có các phương thức để bắt đầu và kết thúc. Giả sử bạn có một trường trong người nghe của bạn được gọi input trong đó có các CharStream đang được phân tích, bạn có thể làm điều này:

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

Nếu bạn không có quyền truy cập vào hoặc không muốn theo dõi của 'CharStream', sử dụng 'ctx.start.getInputStream()' để lấy nó. – Peter

+0

Đầu vào CharStream = ctx.start.getInputStream(); input.getText (interval); Cung cấp cho tôi các lỗi thời gian chạy .checkBoundsOffCount (String.java:3101) –

+0

Và khi nó không thất bại nó vẫn loại bỏ khoảng trắng –