[.net] VC ++ 코드 DOM은 VS 애드온에서 액세스 할 수 있습니까?
VC ++ 용 Visual Studio IntelliSense에는 “완전한” EDG C ++ 파서 (Intel 및 기타 업체에서도 사용됨)가 포함되어 있습니다. 애드온에서 C # 코드 DOM에 액세스 할 수 있으므로 (내가 틀렸다면 수정) C ++ 코드 DOM도 액세스 할 수 있습니까? VS 환경에서 개방형 VC ++ 프로젝트를 분석하는 데 사용할 수 있습니까?
답변
비주얼 C ++ 리팩토링의 확장은 프로젝트 전체 멤버의 이름을 변경 할 수 있습니다. MS에 의해 구축되었지만 분명히 내부 코드 DOM을 사용하여이를 달성했습니다. 그래서 가능합니다. 나는 아직 방법을 모릅니다.
CppLister의 확장은 클래스 내에서 다양한 구성원을 나열 VS에 의해 생성 된 인텔리 데이터베이스를 읽을 수있다.
언제든지 오픈 소스 Clang C ++ 파서 (실제로 컴파일러)를 사용하고 AST를 C # 개체 모델로 읽을 수 있습니다. Clang에 대한 C # 바인딩 은 CppSharp 및 ClangSharp 를 참조하세요 .
답변
“C ++ 코드 DOM”이 존재하는지 확실하지 않습니다. 중요한 것은 MSVS가 MSVS IDE 작업을 지원하기 위해 EDG 프런트 엔드를 사용하여 심볼의 의미를 구문 분석하고 결정한다는 것입니다. EDG IIRC는 프로그램을 나타내는 자체 내부 데이터 구조를 구축합니다. 나는 이러한 데이터 구조가 “C ++ 코드 DOM”이라고 믿을 이유가 없거나, 사용자에게 표시되거나 MSDN에서 확인할 수있을 것이라고 믿을 이유가 없습니다.
실제 문제는 C ++ 소스 코드를 분석하려는 것입니다. 나는 EDG 프런트 엔드 정보를 갖는 것이 그렇게하는 데 큰 도움이 될 것이라는 데 동의합니다. 당신은 정말 정말 자신의 C ++ 파서를 작성하려고 시도하고 싶지 않아요 (당신은 “구문 분석 후 삶”내 에세이 구글, 구문 분석 과거의 물건을 많이 필요).
따라서 다음과 같은 선택 사항이 있습니다.
- MSVS에서 EDG 기계의 문을 찾으십시오. 운이 좋지 않았고 MS에서 이것이 가능하다는 문서가없는 것처럼 보이므로이 방법으로 운이 좋지 않을 것입니다. 내가 MS의 입장 이었다면 공개하지 않을 것입니다. 그것은 또 다른 지원 골칫거리이며 그들의 것이 아닌 소프트웨어에 대한 것입니다.
- 에서 직접, 상업 EDG 프런트 엔드를 사용 EDG . 내 이해는 개별 사용 라이센스를 무료로 제공한다는 것입니다. (내 이해가 잘못되었을 수 있습니다). 이렇게하면 MS가 액세스에 대해 가질 수있는 제한을 건너 뛸 수 있습니다. EDG 프런트 엔드를 직접 구성해야하는 대가로. 단점 : EDG는 분석기의 프런트 엔드가 아니라 컴파일러의 프런트 엔드가되기를 원합니다. 그 구별은 미묘 해 보일지 모르지만 아마도 당신을 물릴 것입니다. 예를 들어, 나는 EDG가 댓글을 버릴 것이라고 생각합니다. 컴파일러 프런트 엔드에는 필요하지 않습니다. 분석기의 주석을 검사하려는 경우 이것은 실제 문제가 될 수 있습니다.
- Clang을 사용하십시오 . 이것은 다양한 프로그램 분석 목적과 C ++ 컴파일러의 프런트 엔드에 사용하도록 설계된 오픈 소스 C ++ 파서입니다. 나는 이것에 대한 경험이 없지만 꽤 잘 생각하고 많은 시설을 제공하는 것처럼 보입니다. C ++의 MS 방언에 대한 특정 지원이 있는지 모르겠습니다.
- 다른 상용 프런트 엔드 인 (DMS) C ++ 프런트 엔드 사용. 이것의 설계자이기 때문에 나는 그것이 잘 생각되어 있다고 확신합니다 (MS Visual C ++에 대한 지원 포함); 복잡한 C ++ 분석 및 변환 작업을 수행하기 위해 이것을 사용한 특별한 경험이 있습니다. EDG와 달리 분석, 변환 및 생성을 지원하도록 설계되었습니다 (예 : 주석과 리터럴의 기수까지 캡처하여 올바르게 재생성 될 수 있음). 기반 인 DMS에는 AST 및 기호 테이블 구성, 속성 문법, 데이터 흐름 프레임 워크, 절차 내 제어 및 AST 수준의 데이터 흐름 분석, BDD 관리, 소스 패턴 일치, 소스 대 -소스 변환. Clang 및 EDG는 AST 및 기호 테이블 구성을 제공합니다. Clang (하지만 EDG는 생각하지 않습니다)에는 흐름 분석이 있습니다 (LLVM 수준에서), 그러나 AST 수준 (AFAIK)에서의 흐름 분석은 아닙니다. Clang과 EDG 모두 소스 패턴 / 변환 기능을 제공하지 않으므로 장기 작업에 따라 더 나은 방법이 있습니다. 다른 옵션에 비해 C ++ 프런트 엔드는 오픈 소스 나 무료가 아닙니다. 연구 면허를 얻을 수 있습니다.