2011-01-19 17 views
7

क्लैंग में नया कीवर्ड कैसे जोड़ा जा सकता है? नया कीवर्ड एक फ़ंक्शन क्वालीफायर होना चाहिए। घोषणा भाग कहां जाएगा?आप कैसे एक नया कीवर्ड जोड़ सकते हैं, एक कीवर्ड जिसे मुख्य माना जाएगा?

धन्यवाद।

+0

लगता है कि आप बजना/LLVM के लिए पार्स करने और lexing वर्गों में spelunk और वहाँ से जाने की जरूरत है, मैं तुम्हें शायद बजना मेलिंग सूची – Necrolis

+0

से बेहतर मदद मिल चाहते हैं मैं IdentifierTabe.cpp संपादित कर लिया है, और कहा कि संदेह है TokenKinds.def को नया कीवर्ड जो पार्सिंग और लेक्सिंग से है, मुझे सी से मुख्य का व्यवहार नहीं मिल रहा है क्योंकि मुझे नहीं पता कि यह कहां परिभाषित किया गया है। –

+0

[क्लैंग बनाम एल्सा के नुकसान में से एक] (http://clang.llvm.org/comparison.html#elsa) यह है कि एल्सा व्याकरण नियमों के आधार पर पूरी तरह से एक अच्छा पार्सर का उपयोग करता है। मैंने हमेशा सोचा है कि क्यों क्लैंग डेवलपर्स ने अपने पार्सर को उसी तरह लिखना नहीं चुना ... – peoro

उत्तर

7

आपको इसे/clang/Basic/TokenKinds.def को शामिल करने के लिए जोड़ना होगा, और फिर ParseDeclarationSpecifiers (...) में एक नया मामला जोड़ें।

शायद एक आसान विकल्प के लिए एक नई विशेषता परिभाषित करने के लिए किया जाएगा, और फिर

#define your_new_qualifier __attribute__((your_new_attribute))

का उपयोग नहीं तो आप एएसटी, जो त्रुटि प्रवण हो सकता है करने के लिए इस क्वालीफायर समर्थन जोड़ने के लिए होगा, जबकि विशेषताओं को एक ही समारोह की विभिन्न घोषणाओं में स्वचालित रूप से प्रचारित किया जाता है।

+0

मैं अपने व्यवहार को कहां परिभाषित करता हूं? कोड के बगल में व्यवहार को लागू करने के लिए कोई दस्तावेज है? –

+1

मैंने क्लैंग के इस विशेष पहलू पर कोई दस्तावेज नहीं देखा है, लेकिन समान चीजों को कॉपी और पेस्ट करना बहुत आसान है - आपके मामले में यह 'इनलाइन' का कार्यान्वयन होगा, उदाहरण के लिए (यह एएसटी में है), या दूसरे विकल्प के लिए पता स्थान विशेषता। –

+1

किस फ़ाइल में हमें #_few_qualifier __attribute __ ((your_new_attribute) परिभाषित करने की आवश्यकता है और "your_new_attribute" कहां जोड़ें –

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