저는 C++ 소스 분석기 프로젝트에서 일하고 있습니다. clang이 구문 분석 작업을위한 의 좋은 후보 인 것으로 보입니다. 문제는 clang이 인프라 "llvm"프로젝트에 크게 의존한다는 것입니다. 구체적인 머신 지향 백엔드없이 깨끗한 프런트 엔드를 얻으려면 어떻게 구성해야합니까? LCC와 마찬가지로, 그들은 파서 파트에 집중하는 사람들을 위해 "null"백엔드를 제공합니다. 제안 사항에 감사드립니다.클린 프론트 프런트 엔드를 만드는 방법은 무엇입니까?
답변
최근에 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
}
감사합니다 arx! 나는 너의 접근 방식을 시도하고있어. –
네, 완벽하게 작동합니다. –
불행하게도, 당신이 얻을 수 없다 "순수한"프런트 엔드 :
은 무엇인가 등이 필요 연타 사용을 시작합니다. C/C++은 본질적으로 기계와 관련된 언어입니다. 전처리 기와 기본 제공 정의, 내장 유형의 크기 등을 생각해보십시오. 이들 중 일부는 추출 할 수 있지만 예를 들어 추출 할 수는 없습니다. 전처리 기.
- 1. wireshark는 웹 프론트 엔드를 지원합니까?
- 2. Java 백엔드와 JavaFX 2 프론트 엔드를 연결하는 방법은 무엇입니까?
- 3. 변경하는 동안 줌라의 프런트 엔드를 시청자에게 숨기는 방법은 무엇입니까?
- 4. 액세스 프런트 엔드 또는 C# 프런트 엔드를 작성해야합니까?
- 5. ELMAH의 프런트 엔드를 개발 한 사람이 있습니까?
- 6. 프런트 엔드를 통한 캐시 제어?
- 7. Asp.Net 프론트 엔드를 테스트하는 방법?
- 8. 빠르게 웹 페이지 프런트 엔드를 만듭니다.
- 9. GCC 프런트 엔드를 만드는 데 필요한 문서는 어디에서 제공됩니까?
- 10. 웹 앱 프런트 엔드를 효율적/반복적으로 프로토 타입 만드는 방법은 무엇인가요?
- 11. REST 웹 서비스를위한 SOAP 프론트 엔드를 만드는 방법
- 12. Joomla 2.5 최고 관리자가 프런트 엔드를 편집 할 수 없습니다.
- 13. LaTeX : 웹 프런트 엔드를 사용할 수 있습니까?
- 14. 웹 응용 프로그램의 관리자 프런트 엔드를 만드시겠습니까?
- 15. llvm에 대한 새로운 프론트 엔드를 작성할 때 블록을 시도/실행
- 16. 웹 사이트의 프런트 엔드를 만들기 위해 HTML로 코딩하는 PHP 코드
- 17. Visual Studio 2008을 사용하여 고전적인 ASP 프런트 엔드를 관리하는 가장 좋은 방법은 무엇입니까?
- 18. OpenLaszlo 프런트 엔드를 장고 백엔드와 통합 할 수 있습니까?
- 19. ms 액세스 프런트 엔드를 웹 기반 기술로 변환
- 20. Ruby Rails - 애니메이션 프런트 엔드를 쉽게 얻을 수 있습니까?
- 21. 동적이지만 서버 측 구동 프론트 엔드를 구축하기위한 JavaScript 프레임 워크
- 22. Selenium에서 프론트 엔드를 통해 사용자 로그인하기 Capybara Rspec 테스트
- 23. 프런트 엔드 용 MVC 아키텍처
- 24. 상용 규칙 엔진에서 Javascript 프런트 엔드를 수행 한 사람이 있습니까?
- 25. memcache에 관계형 데이터베이스 스타일의 프런트 엔드를 만든 적이 있습니까?
- 26. Android에서 보내기 및 보내기 프런트 엔드를 수행하는 방법
- 27. 웹 프론트 엔드를 서버 응용 프로그램에 효율적으로 연결할 수 있습니까?
- 28. 새로운 프론트 엔드를 빌드하는 Wordpress 라이브러리/SQL 쿼리?
- 29. 파이썬으로 CLI 프런트 엔드 : 실행중인 프로세스에 문자열을 전달하는 방법은 무엇입니까?
- 30. RESTful Grails 기반 백엔드에 대해 Wordpress 프론트 엔드를 인증하는 방법은 무엇입니까?
몇 가지 지원 라이브러리 (몇 가지 유틸리티 클래스와 OS 독립적 코드 제공) 외에 전체 LLVM이 필요하지 않습니다. Clang의 어느 라이브러리를 사용하고 있습니까? –
전체 실행 파일을 더미 백엔드와 함께 사용하겠습니다. –
'libclang'에 대해 알고 있습니까? Clang AST를 노출 할 수있는 C 라이브러리 (안정된 인터페이스가 보장됨)입니다. 훨씬 가볍습니다. 그렇지 않으면 단순히 C++ 라이브러리 (인터페이스가 * 안정적이지 않음을주의하십시오)를 사용할 수도 있습니다. 실행 파일은 실제로 유용하지 않을 물건을 포함합니다. –