2013-05-08 2 views
5

Objective-C 클래스의 코드 통계 또는 간단한 시각화 생성과 관련하여 놀고 싶습니다. obj-c를 읽고 "클래스 A는 클래스 B를 확장"또는 "C는 클래스 B의 속성"과 같은 의미 정보를 제공 할 수있는 도구는 무엇입니까?읽기 용 파서 Objective-C

  • 컴파일러? (clang)
  • 디버거? (lldb/gdb)
  • 정규식?

이러한 종류의 작업에 대한 일반적인 접근 방식에 대한 안내를 찾고 있습니다.

편집 : 나는 지금 단순한 계급 관계를 해결하는 것보다 더 많은 일을하려고하지 않는다는 것을 분명히해야합니다.

답변

9

에서 좀 걸릴 수 있습니다 나는 방법이 어떤 클래스에 정의 된 것을 찾는, 목표 - C 소스를 분석 할 수있는 그 소리 프론트 엔드 라이브러리를 사용하는 sample project을 썼다. 당신이 설명의 필요성이 적응 간단 할 것이다 :

  • 당신이 모든 선언에 콜백을 얻는다. CXIdxEntity_ObjCClass 종류로 선언 된 ID는 Objective-C 클래스이므로 찾으십시오.
  • 이 선언에 대한 클래스 별 정보를 얻기 위해 선언에 clang_index_getObjCInterfaceDeclInfo()을 호출하십시오.
  • 이 구조체의 구성원 인 .superinfo은 수퍼 클래스가 무엇인지 알려줍니다.
+0

출처를 살펴 보았는데, 이것이 내가 필요한 것입니다. 감사합니다. libclang을 둘러싼 사람이 읽을 수있는 자습서가별로 없지만 도움이 될 수는 있습니다. – Sam

0

행운을 빈다. 할 일이 많다. 쉬운 일이 아니다. 정규 표현식은 매우 제한적이지만 간단한 작업에는 사용할 수있다. 아마도 더러운 옵션 인 & 일 것입니다. Clang이 좋은 옵션 일 수 있습니다. 또한 CodeWorker

2

클래스 관계를 해결하기 만하면 커스텀 정규식 기반 파서가 할 것이라고 생각합니다. 더 많은 것을 필요로한다면 정규 표현식 접근법은 곧 실패 할 것입니다. Clang을 dump the AST으로 사용하는 것을 고려해야합니다 (related question 참조).