2016-06-05 9 views
3

나는 논문을 쓰고 있으며 소스 코드를 구문 분석하고 개별 기능으로 토큰 화해야한다. 모든 함수에 대해 함수 이름과 형식 캐스트라고하는 형식의 이름을 추출하고 싶습니다. 그런 종류의 직업에 딱 맞는 도구입니까? 그렇다면 어떻게해야합니까?Clang을 전처리기로 사용하는 방법

다음은 간단한 C 함수입니다. 굵은 글씨로 원하는 항목을 추출했습니다.

 
static char func1(unsigned int a, struct foo *b) 
{ 
    int c = 0; 
    struct bar *d; 

    if (a == 0) { 
     d = func2((int) a); 
    } else { 
     c = func3((struct bar *) b); 
    } 

    return c; 
} 

답변

5

예, Clang이이 작업을 수행하는 데 적합한 도구입니다.

너는 libclang을 봐야한다.

당신은 인터넷에 충분한 정보를 찾을 수 있습니다,하지만 난 개인적으로 두 위대한 기사를 추천 할 수 있습니다 : 당신이 비디오를 시청하려는 경우 나에게 다음, 마이크 애쉬

에 의해 엘리 Bendersky

Introduction to libclang에 의해

Parsing C++ in Python with Clang을 여기 libclang에서 프레젠테이션을 볼 것을 권장 할 수 있습니다. 2010 LLVM Developers' Meeting을 찾으십시오. libclang: Thinking Beyond the Compiler

+0

주셔서 감사합니다. 내 자신의 독서를 한 후에 나는 clang의 문서를 보러왔다. 컴파일의 다른 단계에 clang을 사용할 수 있다고 말합니다. 내가 맞다면 나는 전처리 단계와 파싱 및 의미 분석 단계에 관심이있다. 이러한 단계는 -fsyntax-only 플래그를 사용하여 호출 할 수 있습니다. 그러나이 플래그를 사용하여 clang은 AST 파일을 문서에서 말한 것처럼 반환하지 않습니다. 어떤 아이디어? 예를 들어 llvm에서 일부 도구가 누락 되었습니까? 왜 AST를 생성하지 않는 것입니까? –

+0

필자는'-fsyntax-only'의 목적에 관해서는 확실히 말할 수 없지만, 의미 분석이 끝난 후에 진행할 필요가 없을 때, 좀 더 쉬운 디버깅과 정적 분석을위한 것이라고 생각합니다. 'libclang'은 필요한 모든 것을 다루고 있으며, 기본적으로 코드 생성까지 모든 것을 처리합니다. 사전 처리 (#include, C 매크로), 렉싱, 구문 분석 및 의미 분석을 포함합니다. – AlexDenisov

+0

게시 한 기사를 읽은 후 아이디어를 얻었습니다. 나는 clang이 컴파일러임을 이해할 수있을뿐만 아니라 모든 개별 구성 요소를 제공하여 자신의 라이브러리와 함수를 사용하는 것처럼 구성 할 수있는 자체 선처리 도구를 만들 수 있습니까? 이것이 내 프로젝트의 범위를 벗어 났기 때문에 사용할 준비가되어있는 것이 있습니까? –