2010-02-11 4 views
1

나는 this item in the Google C++ style guide 아래의 설명을 읽고 나에게 생각이 떠올랐다. 거기에 VS의 "모든 참조 찾기"도구처럼 작동하지만 내장 된 작전과 같은 도구가 있습니까? 예를 들어, 네이티브 "+"연산자가 포인터 (또는 객체에 대한 포인터 일뿐입니다)와 정수 또는 서명 된 유형과 부호없는 유형이 추가 된 모든 장소를 찾고 싶습니다.ops에 내장 된 것을 "참조 할 수있는"도구가 있습니까?

답변

0

필자는 그러한 도구를 인식하지 못했지만 파서/렉서에 액세스 할 수 있다면 원칙적으로 이러한 도구를 만들 수 있습니다. 필자는 Visual Studio와 사용자 자신의 플러그인을 작성하는 데 필요한 액세스에 대해 많이 알지 못합니다. 그것은 일식이나 넷빈으로 가능해야합니다. emacs 사용자라면 cedet을 살펴보십시오. 나는 현재 그것으로 주위를 어지럽히고 있으며, 의미 론적 데이터베이스를 사용하여 그러한 도구를 구현하는 것은 그리 어렵지 않다.

+1

내 자신을 빌드하려면 대부분의 컴파일러 프론트 엔드가 필요하므로 시맨틱 패스 (템플릿 내부에서 케이스를 찾는 것에 대해 생각해보십시오) 이후에 액세스해야합니다. (+1) – BCS

2

ops가 "내장"되어 있는지 확인하려면 C++을 구문 분석하고 각 하위 표현식에 대해 피연산자 유형을 결정할 수 있어야합니다. 내장형 연산은 피연산자가 char, int, long, float, double, pointer 등의 스칼라 인 경우에 선택됩니다. (내장되지 않은 함수는 사용 된 함수 이름 및 연산자 구두점입니다. 다양한 클래스 정의에서 이러한 연산자를 재정의).

구문 분석 C++은 대부분의 사람들이 표준으로 사용하기 매우 어렵습니다. "그냥"파서/렉서가 곧 또는 쉽게 당신을 여기에 데려다주지는 않을 것입니다. 정말 힘든 일은 이름의 의미를 해석하고 이름의 유형을 결정한 다음 다양한 하위 표현식이 무엇을 의미하는지 결정하는 것입니다. 왜냐하면 C + + 표준의 수백 페이지를 인코딩해야하기 때문입니다. 당신이 정말로 원하는 것은 당신의 의지에 맞게 구부릴 수있는 미리 만들어진 C++ 프론트 엔드입니다.

GNU와 MSVC는 완전한 C++ 프론트 엔드를 가지고 있지만, 은 실제로이 컴파일러가되기를 원하며 쉽게 도움을 줄 수는 없습니다.

DMS Software Reengineering Toolkit은이 작업에 이상적입니다. 커스텀 분석 툴의 구축을 지원하도록 설계되었으며, C, Java, C#, COBOL ... 그리고 마지막으로 C++를 포함한 많은 표준 언어를위한 완벽한 언어 프론트 엔드를 가지고 있습니다.

DMS는 컴파일러와 마찬가지로 소스 데이터를 구문 분석하고 컴파일러 데이터 구조 (트리, 기호 테이블 등)를 빌드하고 이러한 데이터 구조에 대한 쿼리를 작성할 수 있도록 절차 적 API를 통해 대부분 사용할 수 있도록합니다.

이러한 쿼리 중 하나는 "이 트리에 대해 어떤 유형입니까?"입니다. 이를 사용하면 integer-add와 같은 "표준"연산자가 있는지를 쉽게 판단 할 수 있습니다.

편집 : (이상하게도이 답변을 작성한 후 며칠 만에 C++ 프로그램의 모든 비 내장 연산자를 식별 할 수있는 작은 계약서가 생겼습니다!).

+0

알만한 좋은 도구라고 생각합니다. – BCS

관련 문제