2010-12-16 2 views
3

내 C++ 소스에 내 자신의 사용자 정의 어노테이션 (Java 스타일 어노테이션과 동일) 태그를 만들고 싶습니다. 표준 C++ 구문은 주석을 허용하지 않기 때문에 필자가 필요로하는 컴파일러를 수정/향상하고 싶습니다.C++ 소스에 어노테이션 구문 추가

하지만 Visual Studio는 사용자가 수정할 수 있도록 컴파일러 내부를 노출합니다 (예 : 렉서, 추상 구문 트리 등의 출력)? 그렇지 않다면 C++ 구문을 구문 분석하고 제 자신의 주석에 내 자신의 사용자 정의 된 C++ 소스 기반을 내보낼 수있는 타사 도구가 있습니까?

+0

가능한 복제본 : http://stackoverflow.com/questions/4689756/java-like-annotations-in-c –

답변

6

이 같은 문제에 대한 표준 용액은, 질문과 주석 언어의 어떤 부분 집합을 이해하는 사용자 지정 처리기를 작성하는 것입니다 주석을 제거한 코드를 다시 작성한 다음 실제 언어 컴파일러로 전달합니다.

확장 언어의 경우 표준 방법 : 컴파일러 앞에 사전 처리 단계 추가.

불행히도 은 구문 분석이 불가능합니다. 기능 완료 C++; C++ 소스 코드를 처리하는 것은 언어 기능을 분석하는 일이 지루해서 전체 AST 생성기를 만드는 것을 거의 끝내게됩니다.

이 선언에서 봐 :

template<bool b, class T> void foo(T &t){if(b) T.do_this(); else T.do_that();} 
class foobar { public: virtual void do_this(); virtual void do_that(); }; 
class barfoo : public foobar { public: virtual void do_this(); virtual void do_that(); }; 

및 브라켓 템플릿 및 템플릿 매개 변수에 대한을 비교 한 위해 이중 의미를 가지고 지금이 기능 여기

void bar(float l){ barfoo t; foo<fsqrt(l) > 1, foobar>(t); } 

문제입니다. 각 괄호가 속하는지를 결정하는 유일한 방법은 완전한 구문 트리가 필요합니다. 당신이 설명처럼 나는 단지 하나의 도구 알고

: Qt는 툴킷의 MOC, 당신이 제안하는 것을 수행 : C++ 코드 키워드 신호슬롯 주석. Qt는 공개 소스이므로 MOC의 소스를 조사하는 것이 좋습니다.

C++을 작성하고 읽는 것은 실제로 매우 어렵습니다.

9

Visual Studio에서 사용자가 수정할 수있는 컴파일러 내부 정보 (예 : 렉서, 추상 구문 트리 등)가 표시됩니까?

없음

C++ 구문을 구문 분석에 대한 제 3 자 도구가 있습니다 내 자신의 주석을 내 자신의 사용자 정의 C++ 소스 기반을 방출하는 날 수 있습니다? 이 C++가 아닌 프로그래밍 언어에 직면 않다면

Clang

관련 문제