2017-02-04 20 views
2

C++ 소스 코드의 정보를 추출하려고합니다. 하나는 필드 유형입니다.CDT 파서를 사용하여 필드 형식을 얻는 방법

info.call()이 호출 될 때 아래의 소스 코드에서 정보 유형을 추출하려고 할 때.

Info info; 
//skip 
info.call(); //<- from here 

Trough가 IASTName 노드를 방문하는 방문자를 만드는 동안 아래 에서처럼 유형 정보를 추출하려고했습니다. 코드를 가정

public class CDTVisitor extends ASTVisitor { 

    public CDTVisitor(boolean visitNodes) { 
     super(true); 
    } 

    public int visit(IASTName node){ 
     if(node.resolveBinding().getName().toString().equals("info")) 
      System.out.println(((IField)node.getBinding()).getType()); 
      // this not work properly. 
      //result is "[email protected]" 

     return 3; 
    } 
} 

답변

0

자기 반응. 바인딩 개체를 가져올 수없는 이유는 AST 유형입니다.

C++ 소스 코드를 구문 분석하려고하면 ICPPASTTranslationUnit를 사용해야합니다. 관련 코드가 없으므로 IASTTranslationUnit을 AST의 리턴 유형으로 사용했습니다.

IASTTranslationUnit 대신 ICPPASTTranslationUnit을 사용한 후이 문제를 해결했습니다.

+0

쿨! ICPPASTTranslationUnit을 어떻게 사용 했습니까? Eclipse CDT를 사용하는 독립형 C++ 구문 분석에서 작업하고 있으며 바인딩을 해결해야합니다. 코드를 작성했지만 AST가 제대로 작동하지 않습니다. 코드를 공유 할 수 있다면 감사 할 것입니다. –

+0

@FelipeGomes 바인딩을 해결하려면 인덱서를 사용해야하지만 인덱서가 Eclipse Studio와 결합되어 있어야합니다. –

1

ProblemType에 해결하는 변수의 타입이 어떤 도구 나 플러그인의 구성 문제의 표시이다이 코드를 실행하거나 프로젝트/워크 스페이스의 코드를 포함하고, 실제로 유효한에 실행됩니다.

이 경우 변수 info의 유형은 Info이며, 이는 아마도 클래스 또는 구조체 유형 또는 typedef입니다. 올바르게 해결하려면 CDT가이 유형의 선언을 볼 수 있어야합니다.

이 유형이 분석중인 파일과 동일하지만 해당 파일에 포함 된 헤더 파일에서 선언되지 않은 경우 CDT는 프로젝트의 색인을 사용하여 선언을 찾습니다. 의미 :

  • AST는 인덱스 기반이어야합니다. 예를 들어 ITranslationUnit.getAST을 사용하여 AST를 작성하는 경우 IIndex 매개 변수를 사용하는 오버로드를 사용해야하며 null이 아닌 인수가 제공되어야합니다.

  • IIndex은 CDT 프로젝트와 연결되어 있으므로 분석중인 코드는 CDT 프로젝트의 일부 여야하며 프로젝트를 인덱싱해야합니다.

  • 인덱서가 #include 지시어를 올바르게 확인하려면 프로젝트의 포함 경로를 올바르게 구성해야합니다. 그러면 인덱서가 실제로 올바른 헤더 파일을 찾을 수 있습니다.

이러한 경우가 아니면 아무 것도 ProblemType으로 해결 될 수 있습니다.

+0

예! 색인에 값을 넣기 만하면됩니다. 나는 이것이 중요한 것이라고 생각한다. DOC가 있습니까? 또는 예제 색인을 사용하는 방법을 볼 수 있습니까? –

+0

@ Ui-GyunJeong : https://wiki.eclipse.org/images/c/c7/CDT_APIs_for_code_introspection.pdf가 도움이 될 수 있습니까? 일반적인 개념은 코드가 프로젝트에 있어야하며 프로젝트에서 인덱스를 가져 오는 것입니다. – HighCommander4

+0

@ Ui-GyunJeong : 유용한 배경 정보 일 수도 있습니다 : https://wiki.eclipse.org/CDT/designs/Overview_of_Parsing – HighCommander4