VC ++ 코드 DOM은 VS 애드온에서 액세스 할 수 있습니까?


100

VC ++ 용 Visual Studio IntelliSense에는 "완전한" EDG C ++ 파서 (Intel 및 기타 업체에서도 사용됨)가 포함되어 있습니다. 애드온에서 C # 코드 DOM에 액세스 할 수 있으므로 (내가 틀렸다면 수정) C ++ 코드 DOM도 액세스 할 수 있습니까? VS 환경에서 개방형 VC ++ 프로젝트를 분석하는 데 사용할 수 있습니까?


25
다른 스레드 에서 온 것입니다 . 이것은 좋은 질문입니다.
Qix-MONICA는

81
다시 말하지만, "무슨 말인지 확실하지 않습니까?" - 정말 여러분? "나는이 질문의 전제에 대해 아무것도 모른다"는 것은 "당신이 묻는 것이 무엇인지 불분명하다"는 의미가 아닙니다.
Tim Post

9
@Dave-MS 직원이 아닌 사람도이 문제를 해결할 수 있음을 증명하기 위해 답변을 추가했습니다. 내가 원하는 것에 가깝게 일을 한 사람들이 있습니다.
TheFlash apr

55
@DaveHillier 주제에 관한 것이라면 여기에서 완벽하게 환영합니다. 그 이상의 논의는 없습니다. "여기 누구라도 대답 할 수 있습니까?"에 들어가면 그런 다음 우리 는 어려운 일 이 잠재적으로 답할 수없는 이런 종류의 끈적한 불안에 빠르게 접근합니다 . 우리가 실제로 질문에 답 하지 않는 한 솔직히 누가 답할 수 있는지에 대한 구체적인 아이디어가 없습니다 . 그것이 애초에 요청하는 요점입니다.
Tim Post

49
@bmargulies 이 질문이 단순히 존재함으로써 어떤 해를 끼치나요? 주제와 관련이 있고 흥미롭고 누군가 대답 수 있습니다. MS의 누군가 이것을보고 대답 할 수 있습니다. 그러면 사이트에 큰 도움이됩니다. 긍정적 인 것을보기 전에 질문에 대해 잠재적으로 부정적인 것을 찾는 것을 중단하십시오.
Tim Post

답변:


22

비주얼 C ++ 리팩토링의 확장은 프로젝트 전체 멤버의 이름을 변경 할 수 있습니다. MS에 의해 구축되었지만 분명히 내부 코드 DOM을 사용하여이를 달성했습니다. 그래서 가능합니다. 나는 아직 방법을 모릅니다.

CppLister의 확장은 클래스 내에서 다양한 구성원을 나열 VS에 의해 생성 된 인텔리 데이터베이스를 읽을 수있다.

언제든지 오픈 소스 Clang C ++ 파서 (실제로 컴파일러)를 사용하고 AST를 C # 개체 모델로 읽을 수 있습니다. Clang에 대한 C # 바인딩 은 CppSharpClangSharp 를 참조하세요 .


8

"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 ++ 프런트 엔드는 오픈 소스 나 무료가 아닙니다. 연구 면허를 얻을 수 있습니다.

2
"DOM"은 기본적으로 AST에 대한 HTML 언어입니다. 하지만 표준 구문이 있다고 가정하지만 C ++ 컴파일러는 일반적으로 약간 다른 구문을 사용합니다. (예 : 더 나은 오류 메시지 생성).
MSalters

3
C #의 DOM은 코드 생성에 사용되는 "해상도가 나쁜 AST"를 의미합니다. C # dom이 제공하는 종류의 해상도로는 C ++ 프로그램을 현실적으로 분석 할 수 없습니다.
Ira Baxter

좋은 C # 코드 덤이 제공하는 것에 대해서는 inevitablesoftware.com/Products.aspx 를 참조하십시오
TheFlash

@Geotarget : 그리고 C # Dom은 질문과 관련이 있습니까?
Ira Baxter

@IraBaxter-내가 "코드 DOM"이라고 말할 때 찾고있는 것-많은 사람들이 코드 DOM이 무엇인지 이해하지 못하거나 JS HTML DOM과 혼동한다고 언급했습니다. 물론 저는 C ++ 전문가가 아니기 때문에 C ++ 코드 DOM에 무엇이 필요할지 모르겠지만 Inevitablesoftware가 매우 간단하고 사용하기 쉬운 코드 DOM을 제공한다는 것을 알고 있습니다. 유사한 API를 사용하는 C ++ 코드 DOM을 찾고 있습니다.
TheFlash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.