2011-11-09 3 views
21

저는 C++ 소스 분석기 프로젝트에서 일하고 있습니다. clang이 구문 분석 작업을위한 의 좋은 후보 인 것으로 보입니다. 문제는 clang이 인프라 "llvm"프로젝트에 크게 의존한다는 것입니다. 구체적인 머신 지향 백엔드없이 깨끗한 프런트 엔드를 얻으려면 어떻게 구성해야합니까? LCC와 마찬가지로, 그들은 파서 파트에 집중하는 사람들을 위해 "null"백엔드를 제공합니다. 제안 사항에 감사드립니다.클린 프론트 프런트 엔드를 만드는 방법은 무엇입니까?

+1

몇 가지 지원 라이브러리 (몇 가지 유틸리티 클래스와 OS 독립적 코드 제공) 외에 전체 LLVM이 필요하지 않습니다. Clang의 어느 라이브러리를 사용하고 있습니까? –

+0

전체 실행 파일을 더미 백엔드와 함께 사용하겠습니다. –

+12

'libclang'에 대해 알고 있습니까? Clang AST를 노출 할 수있는 C 라이브러리 (안정된 인터페이스가 보장됨)입니다. 훨씬 가볍습니다. 그렇지 않으면 단순히 C++ 라이브러리 (인터페이스가 * 안정적이지 않음을주의하십시오)를 사용할 수도 있습니다. 실행 파일은 실제로 유용하지 않을 물건을 포함합니다. –

답변

8

최근에 Windows에서이 작업을 수행했습니다.

here에서 clang 및 llvm 소스를 다운로드하십시오.

cmake와 Python을 설치하십시오 (문서와는 달리, clang을 빌드하기 위해 Python이 필요합니다. 적어도 cmake는 Python 런타임을 찾을 수 없다면 포기합니다).

또한 VS2008 또는 VS2010이 필요합니다. 완전히 명확하지의

한 가지 필요한 디렉토리 구조입니다 :

projectRoot 
    build <- intermediate build files and DLLs, etc. will go here 
    llvm <- contents of llvm-3.0.src from llvm-3.0.tar go here 
     tools 
      clang <- contents of clang-3.0.src from clang-3.0.tar go here 

그리고 이후 4 단계에서 windows build instructions을 따릅니다. cmake GUI를 사용하지 마십시오. 공포입니다. 빌드 지시에있는 명령을 사용하십시오. 당신은 할 수 있습니다 (잠시 소요)

빌드가 완료되면

:

projectRoot 
    build 
     bin 
      Release <- libclang.dll will be here 
     lib 
      Release <- libclang.lib will be here 
    llvm 
     tools 
      clang 
       include 
        clang-c <- Index.h is here 

Index.h는 소스 코드에 대한 정보에 액세스하는 API를 정의한다; 여기에는 API에 대한 많은 문서가 포함되어 있습니다. 컴퓨터 별 상세 정보없이

CXIndex index = clang_createIndex(1, 1); 

// Support Microsoft extensions 
char *args[] = {"-fms-extensions"}; 

CXTranslationUnit tu = clang_parseTranslationUnit(index, "mySource.c", args, ARRAY_SIZE(args), 0, 0, 0); 

if (tu) 
{ 
    CXCursor cursor = clang_getTranslationUnitCursor(tu); 

    // Use the cursor functions to navigate through the AST 
} 
+0

감사합니다 arx! 나는 너의 접근 방식을 시도하고있어. –

+0

네, 완벽하게 작동합니다. –

1

불행하게도, 당신이 얻을 수 없다 "순수한"프런트 엔드 :

은 무엇인가 등이 필요 연타 사용을 시작합니다. C/C++은 본질적으로 기계와 관련된 언어입니다. 전처리 기와 기본 제공 정의, 내장 유형의 크기 등을 생각해보십시오. 이들 중 일부는 추출 할 수 있지만 예를 들어 추출 할 수는 없습니다. 전처리 기.

관련 문제