2013-07-11 9 views
6

मुझे कुछ उद्देश्य-सी शीर्षकों की पार्सिंग करने की आवश्यकता है।उद्देश्य-सी हेडर पार्सिंग

  • मैं Doxygen का उपयोग करने और XML आउटपुट पार्स करने की कोशिश की है, लेकिन यह पूरी तरह से टिप्पणियों के बिना उद्देश्य सी हेडर का समर्थन नहीं करता है (यह गुण में परिभाषित मैक्रो पर chokes, जाँच Doxygen not properly recognizing properties)
  • मैं भी कोशिश की है appledoc का उपयोग कर, लेकिन एक्सएमएल आउटपुट पर्याप्त नहीं है (उदाहरण के लिए, कक्षाओं के लिए विरासत की कोई जानकारी नहीं है) और गुणों पर मैक्रोज़ के साथ यह वही समस्या है।
  • मैं भी पुस्तकालय उद्देश्य सी मेटाडाटा (otool का प्रयोग करके) के उत्पादन को पार्स की कोशिश की है, लेकिन देखा है कि मेटाडाटा तरीकों पर प्रकार (ताकि आप method:(id)param:(id) प्राप्त)

किसी को भी पता है नहीं रखता मुझे क्या करना है एक अच्छा उपकरण? मुझे संदेह है कि clang मेरी मदद करेगा, लेकिन अब तक -ast-dump और इसी तरह के विकल्प सिर्फ एक स्रोत के लिए एएसटी उत्पन्न करने का प्रयास करते हैं जो मेरे पास नहीं है (केवल हेडर)।

उत्तर

15

आप libclang का उपयोग करने में सक्षम हो सकते हैं। libclang एक प्रोग्रामेटिक इंटरफ़ेस है जो सिंटैक्स हाइलाइटिंग और कोड पूर्ण करने जैसे टूल को लागू करने के लिए डिज़ाइन किया गया है।

clang -ast-dump मेरे लिए काम करता है। (ध्यान दें कि -ast-dump चालक द्वारा समर्थित नहीं है, तो आप कुछ अतिरिक्त काम करने के लिए झंडे कि चालक आमतौर पर संभालती है। आप को देखने के लिए वास्तव में क्या कर रहा है चालक clang -### ... उपयोग कर सकते हैं पारित करने के लिए है।)

% clang -cc1 -ast-dump -fblocks -x objective-c /System/Library/Frameworks/Foundation.framework/Headers/Foundation.h 
[...] 
|-ObjCInterfaceDecl 0x1023727c0 <line:50:1, line:96:2> NSObject 
| |-ObjCProtocol 0x102371350 'NSObject' 
[...] 
+1

यह था। मुझे नहीं पता कि यह पहले क्यों काम नहीं कर रहा था, लेकिन मुझे अब यह काम मिल गया।अब मेरी एक समस्या यह है कि कुछ आयात काम नहीं करते हैं ('#import 'जैसी चीजें, लेकिन जैसा कि आपने कहा था, मुझे ड्राइवर को पैरामीटर पास करना होगा) –

-4

मुझे लगता है कि क्लैंग ध्वनि का उपयोग करना बहुत कठिन है। मैं सिर्फ RegEx का उपयोग करता हूँ।

इसके बजाय मैं डॉक्सिजन के चारों ओर एक साधारण शैल स्क्रिप्ट रैपर लिखूंगा जो समस्याग्रस्त वाक्यविन्यास को टिप्पणी करता है।

यह बहुत बदलने के लिए आसान होना चाहिए:

@property(nonatomic, retain) BOOL myProperty NS_AVAILABLE_IOS(3_2); 

करने के लिए:

@property(nonatomic, retain) BOOL myProperty /*NS_AVAILABLE_IOS(3_2)*/; 

तुम भी एक @deprecated टिप्पणी करने के लिए NS_DEPRECATED() तरह बातें परिवर्तित कर सकते हैं।

+2

नहीं , नियमित अभिव्यक्ति इस उत्तर में उद्धृत सभी कारणों के लिए सहायता नहीं करेंगे: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – bbum

+0

@bbum I willn अकेले regex मत करो, मैं regex और कुछ अन्य पटकथा भाषा का एक संकर होगा। मेरे पास regex के साथ प्रोग्रामिंग भाषाओं को पार्स करने का अनुभव है, यह किया जा सकता है और इस मामले में यह आसान है। –

+2

मैं आपके द्वारा लागू किए जाने वाले रेगेक्स + स्क्रिप्टिंग भाषा के प्रत्येक संयोजन की गारंटी देता हूं, मुझे ओबीजेसी सिंटैक्स का एक पूरी तरह से मान्य बिट मिल सकता है जो इसे तब तक तोड़ देगा जब तक कि आप पूरे मानकों के अनुपालन संकलक को फिर से आविष्कार नहीं करेंगे ...; – bbum

संबंधित मुद्दे