2013-05-08 16 views
5

Nesne-C sınıflarından kod istatistiklerini veya basit görselleştirmeler oluşturmaya çalışmak isterim. "A sınıfı B sınıfını uzatır" veya "C sınıfı B sınıfıdır" gibi anlamsal bilgi veren ve objeleri okuyabilen hangi araçlar kullanılabilir?Okuma için ayrıştırıcı Objective-C

  • Derleyici? (clang)
  • Hata ayıklayıcı? (lldb/gdb)
  • Regex?

Bu tür bir görev için her zamanki yaklaşımın ne olduğuna dair bir kılavuz aramak.

DÜZENLEME: Şu anda basit sınıf ilişkilerini çalışmaktan çok daha fazla çaba göstermeye çalışmadığımı açıkça belirtmeliyim.

cevap

9

bakmak I yöntemleri hangi sınıflar için tanımlanmıştır ne olduğunu bulmaya, Objective-C kaynağı ayrıştırmak için çınlama ön uç kütüphanesini kullanan bir sample project yazdı. Tarif ihtiyacına bu uyum basit olacaktır:

  • her beyanı bir geri almak. Objective-C sınıfları olduğu için CXIdxEntity_ObjCClass türüyle bildirilen kimliklere bakın. Bu beyannameye ilişkin sınıfa özgü bilgileri almak için, bildirimde bulunan clang_index_getObjCInterfaceDeclInfo() numaralı telefondan
  • numaralı telefonu arayın.
  • Bu yapının üyesi, süper sınıfın ne olduğunu size söyler!
+0

Kaynağınızı incelediniz, bu tam olarak ihtiyacım olan şey, teşekkürler. Libclang çevresinde pek çok insan tarafından okunabilir dersler olmadığına dair utanç verici bir durum var ama bu yardım etmek için çok yol alacak! – Sam

0

İyi şanslar, yapacak çok iş var ve bu kolay bir iş değildir Regexp çok sınırlı, ancak basit görevler için işe yarayabilir. Muhtemelen hızlı & kirli seçeneği. Clang iyi bir seçenek olabilir. Ayrıca CodeWorker

2

Sadece sınıf ilişkileri üzerinde çalışmanız gerekiyorsa, özel bir normal ifade tabanlı çözümleyicinin yapacağını düşünüyorum. Daha fazla bir şeye ihtiyacınız varsa, regex yaklaşımı kısa sürede başarısızlığa mahkum olur ve Clang'i dump the AST kullanmayı düşünmeniz gerekir, bu related question'a bakın.