2013-05-08 40 views
5

Tôi muốn phát xung quanh với các thống kê mã tạo hoặc các hình ảnh đơn giản từ các lớp Objective-C. Những công cụ nào có sẵn có thể đọc obj-c và cung cấp thông tin ngữ nghĩa như "lớp A mở rộng lớp B" hoặc "C là thuộc tính của lớp B"?Trình phân tích cú pháp để đọc Mục tiêu-C

  • Trình biên dịch? (clang)
  • Trình gỡ lỗi? (lldb/gdb)
  • Regex?

Chỉ cần tìm hướng dẫn về cách tiếp cận thông thường cho loại công việc này là gì.

CHỈNH SỬA: Tôi phải nói rõ ràng rằng tôi không cố gắng làm nhiều hơn là tìm ra các mối quan hệ lớp đơn giản vào lúc này.

Trả lời

9

Tôi đã viết sample project sử dụng thư viện mặt trước kêu vang để phân tích cú pháp nguồn C, tìm ra phương pháp nào được xác định cho lớp nào. Nó sẽ là đơn giản để thích ứng này với nhu cầu bạn mô tả:

  • bạn nhận được một cuộc gọi lại trên mỗi khai. Tìm kiếm danh tính được khai báo với loại CXIdxEntity_ObjCClass, vì đây là các lớp Objective-C.
  • gọi clang_index_getObjCInterfaceDeclInfo() trên tờ khai để nhận thông tin cụ thể về lớp học về tuyên bố này.
  • thành viên .superinfo của cấu trúc này cho bạn biết siêu lớp là gì!
+0

Bạn đã xem qua nguồn của mình, đây chính là điều tôi cần, cảm ơn. Đó là một sự xấu hổ không có nhiều hướng dẫn con người có thể đọc được xung quanh libclang nhưng điều này sẽ đi một chặng đường dài hướng tới giúp đỡ! – Sam

0

Chúc may mắn với điều đó, có rất nhiều việc phải làm, và đây không phải là một nhiệm vụ dễ dàng Regexp rất hạn chế, nhưng có thể hoạt động cho các tác vụ đơn giản. Có thể là tùy chọn bẩn & nhanh chóng. Clang có thể là một lựa chọn tốt. Bạn cũng có thể xem CodeWorker

2

Nếu bạn chỉ cần tìm ra mối quan hệ lớp học, tôi nghĩ rằng trình phân tích cú pháp dựa trên regex tùy chỉnh sẽ thực hiện. Nếu bạn cần thêm thứ gì đó, phương pháp tiếp cận regex sẽ sớm bị thất bại và bạn nên cân nhắc sử dụng Clang để dump the AST, xem điều này related question.

Các vấn đề liên quan