2013-03-06 4 views
5

मैं एक इनहाउस सी भाषा बाइसन/फ्लेक्स-आधारित पार्सर को संशोधित कर रहा हूं, अन्य लोगों के बीच उचित __ विशेषता__ समर्थन प्रस्तुत करना।init-declarator-list और जीएनयू जीसीसी विशेषता व्याकरण

जब से मैं किसी भी आधिकारिक BNF शैली व्याकरण जो जीएनयू जीसीसी का वर्णन नहीं मिल सकता है __ attribute__ विचार (http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html दस्तावेज़ को छोड़कर) मैं वेब पर पाया विभिन्न कार्यान्वयन में सी ++ X11 मानक से बिट और टुकड़े और टिप्पणियों को निकालने कर रहा हूँ।

मैं लगभग यह किया गया है, लेकिन एक विशिष्ट उदाहरण (कम से कम जब यह पार्स उदाहरण जीसीसी के दस्तावेज़ ऊपर उद्धृत में शामिल करने के लिए आता) मेरे बाहरी स्रोतों में समाधान का कोई संकेत के साथ एक सिर दर्द दे दिया है।

उदाहरण के रूप में अनुवर्ती है:

__attribute__((noreturn)) void d0 (void), 
     __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 
      d2 (void); 

विवरण संलग्न का कहना है कि:

एक विशेषता विनिर्देशक सूची एक कॉमा- में एक declarator (पहले के अलावा अन्य) से ठीक पहले प्रकट हो सकता है में घोषणाकर्ताओं की पृथक सूची विनिर्देशकों और क्वालीफायरों की एक सूची का उपयोग करके एक से अधिक पहचानकर्ताओं की घोषणा। इस तरह के विशेषता विनिर्देशक केवल पहचानकर्ता पर लागू होते हैं, जिनके घोषणाकर्ता वे प्रकट होते हैं।

इस प्रकार, मुझे इस समाधान को प्रेरित किया:

init-declarator-list: 
init-declarator 
init-declarator-list , attribute-specifier-seq[opt] init-declarator 

मैं यह काम करता है पता है, लेकिन अगर यह उपर्युक्त मामले को हल करने के लिए एक उचित तरीका है मुझसे सत्यापन/समर्थन के लिए की तलाश करना चाहते हैं।

धन्यवाद,

वोज्शिएक

संपादित करें: इस लिंक (थोड़ा दिनांकित है, हालांकि) बस के रूप में एक समाधान देता है मेरा: http://plg.uwaterloo.ca/~cforall/gcc.y अजीब है, मैं इस पर पहले ठोकर खाई नहीं है, केवल अब जब मैंने __ एक्सटेंशन__ कीवर्ड की खोज की।

उत्तर

1

जीसीसी 2.X.X का प्रारंभिक संस्करण पार्सिंग के लिए बाइसन पर भरोसा करता था। तो एक पुराने संस्करण को डाउनलोड करना आपको जो चाहिए वह आपको प्रदान करना चाहिए।

बस सावधान रहें कि नए जीसीसी संस्करण के साथ नई विशेषता पेश की गई है ...

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