2013-08-12 6 views
0

AST에서 명령어의 행 번호를 찾는 방법.ANTLR3 : AST의 명령어를 Java 소스 파일의 행 번호에 매핑하는 방법

예 : 다음 코드

24

> foo에 보이드() {

25>에서 System.out.println ("안녕하세요");

26>}

인쇄 문에 해당하는 AST 내가 생성 된 트리에서 "시스템"의 줄 번호를 검색 할

  METHOD_CALL 
       . 
       . 
        System 
        out 
       println 
       ARGUMENT_LIST 
       EXPR 
        " hi " 

입니다. "시스템"에 대한 대답은 25 (소스 코드의 줄 번호) 여야합니다.

답변

1

System 토큰 Tree 사실 CommonTree에 당신의, 당신은 SymbolToken를 얻기 위해 CommonTree.getToken() 방법을 사용 할 수 있습니다. 그런 다음 Token.getLine()으로 전화하여 회선 번호를 얻을 수 있습니다. "클래스 HelloWorld로 {\ n \ n 공공 정적 무효 메인 (문자열 인수 []) {\ n \ n \t에서 System.out.println ("안녕하세요 세계 "

+0

안녕하세요 저는 다음과 같은 입력을 위해 그것을 시도); \ n \ n } \ n \ n } "여기서"\ n "은 줄 바꾸기를 나타냅니다. 내가 Token.getLine()을 말할 때 출력은 1이고, 다른 모든 명령어에 대해서도 같다. 내가 뭐 잘못하고 있니? – sri91

+0

나는 문제를 알아 냈다. 나는 ANTLRFileStream 대신 ANTLRStringStream을 사용했다. 고맙습니다. – sri91